From 2f0127d7c16e0a58c8f0028d3cdef0a11a09356e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 15 Jan 2021 09:26:52 +0000 Subject: [PATCH 001/675] Initial file structuring and cleanup --- cutandrun.nf | 121 ++++++++++++++++++ main.nf | 108 +--------------- modules/nf-core/software/fastqc/functions.nf | 59 --------- modules/nf-core/software/fastqc/main.nf | 47 ------- modules/nf-core/software/fastqc/meta.yml | 72 ----------- modules/nf-core/software/multiqc/functions.nf | 59 --------- modules/nf-core/software/multiqc/main.nf | 35 ----- modules/nf-core/software/multiqc/meta.yml | 60 --------- 8 files changed, 126 insertions(+), 435 deletions(-) create mode 100644 cutandrun.nf delete mode 100644 modules/nf-core/software/fastqc/functions.nf delete mode 100644 modules/nf-core/software/fastqc/main.nf delete mode 100644 modules/nf-core/software/fastqc/meta.yml delete mode 100644 modules/nf-core/software/multiqc/functions.nf delete mode 100644 modules/nf-core/software/multiqc/main.nf delete mode 100644 modules/nf-core/software/multiqc/meta.yml diff --git a/cutandrun.nf b/cutandrun.nf new file mode 100644 index 00000000..af16f637 --- /dev/null +++ b/cutandrun.nf @@ -0,0 +1,121 @@ +//////////////////////////////////////////////////// +/* -- LOCAL PARAMETER VALUES -- */ +//////////////////////////////////////////////////// + +params.summary_params = [:] + +//////////////////////////////////////////////////// +/* -- VALIDATE INPUTS -- */ +//////////////////////////////////////////////////// + + +//////////////////////////////////////////////////// +/* -- COMPLETION EMAIL -- */ +//////////////////////////////////////////////////// + +workflow.onComplete { + Completion.email(workflow, params, params.summary_params, projectDir, log, multiqc_report, fail_percent_mapped) + Completion.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) +} + +//////////////////////////////////////////////////// +/* -- THE END -- */ +//////////////////////////////////////////////////// + + + +// //////////////////////////////////////////////////// +// /* -- VALIDATE INPUTS -- */ +// //////////////////////////////////////////////////// + +// // TODO nf-core: Add all file path parameters for the pipeline to the list below +// // Check input path parameters to see if they exist +// checkPathParamList = [ params.input, params.multiqc_config, params.fasta ] +// for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } + +// // Check mandatory parameters +// if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } +// if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } + +// //////////////////////////////////////////////////// +// /* -- CONFIG FILES -- */ +// //////////////////////////////////////////////////// + +// ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) +// ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() + +// //////////////////////////////////////////////////// +// /* -- IMPORT MODULES / SUBWORKFLOWS -- */ +// //////////////////////////////////////////////////// + +// // Don't overwrite global params.modules, create a copy instead and use that within the main script. +// def modules = params.modules.clone() + +// def multiqc_options = modules['multiqc'] +// multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' + +// // Local: Modules +// include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) + +// // Local: Sub-workflows +// include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) + +// // nf-core/modules: Modules +// include { FASTQC } from './modules/nf-core/software/fastqc/main' addParams( options: modules['fastqc'] ) +// include { MULTIQC } from './modules/nf-core/software/multiqc/main' addParams( options: multiqc_options ) + +// //////////////////////////////////////////////////// +// /* -- RUN MAIN WORKFLOW -- */ +// //////////////////////////////////////////////////// + +// // Info required for completion email and summary +// def multiqc_report = [] + +// workflow { + +// ch_software_versions = Channel.empty() + +// /* +// * SUBWORKFLOW: Read in samplesheet, validate and stage input files +// */ +// INPUT_CHECK ( +// ch_input +// ) + +// /* +// * MODULE: Run FastQC +// */ +// FASTQC ( +// INPUT_CHECK.out.reads +// ) +// ch_software_versions = ch_software_versions.mix(FASTQC.out.version.first().ifEmpty(null)) + + +// /* +// * MODULE: Pipeline reporting +// */ +// GET_SOFTWARE_VERSIONS ( +// ch_software_versions.map { it }.collect() +// ) + +// /* +// * MultiQC +// */ +// if (!params.skip_multiqc) { +// workflow_summary = Schema.params_summary_multiqc(workflow, summary_params) +// ch_workflow_summary = Channel.value(workflow_summary) + +// ch_multiqc_files = Channel.empty() +// ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) +// ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) +// ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) +// ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) +// ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + +// MULTIQC ( +// ch_multiqc_files.collect() +// ) +// multiqc_report = MULTIQC.out.report.toList() +// ch_software_versions = ch_software_versions.mix(MULTIQC.out.version.ifEmpty(null)) +// } +// } \ No newline at end of file diff --git a/main.nf b/main.nf index a7f7b172..311fd834 100644 --- a/main.nf +++ b/main.nf @@ -17,7 +17,6 @@ nextflow.enable.dsl = 2 def json_schema = "$projectDir/nextflow_schema.json" if (params.help) { - // TODO nf-core: Update typical command used to run pipeline def command = "nextflow run nf-core/cutandrun --input samplesheet.csv -profile docker" log.info Schema.params_help(workflow, params, json_schema, command) exit 0 @@ -27,7 +26,7 @@ if (params.help) { /* -- GENOME PARAMETER VALUES -- */ //////////////////////////////////////////////////// -params.fasta = Checks.get_genome_attribute(params, 'fasta') +//params.fasta = Checks.get_genome_attribute(params, 'fasta') //////////////////////////////////////////////////// /* -- PRINT PARAMETER SUMMARY -- */ @@ -54,109 +53,12 @@ Checks.hostname(workflow, params, log) // Check genome key exists if provided Checks.genome_exists(params, log) -//////////////////////////////////////////////////// -/* -- VALIDATE INPUTS -- */ -//////////////////////////////////////////////////// - -// TODO nf-core: Add all file path parameters for the pipeline to the list below -// Check input path parameters to see if they exist -checkPathParamList = [ params.input, params.multiqc_config, params.fasta ] -for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } - -// Check mandatory parameters -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } - -//////////////////////////////////////////////////// -/* -- CONFIG FILES -- */ -//////////////////////////////////////////////////// - -ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() - -//////////////////////////////////////////////////// -/* -- IMPORT MODULES / SUBWORKFLOWS -- */ -//////////////////////////////////////////////////// - -// Don't overwrite global params.modules, create a copy instead and use that within the main script. -def modules = params.modules.clone() - -def multiqc_options = modules['multiqc'] -multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' - -// Local: Modules -include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) - -// Local: Sub-workflows -include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) - -// nf-core/modules: Modules -include { FASTQC } from './modules/nf-core/software/fastqc/main' addParams( options: modules['fastqc'] ) -include { MULTIQC } from './modules/nf-core/software/multiqc/main' addParams( options: multiqc_options ) - -//////////////////////////////////////////////////// -/* -- RUN MAIN WORKFLOW -- */ -//////////////////////////////////////////////////// - -// Info required for completion email and summary -def multiqc_report = [] - workflow { - - ch_software_versions = Channel.empty() - - /* - * SUBWORKFLOW: Read in samplesheet, validate and stage input files - */ - INPUT_CHECK ( - ch_input - ) - - /* - * MODULE: Run FastQC - */ - FASTQC ( - INPUT_CHECK.out.reads - ) - ch_software_versions = ch_software_versions.mix(FASTQC.out.version.first().ifEmpty(null)) - - /* - * MODULE: Pipeline reporting - */ - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() - ) - - /* - * MultiQC - */ - if (!params.skip_multiqc) { - workflow_summary = Schema.params_summary_multiqc(workflow, summary_params) - ch_workflow_summary = Channel.value(workflow_summary) - - ch_multiqc_files = Channel.empty() - ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) - ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - - MULTIQC ( - ch_multiqc_files.collect() - ) - multiqc_report = MULTIQC.out.report.toList() - ch_software_versions = ch_software_versions.mix(MULTIQC.out.version.ifEmpty(null)) - } -} - -//////////////////////////////////////////////////// -/* -- COMPLETION EMAIL -- */ -//////////////////////////////////////////////////// - -workflow.onComplete { - Completion.email(workflow, params, summary_params, projectDir, log, multiqc_report) - Completion.summary(workflow, params, log) + * SUBWORKFLOW: Run main nf-core/cutandrun analysis pipeline (also valid for cutandtag analysis) + */ + include { CUTANDRUN } from './cutandrun' addParams( summary_params: summary_params ) + CUTANDRUN () } //////////////////////////////////////////////////// diff --git a/modules/nf-core/software/fastqc/functions.nf b/modules/nf-core/software/fastqc/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/nf-core/software/fastqc/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/nf-core/software/fastqc/main.nf b/modules/nf-core/software/fastqc/main.nf deleted file mode 100644 index 3cb510ac..00000000 --- a/modules/nf-core/software/fastqc/main.nf +++ /dev/null @@ -1,47 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -def options = initOptions(params.options) - -process FASTQC { - tag "$meta.id" - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - - conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0" - } else { - container "quay.io/biocontainers/fastqc:0.11.9--0" - } - - input: - tuple val(meta), path(reads) - - output: - tuple val(meta), path("*.html"), emit: html - tuple val(meta), path("*.zip") , emit: zip - path "*.version.txt" , emit: version - - script: - // Add soft-links to original FastQs for consistent naming in pipeline - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" - if (meta.single_end) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz - fastqc $options.args --threads $task.cpus ${prefix}.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt - """ - } else { - """ - [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz - [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz - fastqc $options.args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt - """ - } -} diff --git a/modules/nf-core/software/fastqc/meta.yml b/modules/nf-core/software/fastqc/meta.yml deleted file mode 100644 index 413aad8d..00000000 --- a/modules/nf-core/software/fastqc/meta.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: fastqc -description: Run FastQC on sequenced reads -keywords: - - quality control - - qc - - adapters - - fastq -tools: - - fastqc: - description: | - FastQC gives general quality metrics about your reads. - It provides information about the quality score distribution - across your reads, the per base sequence content (%A/C/G/T). - You get information about adapter contamination and other - overrepresented sequences. - homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ - documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@drpatelh" - - "@grst" - - "@ewels" - - "@FelixKrueger" diff --git a/modules/nf-core/software/multiqc/functions.nf b/modules/nf-core/software/multiqc/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/nf-core/software/multiqc/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/nf-core/software/multiqc/main.nf b/modules/nf-core/software/multiqc/main.nf deleted file mode 100644 index ff1175fc..00000000 --- a/modules/nf-core/software/multiqc/main.nf +++ /dev/null @@ -1,35 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -def options = initOptions(params.options) - -process MULTIQC { - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename: filename, options: params.options, publish_dir: getSoftwareName(task.process), publish_id: '') } - - conda (params.enable_conda ? "bioconda::multiqc=1.9" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/multiqc:1.9--pyh9f0ad1d_0" - } else { - container "quay.io/biocontainers/multiqc:1.9--pyh9f0ad1d_0" - } - - input: - path multiqc_files - - output: - path "*multiqc_report.html", emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - """ - multiqc -f $options.args . - multiqc --version | sed -e "s/multiqc, version //g" > ${software}.version.txt - """ -} diff --git a/modules/nf-core/software/multiqc/meta.yml b/modules/nf-core/software/multiqc/meta.yml deleted file mode 100644 index 02f4b415..00000000 --- a/modules/nf-core/software/multiqc/meta.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: MultiQC -description: Aggregate results from bioinformatics analyses across many samples into a single report -keywords: - - QC - - bioinformatics tools - - Beautiful stand-alone HTML report -tools: - - multiqc: - description: | - MultiQC searches a given directory for analysis logs and compiles a HTML report. - It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. - homepage: https://multiqc.info/ - documentation: https://multiqc.info/docs/ -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. -input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC -output: - - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" - - data: - type: dir - description: MultiQC data dir - pattern: "multiqc_data" - - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@abhi18av" - - "@bunop" - - "@drpatelh" From f950830740d56e0ae882a33c8be389e79687f2b1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 15 Jan 2021 09:34:00 +0000 Subject: [PATCH 002/675] Pipeline runs --- cutandrun.nf | 23 +++++++++++++++++++---- nextflow.config | 4 ++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index af16f637..2eb51fd5 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -9,14 +9,29 @@ params.summary_params = [:] //////////////////////////////////////////////////// + + + + +workflow CUTANDRUN { + +} + + + + + + + + //////////////////////////////////////////////////// /* -- COMPLETION EMAIL -- */ //////////////////////////////////////////////////// -workflow.onComplete { - Completion.email(workflow, params, params.summary_params, projectDir, log, multiqc_report, fail_percent_mapped) - Completion.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) -} +// workflow.onComplete { +// Completion.email(workflow, params, params.summary_params, projectDir, log, multiqc_report, fail_percent_mapped) +// Completion.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) +// } //////////////////////////////////////////////////// /* -- THE END -- */ diff --git a/nextflow.config b/nextflow.config index a79f38fc..8aa5ebff 100644 --- a/nextflow.config +++ b/nextflow.config @@ -126,8 +126,8 @@ manifest { homePage = 'https://github.com/nf-core/cutandrun' description = 'Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.' mainScript = 'main.nf' - nextflowVersion = '!>=20.11.0-edge' - version = '1.0dev' + nextflowVersion = '!>=20.10.0' + version = '1.0-dev' } // Function to ensure that resource requirements don't go beyond From e7813eda746e2c0431396a25949ee7933b5b34b7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 15 Jan 2021 10:45:03 +0000 Subject: [PATCH 003/675] sample sheet check implimented --- conf/test_full.config | 9 ++------- cutandrun.nf | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index 85b58b87..8d107252 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -11,11 +11,6 @@ params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' - // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design_full.csv' - - // Genome references - genome = 'GRCh37' + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' + genome = 'GRCh38' } diff --git a/cutandrun.nf b/cutandrun.nf index 2eb51fd5..88129c45 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -8,13 +8,59 @@ params.summary_params = [:] /* -- VALIDATE INPUTS -- */ //////////////////////////////////////////////////// +// Check input path parameters to see if they exist +checkPathParamList = [ + params.input +] +for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } + +// Check mandatory parameters +if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } + +// Save AWS IGenomes file containing annotation version +def anno_readme = params.genomes[ params.genome ]?.readme +if (anno_readme && file(anno_readme).exists()) { + file("${params.outdir}/genome/").mkdirs() + file(anno_readme).copyTo("${params.outdir}/genome/") +} + +// Stage dummy file to be used as an optional input where required +//ch_dummy_file = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) + +//////////////////////////////////////////////////// +/* -- CONFIG FILES -- */ +//////////////////////////////////////////////////// +//////////////////////////////////////////////////// +/* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ +//////////////////////////////////////////////////// +// Don't overwrite global params.modules, create a copy instead and use that within the main script. +def modules = params.modules.clone() +include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) +//////////////////////////////////////////////////// +/* -- RUN MAIN WORKFLOW -- */ +//////////////////////////////////////////////////// workflow CUTANDRUN { + /* + * SUBWORKFLOW: Read in samplesheet, validate and stage input files + */ + INPUT_CHECK ( + ch_input + ) + .map { + meta, fastq -> + meta.id = meta.id.split('_')[0..-2].join('_') + [ meta, fastq ] } + .groupTuple(by: [0]) + .map { it -> [ it[0], it[1].flatten() ] } + .set { ch_cat_fastq } + ch_cat_fastq | view + } From 0242c40cda11cb12803bdeaf30134b470f1d52d3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 15 Jan 2021 15:35:21 +0000 Subject: [PATCH 004/675] Added fastq concatenation --- conf/modules.config | 10 ++++-- cutandrun.nf | 12 +++++++ modules/local/process/cat_fastq.nf | 58 ++++++++++++++++++++++++++++++ nextflow.config | 33 ++++++++++++----- 4 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 modules/local/process/cat_fastq.nf diff --git a/conf/modules.config b/conf/modules.config index f26191e0..c20fc6c8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,11 +18,15 @@ params { modules { + 'cat_fastq' { + publish_dir = 'fastq' + } 'fastqc' { - args = "--quiet" + args = "--quiet" } - 'multiqc' { - args = "" + 'trimgalore' { + args = "--fastqc" + publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] } } } diff --git a/cutandrun.nf b/cutandrun.nf index 88129c45..48060d89 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -38,7 +38,11 @@ if (anno_readme && file(anno_readme).exists()) { // Don't overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() +def cat_fastq_options = modules['cat_fastq'] +if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } + include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) +include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) //////////////////////////////////////////////////// /* -- RUN MAIN WORKFLOW -- */ @@ -61,6 +65,14 @@ workflow CUTANDRUN { .set { ch_cat_fastq } ch_cat_fastq | view + /* + * MODULE: Concatenate FastQ files from same sample if required + */ + CAT_FASTQ ( + ch_cat_fastq + ) + + } diff --git a/modules/local/process/cat_fastq.nf b/modules/local/process/cat_fastq.nf new file mode 100644 index 00000000..070ebfb0 --- /dev/null +++ b/modules/local/process/cat_fastq.nf @@ -0,0 +1,58 @@ +// Import generic module functions +include { initOptions; saveFiles } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +/* + * Concatenate FastQ files + */ +process CAT_FASTQ { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', publish_id:meta.id) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.merged.fastq.gz"), emit: reads + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + readList = reads.collect{it.toString()} + if (!meta.single_end) { + if (readList.size > 2) { + def read1 = [] + def read2 = [] + readList.eachWithIndex{ v, ix -> ( ix & 1 ? read2 : read1 ) << v } + """ + cat ${read1.sort().join(' ')} > ${prefix}_1.merged.fastq.gz + cat ${read2.sort().join(' ')} > ${prefix}_2.merged.fastq.gz + """ + } else { + """ + ln -s ${reads[0]} ${prefix}_1.merged.fastq.gz + ln -s ${reads[1]} ${prefix}_2.merged.fastq.gz + """ + } + } else { + if (readList.size > 1) { + """ + cat ${readList.sort().join(' ')} > ${prefix}.merged.fastq.gz + """ + } else { + """ + ln -s $reads ${prefix}.merged.fastq.gz + """ + } + } +} diff --git a/nextflow.config b/nextflow.config index 8aa5ebff..a7b9854b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,25 +14,40 @@ params { // References genome = '' - igenomes_base = 's3://ngi-igenomes/igenomes/' - igenomes_ignore = false - - // MultiQC options - multiqc_config = '' - multiqc_title = '' - max_multiqc_email_size = '25.MB' + + // QC + skip_qc = false + skip_fastqc = false skip_multiqc = false + // Sample handling + save_merged_fastq = false + + // Trimming + clip_r1 = 0 + clip_r2 = 0 + three_prime_clip_r1 = 0 + three_prime_clip_r2 = 0 + trim_nextseq = 0 + save_trimmed = false + skip_trimming = false + // Boilerplate options + enable_conda = false + clusterOptions = '' outdir = './results' - tracedir = "${params.outdir}/pipeline_info" publish_dir_mode = 'copy' + multiqc_config = '' + multiqc_title = '' email = '' email_on_fail = '' + max_multiqc_email_size = '25.MB' plaintext_email = false monochrome_logs = false help = false - enable_conda = false + igenomes_base = 's3://ngi-igenomes/igenomes/' + tracedir = "${params.outdir}/pipeline_info" + igenomes_ignore = false singularity_pull_docker_container = false // Config options From 337403cf61de673d1dd940e838ceac472b5e8fde Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 15 Jan 2021 16:07:30 +0000 Subject: [PATCH 005/675] fastqc and trim galore running --- conf/local.config | 15 ++ cutandrun.nf | 145 +++++------------- modules/nf-core/software/fastqc/functions.nf | 59 +++++++ modules/nf-core/software/fastqc/main.nf | 47 ++++++ modules/nf-core/software/fastqc/meta.yml | 72 +++++++++ .../nf-core/software/trimgalore/functions.nf | 59 +++++++ modules/nf-core/software/trimgalore/main.nf | 83 ++++++++++ modules/nf-core/software/trimgalore/meta.yml | 99 ++++++++++++ .../nf-core/subworkflow/fastqc_trimgalore.nf | 50 ++++++ nextflow.config | 1 + 10 files changed, 522 insertions(+), 108 deletions(-) create mode 100644 conf/local.config create mode 100644 modules/nf-core/software/fastqc/functions.nf create mode 100644 modules/nf-core/software/fastqc/main.nf create mode 100644 modules/nf-core/software/fastqc/meta.yml create mode 100644 modules/nf-core/software/trimgalore/functions.nf create mode 100644 modules/nf-core/software/trimgalore/main.nf create mode 100644 modules/nf-core/software/trimgalore/meta.yml create mode 100644 modules/nf-core/subworkflow/fastqc_trimgalore.nf diff --git a/conf/local.config b/conf/local.config new file mode 100644 index 00000000..2d7b1940 --- /dev/null +++ b/conf/local.config @@ -0,0 +1,15 @@ +/* + * ------------------------------------------------- + * Nextflow config file for running tests on a laptop + * ------------------------------------------------- + * Defines bundled input files and everything required + * to run a fast and simple test. Use as follows: + * nextflow run nf-core/cutandrun -profile test, + */ + +params { + // Limit resources so that this can run on GitHub Actions + max_cpus = 8 + max_memory = 8.GB + max_time = 6.h +} diff --git a/cutandrun.nf b/cutandrun.nf index 48060d89..b061271d 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -41,8 +41,23 @@ def modules = params.modules.clone() def cat_fastq_options = modules['cat_fastq'] if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } -include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) -include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) +include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) +include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) +include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) + +//////////////////////////////////////////////////// +/* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ +//////////////////////////////////////////////////// + +/* + * SUBWORKFLOW: Consisting entirely of nf-core/modules + */ + +def trimgalore_options = modules['trimgalore'] +trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' +if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } + +include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) //////////////////////////////////////////////////// /* -- RUN MAIN WORKFLOW -- */ @@ -50,6 +65,9 @@ include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams workflow CUTANDRUN { + // Init + ch_software_versions = Channel.empty() + /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ @@ -72,16 +90,25 @@ workflow CUTANDRUN { ch_cat_fastq ) + /* + * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC + */ + FASTQC_TRIMGALORE ( + CAT_FASTQ.out.reads, + params.skip_fastqc || params.skip_qc, + params.skip_trimming + ) + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + /* + * MODULE: Pipeline reporting + */ + GET_SOFTWARE_VERSIONS ( + ch_software_versions.map { it }.collect() + ) } - - - - - - - //////////////////////////////////////////////////// /* -- COMPLETION EMAIL -- */ //////////////////////////////////////////////////// @@ -93,102 +120,4 @@ workflow CUTANDRUN { //////////////////////////////////////////////////// /* -- THE END -- */ -//////////////////////////////////////////////////// - - - -// //////////////////////////////////////////////////// -// /* -- VALIDATE INPUTS -- */ -// //////////////////////////////////////////////////// - -// // TODO nf-core: Add all file path parameters for the pipeline to the list below -// // Check input path parameters to see if they exist -// checkPathParamList = [ params.input, params.multiqc_config, params.fasta ] -// for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } - -// // Check mandatory parameters -// if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -// if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } - -// //////////////////////////////////////////////////// -// /* -- CONFIG FILES -- */ -// //////////////////////////////////////////////////// - -// ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) -// ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() - -// //////////////////////////////////////////////////// -// /* -- IMPORT MODULES / SUBWORKFLOWS -- */ -// //////////////////////////////////////////////////// - -// // Don't overwrite global params.modules, create a copy instead and use that within the main script. -// def modules = params.modules.clone() - -// def multiqc_options = modules['multiqc'] -// multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' - -// // Local: Modules -// include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) - -// // Local: Sub-workflows -// include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) - -// // nf-core/modules: Modules -// include { FASTQC } from './modules/nf-core/software/fastqc/main' addParams( options: modules['fastqc'] ) -// include { MULTIQC } from './modules/nf-core/software/multiqc/main' addParams( options: multiqc_options ) - -// //////////////////////////////////////////////////// -// /* -- RUN MAIN WORKFLOW -- */ -// //////////////////////////////////////////////////// - -// // Info required for completion email and summary -// def multiqc_report = [] - -// workflow { - -// ch_software_versions = Channel.empty() - -// /* -// * SUBWORKFLOW: Read in samplesheet, validate and stage input files -// */ -// INPUT_CHECK ( -// ch_input -// ) - -// /* -// * MODULE: Run FastQC -// */ -// FASTQC ( -// INPUT_CHECK.out.reads -// ) -// ch_software_versions = ch_software_versions.mix(FASTQC.out.version.first().ifEmpty(null)) - - -// /* -// * MODULE: Pipeline reporting -// */ -// GET_SOFTWARE_VERSIONS ( -// ch_software_versions.map { it }.collect() -// ) - -// /* -// * MultiQC -// */ -// if (!params.skip_multiqc) { -// workflow_summary = Schema.params_summary_multiqc(workflow, summary_params) -// ch_workflow_summary = Channel.value(workflow_summary) - -// ch_multiqc_files = Channel.empty() -// ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) -// ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) -// ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) -// ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) -// ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - -// MULTIQC ( -// ch_multiqc_files.collect() -// ) -// multiqc_report = MULTIQC.out.report.toList() -// ch_software_versions = ch_software_versions.mix(MULTIQC.out.version.ifEmpty(null)) -// } -// } \ No newline at end of file +//////////////////////////////////////////////////// \ No newline at end of file diff --git a/modules/nf-core/software/fastqc/functions.nf b/modules/nf-core/software/fastqc/functions.nf new file mode 100644 index 00000000..b3ac3801 --- /dev/null +++ b/modules/nf-core/software/fastqc/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/fastqc/main.nf b/modules/nf-core/software/fastqc/main.nf new file mode 100644 index 00000000..3cb510ac --- /dev/null +++ b/modules/nf-core/software/fastqc/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process FASTQC { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0" + } else { + container "quay.io/biocontainers/fastqc:0.11.9--0" + } + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.html"), emit: html + tuple val(meta), path("*.zip") , emit: zip + path "*.version.txt" , emit: version + + script: + // Add soft-links to original FastQs for consistent naming in pipeline + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + if (meta.single_end) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz + fastqc $options.args --threads $task.cpus ${prefix}.fastq.gz + fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + """ + } else { + """ + [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz + fastqc $options.args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz + fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + """ + } +} diff --git a/modules/nf-core/software/fastqc/meta.yml b/modules/nf-core/software/fastqc/meta.yml new file mode 100644 index 00000000..413aad8d --- /dev/null +++ b/modules/nf-core/software/fastqc/meta.yml @@ -0,0 +1,72 @@ +name: fastqc +description: Run FastQC on sequenced reads +keywords: + - quality control + - qc + - adapters + - fastq +tools: + - fastqc: + description: | + FastQC gives general quality metrics about your reads. + It provides information about the quality score distribution + across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other + overrepresented sequences. + homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ + documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@grst" + - "@ewels" + - "@FelixKrueger" diff --git a/modules/nf-core/software/trimgalore/functions.nf b/modules/nf-core/software/trimgalore/functions.nf new file mode 100644 index 00000000..b3ac3801 --- /dev/null +++ b/modules/nf-core/software/trimgalore/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/trimgalore/main.nf b/modules/nf-core/software/trimgalore/main.nf new file mode 100644 index 00000000..79cc7456 --- /dev/null +++ b/modules/nf-core/software/trimgalore/main.nf @@ -0,0 +1,83 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process TRIMGALORE { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::trim-galore=0.6.6" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/trim-galore:0.6.6--0" + } else { + container "quay.io/biocontainers/trim-galore:0.6.6--0" + } + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.fq.gz") , emit: reads + tuple val(meta), path("*report.txt"), emit: log + path "*.version.txt" , emit: version + + tuple val(meta), path("*.html"), emit: html optional true + tuple val(meta), path("*.zip") , emit: zip optional true + + script: + // Calculate number of --cores for TrimGalore based on value of task.cpus + // See: https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019 + // See: https://github.com/nf-core/atacseq/pull/65 + def cores = 1 + if (task.cpus) { + cores = (task.cpus as int) - 4 + if (meta.single_end) cores = (task.cpus as int) - 3 + if (cores < 1) cores = 1 + if (cores > 4) cores = 4 + } + + // Clipping presets have to be evaluated in the context of SE/PE + def c_r1 = params.clip_r1 > 0 ? "--clip_r1 ${params.clip_r1}" : '' + def c_r2 = params.clip_r2 > 0 ? "--clip_r2 ${params.clip_r2}" : '' + def tpc_r1 = params.three_prime_clip_r1 > 0 ? "--three_prime_clip_r1 ${params.three_prime_clip_r1}" : '' + def tpc_r2 = params.three_prime_clip_r2 > 0 ? "--three_prime_clip_r2 ${params.three_prime_clip_r2}" : '' + + // Added soft-links to original fastqs for consistent naming in MultiQC + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + if (meta.single_end) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz + trim_galore \\ + $options.args \\ + --cores $cores \\ + --gzip \\ + $c_r1 \\ + $tpc_r1 \\ + ${prefix}.fastq.gz + echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//' > ${software}.version.txt + """ + } else { + """ + [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz + trim_galore \\ + $options.args \\ + --cores $cores \\ + --paired \\ + --gzip \\ + $c_r1 \\ + $c_r2 \\ + $tpc_r1 \\ + $tpc_r2 \\ + ${prefix}_1.fastq.gz \\ + ${prefix}_2.fastq.gz + echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//' > ${software}.version.txt + """ + } +} diff --git a/modules/nf-core/software/trimgalore/meta.yml b/modules/nf-core/software/trimgalore/meta.yml new file mode 100644 index 00000000..86ba5cd4 --- /dev/null +++ b/modules/nf-core/software/trimgalore/meta.yml @@ -0,0 +1,99 @@ +name: trimgalore +description: Trim FastQ files using Trim Galore! +keywords: + - trimming + - adapters + - sequencing adapters + - fastq +tools: + - trimgalore: + description: | + A wrapper tool around Cutadapt and FastQC to consistently apply quality + and adapter trimming to FastQ files, with some extra functionality for + MspI-digested RRBS-type (Reduced Representation Bisufite-Seq) libraries. + homepage: https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/ + documentation: https://github.com/FelixKrueger/TrimGalore/blob/master/Docs/Trim_Galore_User_Guide.md +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. + - clip_r1: + type: integer + description: | + Instructs Trim Galore to remove bp from the 5' end of read 1 + (or single-end reads) + - clip_r2: + type: integer + description: | + Instructs Trim Galore to remove bp from the 5' end of read 2 + (paired-end reads only) + - three_prime_clip_r1: + type: integer + description: | + Instructs Trim Galore to remove bp from the 3' end of read 1 + AFTER adapter/quality trimming has been performed + - three_prime_clip_r2: + type: integer + description: | + Instructs Trim Galore to re move bp from the 3' end of read 2 + AFTER adapter/quality trimming has been performed +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input adapter trimmed FastQ files of size 1 and 2 for + single-end and paired-end data, respectively. + pattern: "*.{fq.gz}" + - html: + type: file + description: FastQC report (optional) + pattern: "*_{fastqc.html}" + - zip: + type: file + description: FastQC report archive (optional) + pattern: "*_{fastqc.zip}" + - log: + type: file + description: Trim Galore! trimming report + pattern: "*_{report.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@ewels" + - "@FelixKrueger" diff --git a/modules/nf-core/subworkflow/fastqc_trimgalore.nf b/modules/nf-core/subworkflow/fastqc_trimgalore.nf new file mode 100644 index 00000000..e24e27d3 --- /dev/null +++ b/modules/nf-core/subworkflow/fastqc_trimgalore.nf @@ -0,0 +1,50 @@ +/* + * Read QC, read trimming and post trim QC + */ + +params.fastqc_options = [:] +params.trimgalore_options = [:] + +include { FASTQC } from '../software/fastqc/main' addParams( options: params.fastqc_options ) +include { TRIMGALORE } from '../software/trimgalore/main' addParams( options: params.trimgalore_options ) + +workflow FASTQC_TRIMGALORE { + take: + reads // channel: [ val(meta), [ reads ] ] + skip_fastqc // boolean: true/false + skip_trimming // boolean: true/false + + main: + fastqc_html = Channel.empty() + fastqc_zip = Channel.empty() + fastqc_version = Channel.empty() + if (!skip_fastqc) { + FASTQC ( reads ).html.set { fastqc_html } + fastqc_zip = FASTQC.out.zip + fastqc_version = FASTQC.out.version + } + + trim_html = Channel.empty() + trim_zip = Channel.empty() + trim_log = Channel.empty() + trimgalore_version = Channel.empty() + if (!skip_trimming) { + TRIMGALORE ( reads ).reads.set { trim_reads } + trim_html = TRIMGALORE.out.html + trim_zip = TRIMGALORE.out.zip + trim_log = TRIMGALORE.out.log + trimgalore_version = TRIMGALORE.out.version + } + + emit: + reads = trim_reads // channel: [ val(meta), [ reads ] ] + + fastqc_html // channel: [ val(meta), [ html ] ] + fastqc_zip // channel: [ val(meta), [ zip ] ] + fastqc_version // path: *.version.txt + + trim_html // channel: [ val(meta), [ html ] ] + trim_zip // channel: [ val(meta), [ zip ] ] + trim_log // channel: [ val(meta), [ txt ] ] + trimgalore_version // path: *.version.txt +} diff --git a/nextflow.config b/nextflow.config index a7b9854b..bf0c086c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -104,6 +104,7 @@ profiles { podman { podman.enabled = true } + local { includeConfig 'conf/local.config' } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } } From faa24618a5ed2eb5d4ccae26c9fdfe53b203a734 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sat, 16 Jan 2021 13:06:16 +0000 Subject: [PATCH 006/675] Added bowtie --- .../software/bowtie/align/functions.nf | 60 ++++++++++++++++ modules/nf-core/software/bowtie/align/main.nf | 59 ++++++++++++++++ .../nf-core/software/bowtie/align/meta.yml | 69 +++++++++++++++++++ .../software/bowtie/index/functions.nf | 60 ++++++++++++++++ modules/nf-core/software/bowtie/index/main.nf | 35 ++++++++++ .../nf-core/software/bowtie/index/meta.yml | 51 ++++++++++++++ 6 files changed, 334 insertions(+) create mode 100644 modules/nf-core/software/bowtie/align/functions.nf create mode 100644 modules/nf-core/software/bowtie/align/main.nf create mode 100644 modules/nf-core/software/bowtie/align/meta.yml create mode 100644 modules/nf-core/software/bowtie/index/functions.nf create mode 100644 modules/nf-core/software/bowtie/index/main.nf create mode 100644 modules/nf-core/software/bowtie/index/meta.yml diff --git a/modules/nf-core/software/bowtie/align/functions.nf b/modules/nf-core/software/bowtie/align/functions.nf new file mode 100644 index 00000000..6f3b4b29 --- /dev/null +++ b/modules/nf-core/software/bowtie/align/functions.nf @@ -0,0 +1,60 @@ + +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/bowtie/align/main.nf b/modules/nf-core/software/bowtie/align/main.nf new file mode 100644 index 00000000..de9e8b3d --- /dev/null +++ b/modules/nf-core/software/bowtie/align/main.nf @@ -0,0 +1,59 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process BOWTIE_ALIGN { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? 'bioconda::bowtie=1.3.0 bioconda::samtools=1.10' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container 'https://depot.galaxyproject.org/singularity/mulled-v2-ffbf83a6b0ab6ec567a336cf349b80637135bca3:9e14e16c284d6860574cf5b624bbc44c793cb024-0' + } else { + container 'quay.io/biocontainers/mulled-v2-ffbf83a6b0ab6ec567a336cf349b80637135bca3:9e14e16c284d6860574cf5b624bbc44c793cb024-0' + } + + input: + tuple val(meta), path(reads) + path index + + output: + tuple val(meta), path('*.bam'), emit: bam + tuple val(meta), path('*.out'), emit: log + path '*.version.txt' , emit: version + tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def unaligned = params.save_unaligned ? "--un ${prefix}.unmapped.fastq" : '' + def endedness = meta.single_end ? "$reads" : "-1 ${reads[0]} -2 ${reads[1]}" + """ + INDEX=`find -L ./ -name "*.3.ebwt" | sed 's/.3.ebwt//'` + bowtie \\ + --threads $task.cpus \\ + --sam \\ + -x \$INDEX \\ + -q \\ + $unaligned \\ + $options.args \\ + $endedness \\ + 2> ${prefix}.out \\ + | samtools view $options.args2 -@ $task.cpus -bS -o ${prefix}.bam - + + if [ -f ${prefix}.unmapped.fastq ]; then + gzip ${prefix}.unmapped.fastq + fi + if [ -f ${prefix}.unmapped_1.fastq ]; then + gzip ${prefix}.unmapped_1.fastq + gzip ${prefix}.unmapped_2.fastq + fi + + echo \$(bowtie --version 2>&1) | sed 's/^.*bowtie-align-s version //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/bowtie/align/meta.yml b/modules/nf-core/software/bowtie/align/meta.yml new file mode 100644 index 00000000..ebadcdca --- /dev/null +++ b/modules/nf-core/software/bowtie/align/meta.yml @@ -0,0 +1,69 @@ +name: bowtie_align +description: Align reads to a reference genome using bowtie +keywords: + - align + - fasta + - genome + - reference +tools: + - bowtie: + description: | + bowtie is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: http://bowtie-bio.sourceforge.net/index.shtml + documentation: http://bowtie-bio.sourceforge.net/manual.shtml + arxiv: arXiv:1303.3997 +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. + - save_unaligned: + type: boolean + description: Save unaligned reads +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - index: + type: file + description: Bowtie genome index files + pattern: "*.ebwt" +output: + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - fastq: + type: file + description: Unaligned FastQ files + pattern: "*.fastq.gz" +authors: + - "@kevinmenden" diff --git a/modules/nf-core/software/bowtie/index/functions.nf b/modules/nf-core/software/bowtie/index/functions.nf new file mode 100644 index 00000000..6f3b4b29 --- /dev/null +++ b/modules/nf-core/software/bowtie/index/functions.nf @@ -0,0 +1,60 @@ + +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/bowtie/index/main.nf b/modules/nf-core/software/bowtie/index/main.nf new file mode 100644 index 00000000..8b982bcf --- /dev/null +++ b/modules/nf-core/software/bowtie/index/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process BOWTIE_INDEX { + tag "$fasta" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? 'bioconda::bowtie=1.3.0' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container 'https://depot.galaxyproject.org/singularity/bowtie:1.3.0--py38hed8969a_1' + } else { + container 'quay.io/biocontainers/bowtie:1.3.0--py38hed8969a_1' + } + + input: + path fasta + + output: + path 'bowtie', emit: index + path '*.version.txt', emit: version + + script: + def software = getSoftwareName(task.process) + """ + mkdir bowtie + bowtie-build --threads $task.cpus $fasta bowtie/${fasta.baseName} + echo \$(bowtie --version 2>&1) | sed 's/^.*bowtie-align-s version //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/bowtie/index/meta.yml b/modules/nf-core/software/bowtie/index/meta.yml new file mode 100644 index 00000000..e5296b05 --- /dev/null +++ b/modules/nf-core/software/bowtie/index/meta.yml @@ -0,0 +1,51 @@ +name: bowtie_index +description: Create bowtie index for reference genome +keywords: + - index + - fasta + - genome + - reference +tools: + - bowtie: + description: | + bowtie is a software package for mapping DNA sequences against + a large reference genome, such as the human genome. + homepage: http://bowtie-bio.sourceforge.net/index.shtml + documentation: http://bowtie-bio.sourceforge.net/manual.shtml + arxiv: arXiv:1303.3997 +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - fasta: + type: file + description: Input genome fasta file +output: + - index: + type: file + description: Bowtie genome index files + pattern: "*.ebwt" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@kevinmenden" From 9eeec410cb99191915c3fa60c2bffd5f7e574f7e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 18 Jan 2021 12:01:05 +0000 Subject: [PATCH 007/675] added bowtie2 indexing and align --- conf/modules.config | 11 +++ conf/test.config | 2 +- conf/test_hg38_chr7.config | 17 +++++ cutandrun.nf | 57 ++++++++++++--- modules/local/process/get_chrom_sizes.nf | 37 ++++++++++ modules/local/process/gunzip.nf | 34 +++++++++ modules/local/process/untar.nf | 33 +++++++++ .../software/bowtie2}/align/functions.nf | 3 +- modules/local/software/bowtie2/align/main.nf | 57 +++++++++++++++ modules/local/software/bowtie2/align/meta.yml | 0 .../software/bowtie2}/index/functions.nf | 3 +- modules/local/software/bowtie2/index/main.nf | 34 +++++++++ modules/local/software/bowtie2/index/meta.yml | 0 modules/local/subworkflow/prepare_genome.nf | 56 +++++++++++++++ modules/nf-core/software/bowtie/align/main.nf | 59 ---------------- .../nf-core/software/bowtie/align/meta.yml | 69 ------------------- modules/nf-core/software/bowtie/index/main.nf | 35 ---------- .../nf-core/software/bowtie/index/meta.yml | 51 -------------- nextflow.config | 6 ++ 19 files changed, 337 insertions(+), 227 deletions(-) create mode 100644 conf/test_hg38_chr7.config create mode 100644 modules/local/process/get_chrom_sizes.nf create mode 100644 modules/local/process/gunzip.nf create mode 100644 modules/local/process/untar.nf rename modules/{nf-core/software/bowtie => local/software/bowtie2}/align/functions.nf (97%) create mode 100644 modules/local/software/bowtie2/align/main.nf create mode 100644 modules/local/software/bowtie2/align/meta.yml rename modules/{nf-core/software/bowtie => local/software/bowtie2}/index/functions.nf (97%) create mode 100644 modules/local/software/bowtie2/index/main.nf create mode 100644 modules/local/software/bowtie2/index/meta.yml create mode 100644 modules/local/subworkflow/prepare_genome.nf delete mode 100644 modules/nf-core/software/bowtie/align/main.nf delete mode 100644 modules/nf-core/software/bowtie/align/meta.yml delete mode 100644 modules/nf-core/software/bowtie/index/main.nf delete mode 100644 modules/nf-core/software/bowtie/index/meta.yml diff --git a/conf/modules.config b/conf/modules.config index c20fc6c8..5ff791e2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -28,5 +28,16 @@ params { args = "--fastqc" publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] } + 'bowtie2_index' { + publish_dir = "genome/index" + } } } + + + +// --end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700 -p ${cores} -x ${ref} -1 +// --end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700 + +// --end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700 -p ${cores} -x ${spikeInRef} -1 +// --end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700 \ No newline at end of file diff --git a/conf/test.config b/conf/test.config index e1ed861e..e3b40534 100644 --- a/conf/test.config +++ b/conf/test.config @@ -22,5 +22,5 @@ params { input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design.csv' // Genome references - genome = 'R64-1-1' + genome = 'GRCh38' } diff --git a/conf/test_hg38_chr7.config b/conf/test_hg38_chr7.config new file mode 100644 index 00000000..b2380af5 --- /dev/null +++ b/conf/test_hg38_chr7.config @@ -0,0 +1,17 @@ +/* + * ------------------------------------------------- + * Nextflow config file for running full-size tests + * ------------------------------------------------- + * Defines bundled input files and everything required + * to run a full size pipeline test. Use as follows: + * nextflow run nf-core/cutandrun -profile test_full, + */ + +params { + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function' + + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' + fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' + genome = 'GRCh38' +} diff --git a/cutandrun.nf b/cutandrun.nf index b061271d..e4267f18 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -10,12 +10,15 @@ params.summary_params = [:] // Check input path parameters to see if they exist checkPathParamList = [ - params.input + params.input, + params.fasta, + params.bowtie2_index ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } +if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } // Save AWS IGenomes file containing annotation version def anno_readme = params.genomes[ params.genome ]?.readme @@ -28,35 +31,65 @@ if (anno_readme && file(anno_readme).exists()) { //ch_dummy_file = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) //////////////////////////////////////////////////// -/* -- CONFIG FILES -- */ +/* -- CONFIG FILES -- */ //////////////////////////////////////////////////// + + //////////////////////////////////////////////////// -/* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ +/* -- INIALISE PARAMETERS AND OPTIONS -- */ //////////////////////////////////////////////////// // Don't overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() +// QC def cat_fastq_options = modules['cat_fastq'] if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } +// Trimming +def trimgalore_options = modules['trimgalore'] +trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' +if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } + +// Alignment +def prepareToolIndices = ['bowtie2'] + +// Genome +def publish_genome_options = params.save_reference ? [publish_dir: 'genome'] : [publish_files: false] +def publish_index_options = params.save_reference ? [publish_dir: 'genome/index'] : [publish_files: false] + +def bowtie2_index_options = modules['bowtie2_index'] +if (!params.save_reference) { bowtie2_index_options['publish_files'] = false } + +//////////////////////////////////////////////////// +/* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ +//////////////////////////////////////////////////// + +/* + * MODULES + */ include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) -include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) + +/* + * SUBWORKFLOW: Consisting entirely of nf-core/modules + */ +include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, index_options: publish_index_options, bt2_index_options: bowtie2_index_options) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ //////////////////////////////////////////////////// /* - * SUBWORKFLOW: Consisting entirely of nf-core/modules + * MODULES */ -def trimgalore_options = modules['trimgalore'] -trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' -if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } +/* + * SUBWORKFLOW: Consisting entirely of nf-core/modules + */ include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) //////////////////////////////////////////////////// @@ -68,6 +101,14 @@ workflow CUTANDRUN { // Init ch_software_versions = Channel.empty() + /* + * SUBWORKFLOW: Uncompress and prepare reference genome files + */ + PREPARE_GENOME ( + prepareToolIndices + ) + ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) + /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ diff --git a/modules/local/process/get_chrom_sizes.nf b/modules/local/process/get_chrom_sizes.nf new file mode 100644 index 00000000..1dbca7f7 --- /dev/null +++ b/modules/local/process/get_chrom_sizes.nf @@ -0,0 +1,37 @@ +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +/* + * Get chromosome sizes from a fasta file + */ +process GET_CHROM_SIZES { + tag "$fasta" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:"genome", publish_id:'') } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + path fasta + + output: + path '*.sizes' , emit: sizes + path '*.fai' , emit: fai + path "*.version.txt", emit: version + + script: + def software = 'samtools' + """ + samtools faidx $fasta + cut -f 1,2 ${fasta}.fai > ${fasta}.sizes + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/local/process/gunzip.nf b/modules/local/process/gunzip.nf new file mode 100644 index 00000000..c0f40436 --- /dev/null +++ b/modules/local/process/gunzip.nf @@ -0,0 +1,34 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process GUNZIP { + tag "$archive" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + path archive + + output: + path "$gunzip", emit: gunzip + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + gunzip = archive.toString() - '.gz' + """ + gunzip -f $options.args $archive + echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/local/process/untar.nf b/modules/local/process/untar.nf new file mode 100644 index 00000000..291c132d --- /dev/null +++ b/modules/local/process/untar.nf @@ -0,0 +1,33 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process UNTAR { + tag "$archive" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + path archive + + output: + path "$untar" , emit: untar + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + untar = archive.toString() - '.tar.gz' + """ + tar -xzvf $options.args $archive + echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/bowtie/align/functions.nf b/modules/local/software/bowtie2/align/functions.nf similarity index 97% rename from modules/nf-core/software/bowtie/align/functions.nf rename to modules/local/software/bowtie2/align/functions.nf index 6f3b4b29..d25eea86 100644 --- a/modules/nf-core/software/bowtie/align/functions.nf +++ b/modules/local/software/bowtie2/align/functions.nf @@ -1,4 +1,3 @@ - /* * ----------------------------------------------------- * Utility functions used in nf-core DSL2 module files @@ -31,7 +30,7 @@ def initOptions(Map args) { */ def getPathFromList(path_list) { def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } diff --git a/modules/local/software/bowtie2/align/main.nf b/modules/local/software/bowtie2/align/main.nf new file mode 100644 index 00000000..121b8452 --- /dev/null +++ b/modules/local/software/bowtie2/align/main.nf @@ -0,0 +1,57 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process BOWTIE2_ALIGN { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + // bowtie2=2.4.2, samtools=1.11, pigz=2.3.4 + conda (params.enable_conda ? "bioconda::bowtie2=2.4.2 bioconda::bowtie2=2.4.2 conda-forge::pigz=2.3.4" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-ac74a7f02cebcfcc07d8e8d1d750af9c83b4d45a:577a697be67b5ae9b16f637fd723b8263a3898b3-0" + } else { + container "quay.io/biocontainers/mulled-v2-ac74a7f02cebcfcc07d8e8d1d750af9c83b4d45a:577a697be67b5ae9b16f637fd723b8263a3898b3-0" + } + + input: + tuple val(meta), path(reads) + path index + + output: + tuple val(meta), path("*.bam"), emit: bam + //path "*.version.txt" , emit: version + //tuple val(meta), path("${prefix}${opts.unmapped_suffix}.1.fastq.gz"), path("${prefix}${opts.unmapped_suffix}.2.fastq.gz"), optional: true, emit: unmapped_fq_pe + //tuple val(meta), path("${prefix}${opts.unmapped_suffix}.fastq.gz"), optional: true, emit: unmapped_fq_s + //tuple val(meta), path("${summary_name}.txt"), emit: report_meta + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def inputs = '' + def unpaired = '' + + read_list = reads.collect{it.toString()} + if(read_list.size > 1){ + inputs = '-1 ' + reads[0] + ' -2 ' + reads[1] + unpaired = '--un-gz' + } + else { + inputs = '-U ' + reads[0] + unpaired = '--un-conc-gz' + } + + """ + bowtie2 \\ + $options.args \\ + -p $task.cpus \\ + --no-unal \\ + $unpaired \\ + -x ${index[0].simpleName} \\ + $inputs \\ + | samtools view $options.args2 -@ $task.cpus -bS -o ${prefix}.bam - + """ \ No newline at end of file diff --git a/modules/local/software/bowtie2/align/meta.yml b/modules/local/software/bowtie2/align/meta.yml new file mode 100644 index 00000000..e69de29b diff --git a/modules/nf-core/software/bowtie/index/functions.nf b/modules/local/software/bowtie2/index/functions.nf similarity index 97% rename from modules/nf-core/software/bowtie/index/functions.nf rename to modules/local/software/bowtie2/index/functions.nf index 6f3b4b29..d25eea86 100644 --- a/modules/nf-core/software/bowtie/index/functions.nf +++ b/modules/local/software/bowtie2/index/functions.nf @@ -1,4 +1,3 @@ - /* * ----------------------------------------------------- * Utility functions used in nf-core DSL2 module files @@ -31,7 +30,7 @@ def initOptions(Map args) { */ def getPathFromList(path_list) { def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", '') } // Trim whitespace and trailing slashes + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } diff --git a/modules/local/software/bowtie2/index/main.nf b/modules/local/software/bowtie2/index/main.nf new file mode 100644 index 00000000..6e70dcdb --- /dev/null +++ b/modules/local/software/bowtie2/index/main.nf @@ -0,0 +1,34 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process BOWTIE2_INDEX { + tag "$fasta" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? "bioconda::bowtie2=2.4.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bowtie2:2.4.2--py38h1c8e9b9_1" + } else { + container "quay.io/biocontainers/bowtie2:2.4.2--py37h8270d21_0" + } + + input: + path fasta + + output: + path "*.bt2*" , emit: index + path "*.log" , emit: log + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + bowtie2-build ${options.args} --threads ${task.cpus} $fasta ${fasta.simpleName} > ${fasta.simpleName}.summary.log + echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/modules/local/software/bowtie2/index/meta.yml b/modules/local/software/bowtie2/index/meta.yml new file mode 100644 index 00000000..e69de29b diff --git a/modules/local/subworkflow/prepare_genome.nf b/modules/local/subworkflow/prepare_genome.nf new file mode 100644 index 00000000..8e787417 --- /dev/null +++ b/modules/local/subworkflow/prepare_genome.nf @@ -0,0 +1,56 @@ +/* + * Uncompress and prepare reference genome files +*/ + +params.genome_options = [:] +params.index_options = [:] +params.bt2_index_options = [:] + +include { GUNZIP as GUNZIP_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) +include { GET_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) +include { UNTAR as UNTAR_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_index_options ) +include { BOWTIE2_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_index_options ) + +workflow PREPARE_GENOME { + take: + prepare_tool_indices // list: tools to prepare indices for + + main: + /* + * Uncompress genome fasta file if required + */ + if (params.fasta.endsWith('.gz')) { + ch_fasta = GUNZIP_FASTA ( params.fasta ).gunzip + } else { + ch_fasta = file(params.fasta) + } + + /* + * Create chromosome sizes file + */ + ch_chrom_sizes = GET_CHROM_SIZES ( ch_fasta ).sizes + + /* + * Uncompress Bowtie2 index or generate from scratch if required + */ + ch_bt2_index = Channel.empty() + ch_bt2_version = Channel.empty() + if ('bowtie2' in prepare_tool_indices) { + if (params.bowtie2_index) { + if (params.bowtie2_index.endsWith('.tar.gz')) { + ch_bt2_index = UNTAR_STAR_INDEX ( params.bowtie2_index ).untar + } else { + ch_bt2_index = file(params.bowtie2_index) + } + } else { + ch_bt2_index = BOWTIE2_INDEX ( ch_fasta ).index + ch_bt2_version = BOWTIE2_INDEX.out.version + } + } + + emit: + fasta = ch_fasta // path: genome.fasta + chrom_sizes = ch_chrom_sizes // path: genome.sizes + bowtie2_index = ch_bt2_index // path: bt2/index/ + bowtie2_version = ch_bt2_version // path: *.version.txt +} diff --git a/modules/nf-core/software/bowtie/align/main.nf b/modules/nf-core/software/bowtie/align/main.nf deleted file mode 100644 index de9e8b3d..00000000 --- a/modules/nf-core/software/bowtie/align/main.nf +++ /dev/null @@ -1,59 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -def options = initOptions(params.options) - -process BOWTIE_ALIGN { - tag "$meta.id" - label 'process_high' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - - conda (params.enable_conda ? 'bioconda::bowtie=1.3.0 bioconda::samtools=1.10' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container 'https://depot.galaxyproject.org/singularity/mulled-v2-ffbf83a6b0ab6ec567a336cf349b80637135bca3:9e14e16c284d6860574cf5b624bbc44c793cb024-0' - } else { - container 'quay.io/biocontainers/mulled-v2-ffbf83a6b0ab6ec567a336cf349b80637135bca3:9e14e16c284d6860574cf5b624bbc44c793cb024-0' - } - - input: - tuple val(meta), path(reads) - path index - - output: - tuple val(meta), path('*.bam'), emit: bam - tuple val(meta), path('*.out'), emit: log - path '*.version.txt' , emit: version - tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - def unaligned = params.save_unaligned ? "--un ${prefix}.unmapped.fastq" : '' - def endedness = meta.single_end ? "$reads" : "-1 ${reads[0]} -2 ${reads[1]}" - """ - INDEX=`find -L ./ -name "*.3.ebwt" | sed 's/.3.ebwt//'` - bowtie \\ - --threads $task.cpus \\ - --sam \\ - -x \$INDEX \\ - -q \\ - $unaligned \\ - $options.args \\ - $endedness \\ - 2> ${prefix}.out \\ - | samtools view $options.args2 -@ $task.cpus -bS -o ${prefix}.bam - - - if [ -f ${prefix}.unmapped.fastq ]; then - gzip ${prefix}.unmapped.fastq - fi - if [ -f ${prefix}.unmapped_1.fastq ]; then - gzip ${prefix}.unmapped_1.fastq - gzip ${prefix}.unmapped_2.fastq - fi - - echo \$(bowtie --version 2>&1) | sed 's/^.*bowtie-align-s version //; s/ .*\$//' > ${software}.version.txt - """ -} diff --git a/modules/nf-core/software/bowtie/align/meta.yml b/modules/nf-core/software/bowtie/align/meta.yml deleted file mode 100644 index ebadcdca..00000000 --- a/modules/nf-core/software/bowtie/align/meta.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: bowtie_align -description: Align reads to a reference genome using bowtie -keywords: - - align - - fasta - - genome - - reference -tools: - - bowtie: - description: | - bowtie is a software package for mapping DNA sequences against - a large reference genome, such as the human genome. - homepage: http://bowtie-bio.sourceforge.net/index.shtml - documentation: http://bowtie-bio.sourceforge.net/manual.shtml - arxiv: arXiv:1303.3997 -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. - - save_unaligned: - type: boolean - description: Save unaligned reads -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. - - index: - type: file - description: Bowtie genome index files - pattern: "*.ebwt" -output: - - bam: - type: file - description: Output BAM file containing read alignments - pattern: "*.{bam}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" - - fastq: - type: file - description: Unaligned FastQ files - pattern: "*.fastq.gz" -authors: - - "@kevinmenden" diff --git a/modules/nf-core/software/bowtie/index/main.nf b/modules/nf-core/software/bowtie/index/main.nf deleted file mode 100644 index 8b982bcf..00000000 --- a/modules/nf-core/software/bowtie/index/main.nf +++ /dev/null @@ -1,35 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -def options = initOptions(params.options) - -process BOWTIE_INDEX { - tag "$fasta" - label 'process_high' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - - conda (params.enable_conda ? 'bioconda::bowtie=1.3.0' : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container 'https://depot.galaxyproject.org/singularity/bowtie:1.3.0--py38hed8969a_1' - } else { - container 'quay.io/biocontainers/bowtie:1.3.0--py38hed8969a_1' - } - - input: - path fasta - - output: - path 'bowtie', emit: index - path '*.version.txt', emit: version - - script: - def software = getSoftwareName(task.process) - """ - mkdir bowtie - bowtie-build --threads $task.cpus $fasta bowtie/${fasta.baseName} - echo \$(bowtie --version 2>&1) | sed 's/^.*bowtie-align-s version //; s/ .*\$//' > ${software}.version.txt - """ -} diff --git a/modules/nf-core/software/bowtie/index/meta.yml b/modules/nf-core/software/bowtie/index/meta.yml deleted file mode 100644 index e5296b05..00000000 --- a/modules/nf-core/software/bowtie/index/meta.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: bowtie_index -description: Create bowtie index for reference genome -keywords: - - index - - fasta - - genome - - reference -tools: - - bowtie: - description: | - bowtie is a software package for mapping DNA sequences against - a large reference genome, such as the human genome. - homepage: http://bowtie-bio.sourceforge.net/index.shtml - documentation: http://bowtie-bio.sourceforge.net/manual.shtml - arxiv: arXiv:1303.3997 -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. -input: - - fasta: - type: file - description: Input genome fasta file -output: - - index: - type: file - description: Bowtie genome index files - pattern: "*.ebwt" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@kevinmenden" diff --git a/nextflow.config b/nextflow.config index bf0c086c..408bec0c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,6 +14,7 @@ params { // References genome = '' + save_reference = true // QC skip_qc = false @@ -32,6 +33,10 @@ params { save_trimmed = false skip_trimming = false + // Alignment + bowtie2_index = '' + save_unaligned = false + // Boilerplate options enable_conda = false clusterOptions = '' @@ -107,6 +112,7 @@ profiles { local { includeConfig 'conf/local.config' } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } + test_hg38_chr7 { includeConfig 'conf/test_hg38_chr7.config' } } // Export these variables to prevent local Python/R libraries from conflicting with those in the container From fbafe01d37a6794a539939fdddb552d12584988a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 18 Jan 2021 21:54:50 +0000 Subject: [PATCH 008/675] Added more alignment framework --- conf/igenomes.config | 7 ++ conf/modules.config | 8 +++ cutandrun.nf | 22 +++++- modules/local/subworkflow/align_bowtie2.nf | 0 modules/local/subworkflow/prepare_genome.nf | 58 +++++++++++---- .../software/samtools/flagstat/functions.nf | 59 ++++++++++++++++ .../software/samtools/flagstat/main.nf | 32 +++++++++ .../software/samtools/flagstat/meta.yml | 69 ++++++++++++++++++ .../software/samtools/idxstats/functions.nf | 59 ++++++++++++++++ .../software/samtools/idxstats/main.nf | 32 +++++++++ .../software/samtools/idxstats/meta.yml | 70 +++++++++++++++++++ .../software/samtools/index/functions.nf | 59 ++++++++++++++++ .../nf-core/software/samtools/index/main.nf | 32 +++++++++ .../nf-core/software/samtools/index/meta.yml | 64 +++++++++++++++++ .../software/samtools/sort/functions.nf | 59 ++++++++++++++++ .../nf-core/software/samtools/sort/main.nf | 35 ++++++++++ .../nf-core/software/samtools/sort/meta.yml | 64 +++++++++++++++++ .../software/samtools/stats/functions.nf | 59 ++++++++++++++++ .../nf-core/software/samtools/stats/main.nf | 32 +++++++++ .../nf-core/software/samtools/stats/meta.yml | 68 ++++++++++++++++++ .../nf-core/subworkflow/bam_sort_samtools.nf | 27 +++++++ .../nf-core/subworkflow/bam_stats_samtools.nf | 25 +++++++ nextflow.config | 7 +- 23 files changed, 930 insertions(+), 17 deletions(-) create mode 100644 modules/local/subworkflow/align_bowtie2.nf create mode 100644 modules/nf-core/software/samtools/flagstat/functions.nf create mode 100644 modules/nf-core/software/samtools/flagstat/main.nf create mode 100644 modules/nf-core/software/samtools/flagstat/meta.yml create mode 100644 modules/nf-core/software/samtools/idxstats/functions.nf create mode 100644 modules/nf-core/software/samtools/idxstats/main.nf create mode 100644 modules/nf-core/software/samtools/idxstats/meta.yml create mode 100644 modules/nf-core/software/samtools/index/functions.nf create mode 100644 modules/nf-core/software/samtools/index/main.nf create mode 100644 modules/nf-core/software/samtools/index/meta.yml create mode 100644 modules/nf-core/software/samtools/sort/functions.nf create mode 100644 modules/nf-core/software/samtools/sort/main.nf create mode 100644 modules/nf-core/software/samtools/sort/meta.yml create mode 100644 modules/nf-core/software/samtools/stats/functions.nf create mode 100644 modules/nf-core/software/samtools/stats/main.nf create mode 100644 modules/nf-core/software/samtools/stats/meta.yml create mode 100644 modules/nf-core/subworkflow/bam_sort_samtools.nf create mode 100644 modules/nf-core/subworkflow/bam_stats_samtools.nf diff --git a/conf/igenomes.config b/conf/igenomes.config index 7485867b..5430266b 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -144,6 +144,13 @@ params { bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" } + 'K12-MG1655' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BWAIndex/" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BismarkIndex/" + } 'Galgal4' { fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/" diff --git a/conf/modules.config b/conf/modules.config index 5ff791e2..3ec08ca5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -31,6 +31,14 @@ params { 'bowtie2_index' { publish_dir = "genome/index" } + 'bowtie2_spikein_index' { + publish_dir = "genome/spikein_index" + } + 'samtools_sort' { + suffix = ".sorted" + publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index e4267f18..9a94e3c2 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -12,7 +12,9 @@ params.summary_params = [:] checkPathParamList = [ params.input, params.fasta, - params.bowtie2_index + params.bowtie2_index, + params.spikein_fasta, + params.spikein_bowtie2_index ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } @@ -20,6 +22,17 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } +// Resolve spike-in genome +def spikein_fasta = params.spikein_fasta +if(!params.spikein_bowtie2_index && !params.spikein_fasta) { + if(params.genomes[params.spikein_geome] != null) { + spikein_fasta = params.genomes[params.spikein_geome].fasta + } + else { + exit 1, 'Invalid spike-in genome specified!' + } +} + // Save AWS IGenomes file containing annotation version def anno_readme = params.genomes[ params.genome ]?.readme if (anno_readme && file(anno_readme).exists()) { @@ -54,6 +67,7 @@ if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } // Alignment def prepareToolIndices = ['bowtie2'] +def samtools_sort_options = modules['samtools_sort'] // Genome def publish_genome_options = params.save_reference ? [publish_dir: 'genome'] : [publish_files: false] @@ -61,6 +75,8 @@ def publish_index_options = params.save_reference ? [publish_dir: 'genome/index def bowtie2_index_options = modules['bowtie2_index'] if (!params.save_reference) { bowtie2_index_options['publish_files'] = false } +def bowtie2_spikein_index_options = modules['bowtie2_spikein_index'] +if (!params.save_reference) { bowtie2_index_options['publish_files'] = false } //////////////////////////////////////////////////// /* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ @@ -74,9 +90,9 @@ include { CAT_FASTQ } from './modules/local/process/cat_fastq' include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) /* - * SUBWORKFLOW: Consisting entirely of nf-core/modules + * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, index_options: publish_index_options, bt2_index_options: bowtie2_index_options) +include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, index_options: publish_index_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options, spikein_fasta: spikein_fasta ) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ diff --git a/modules/local/subworkflow/align_bowtie2.nf b/modules/local/subworkflow/align_bowtie2.nf new file mode 100644 index 00000000..e69de29b diff --git a/modules/local/subworkflow/prepare_genome.nf b/modules/local/subworkflow/prepare_genome.nf index 8e787417..3d4db7d6 100644 --- a/modules/local/subworkflow/prepare_genome.nf +++ b/modules/local/subworkflow/prepare_genome.nf @@ -2,14 +2,19 @@ * Uncompress and prepare reference genome files */ -params.genome_options = [:] -params.index_options = [:] -params.bt2_index_options = [:] +params.genome_options = [:] +params.index_options = [:] +params.bt2_index_options = [:] +params.bt2_spikein_index_options = [:] -include { GUNZIP as GUNZIP_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) -include { GET_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) -include { UNTAR as UNTAR_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_index_options ) -include { BOWTIE2_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_index_options ) +include { GUNZIP as GUNZIP_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) +include { GET_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) +include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) +include { UNTAR as UNTAR_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_index_options ) +include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_spikein_index_options ) +include { BOWTIE2_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_index_options ) +include { BOWTIE2_INDEX as BOWTIE2_SPIKEIN_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_spikein_index_options ) workflow PREPARE_GENOME { take: @@ -25,20 +30,35 @@ workflow PREPARE_GENOME { ch_fasta = file(params.fasta) } + /* + * Uncompress spike-in genome fasta file if required + */ + if (params.spikein_fasta.endsWith('.gz')) { + ch_spikein_fasta = GUNZIP_FASTA ( params.spikein_fasta ).gunzip + } else { + ch_spikein_fasta = file(params.spikein_fasta) + } + /* * Create chromosome sizes file */ ch_chrom_sizes = GET_CHROM_SIZES ( ch_fasta ).sizes /* - * Uncompress Bowtie2 index or generate from scratch if required + * Create chromosome sizes file for spike_in + */ + ch_spikein_chrom_sizes = GET_SPIKEIN_CHROM_SIZES ( ch_spikein_fasta ).sizes + + /* + * Uncompress Bowtie2 index or generate from scratch if required for both genomes */ ch_bt2_index = Channel.empty() + ch_bt2_spikein_index = Channel.empty() ch_bt2_version = Channel.empty() if ('bowtie2' in prepare_tool_indices) { if (params.bowtie2_index) { if (params.bowtie2_index.endsWith('.tar.gz')) { - ch_bt2_index = UNTAR_STAR_INDEX ( params.bowtie2_index ).untar + ch_bt2_index = UNTAR_BT2_INDEX ( params.bowtie2_index ).untar } else { ch_bt2_index = file(params.bowtie2_index) } @@ -46,11 +66,23 @@ workflow PREPARE_GENOME { ch_bt2_index = BOWTIE2_INDEX ( ch_fasta ).index ch_bt2_version = BOWTIE2_INDEX.out.version } + + if (params.spikein_bowtie2_index) { + if (params.spikein_bowtie2_index.endsWith('.tar.gz')) { + ch_bt2_index = UNTAR_SPIKEIN_BT2_INDEX ( params.spikein_bowtie2_index ).untar + } else { + ch_bt2_index = file(params.spikein_bowtie2_index) + } + } else { + ch_bt2_spikein_index = BOWTIE2_SPIKEIN_INDEX ( ch_spikein_fasta ).index + } } emit: - fasta = ch_fasta // path: genome.fasta - chrom_sizes = ch_chrom_sizes // path: genome.sizes - bowtie2_index = ch_bt2_index // path: bt2/index/ - bowtie2_version = ch_bt2_version // path: *.version.txt + fasta = ch_fasta // path: genome.fasta + chrom_sizes = ch_chrom_sizes // path: genome.sizes + spikein_chrom_sizes = ch_spikein_chrom_sizes // path: genome.sizes + bowtie2_index = ch_bt2_index // path: bt2/index/ + bowtie2_spikein_index = ch_bt2_spikein_index // path: bt2/index/ + bowtie2_version = ch_bt2_version // path: *.version.txt } diff --git a/modules/nf-core/software/samtools/flagstat/functions.nf b/modules/nf-core/software/samtools/flagstat/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/nf-core/software/samtools/flagstat/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/samtools/flagstat/main.nf b/modules/nf-core/software/samtools/flagstat/main.nf new file mode 100644 index 00000000..9b663ee7 --- /dev/null +++ b/modules/nf-core/software/samtools/flagstat/main.nf @@ -0,0 +1,32 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SAMTOOLS_FLAGSTAT { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path("*.flagstat"), emit: flagstat + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + samtools flagstat $bam > ${bam}.flagstat + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/samtools/flagstat/meta.yml b/modules/nf-core/software/samtools/flagstat/meta.yml new file mode 100644 index 00000000..a140c795 --- /dev/null +++ b/modules/nf-core/software/samtools/flagstat/meta.yml @@ -0,0 +1,69 @@ +name: samtools_flagstat +description: Counts the number of alignments in a BAM/CRAM/SAM file for each FLAG type +keywords: + - stats + - mapping + - counts + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index for BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - flagstat: + type: file + description: File containing samtools flagstat output + pattern: "*.{flagstat}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" diff --git a/modules/nf-core/software/samtools/idxstats/functions.nf b/modules/nf-core/software/samtools/idxstats/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/nf-core/software/samtools/idxstats/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/samtools/idxstats/main.nf b/modules/nf-core/software/samtools/idxstats/main.nf new file mode 100644 index 00000000..26ff4075 --- /dev/null +++ b/modules/nf-core/software/samtools/idxstats/main.nf @@ -0,0 +1,32 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SAMTOOLS_IDXSTATS { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path("*.idxstats"), emit: idxstats + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + samtools idxstats $bam > ${bam}.idxstats + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/samtools/idxstats/meta.yml b/modules/nf-core/software/samtools/idxstats/meta.yml new file mode 100644 index 00000000..6ff30433 --- /dev/null +++ b/modules/nf-core/software/samtools/idxstats/meta.yml @@ -0,0 +1,70 @@ +name: samtools_idxstats +description: Reports alignment summary statistics for a BAM/CRAM/SAM file +keywords: + - stats + - mapping + - counts + - chromosome + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index for BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - idxstats: + type: file + description: File containing samtools idxstats output + pattern: "*.{idxstats}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" diff --git a/modules/nf-core/software/samtools/index/functions.nf b/modules/nf-core/software/samtools/index/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/nf-core/software/samtools/index/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/samtools/index/main.nf b/modules/nf-core/software/samtools/index/main.nf new file mode 100644 index 00000000..5dd631da --- /dev/null +++ b/modules/nf-core/software/samtools/index/main.nf @@ -0,0 +1,32 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SAMTOOLS_INDEX { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bai"), emit: bai + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + samtools index $bam + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/samtools/index/meta.yml b/modules/nf-core/software/samtools/index/meta.yml new file mode 100644 index 00000000..089a83be --- /dev/null +++ b/modules/nf-core/software/samtools/index/meta.yml @@ -0,0 +1,64 @@ +name: samtools_index +description: Index SAM/BAM/CRAM file +keywords: + - index + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@ewels" diff --git a/modules/nf-core/software/samtools/sort/functions.nf b/modules/nf-core/software/samtools/sort/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/nf-core/software/samtools/sort/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/samtools/sort/main.nf b/modules/nf-core/software/samtools/sort/main.nf new file mode 100644 index 00000000..2b95b1d5 --- /dev/null +++ b/modules/nf-core/software/samtools/sort/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process SAMTOOLS_SORT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + samtools sort $options.args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/samtools/sort/meta.yml b/modules/nf-core/software/samtools/sort/meta.yml new file mode 100644 index 00000000..d87bf858 --- /dev/null +++ b/modules/nf-core/software/samtools/sort/meta.yml @@ -0,0 +1,64 @@ +name: samtools_sort +description: Sort SAM/BAM/CRAM file +keywords: + - sort + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Sorted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@ewels" diff --git a/modules/nf-core/software/samtools/stats/functions.nf b/modules/nf-core/software/samtools/stats/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/nf-core/software/samtools/stats/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/samtools/stats/main.nf b/modules/nf-core/software/samtools/stats/main.nf new file mode 100644 index 00000000..d8d1d020 --- /dev/null +++ b/modules/nf-core/software/samtools/stats/main.nf @@ -0,0 +1,32 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +process SAMTOOLS_STATS { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam), path(bai) + + output: + tuple val(meta), path("*.stats"), emit: stats + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + samtools stats $bam > ${bam}.stats + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/samtools/stats/meta.yml b/modules/nf-core/software/samtools/stats/meta.yml new file mode 100644 index 00000000..b907df92 --- /dev/null +++ b/modules/nf-core/software/samtools/stats/meta.yml @@ -0,0 +1,68 @@ +name: samtools_stats +description: Produces comprehensive statistics from SAM/BAM/CRAM file +keywords: + - statistics + - counts + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: Index for BAM/CRAM/SAM file + pattern: "*.{bai,crai,sai}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - stats: + type: file + description: File containing samtools stats output + pattern: "*.{stats}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" diff --git a/modules/nf-core/subworkflow/bam_sort_samtools.nf b/modules/nf-core/subworkflow/bam_sort_samtools.nf new file mode 100644 index 00000000..14d4ad78 --- /dev/null +++ b/modules/nf-core/subworkflow/bam_sort_samtools.nf @@ -0,0 +1,27 @@ +/* + * Sort, index BAM file and run samtools stats, flagstat and idxstats + */ + +params.options = [:] + +include { SAMTOOLS_SORT } from '../software/samtools/sort/main' addParams( options: params.options ) +include { SAMTOOLS_INDEX } from '../software/samtools/index/main' addParams( options: params.options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) + +workflow BAM_SORT_SAMTOOLS { + take: + ch_bam // channel: [ val(meta), [ bam ] ] + + main: + SAMTOOLS_SORT ( ch_bam ) + SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) + BAM_STATS_SAMTOOLS ( SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) + + emit: + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + version = SAMTOOLS_SORT.out.version // path: *.version.txt +} diff --git a/modules/nf-core/subworkflow/bam_stats_samtools.nf b/modules/nf-core/subworkflow/bam_stats_samtools.nf new file mode 100644 index 00000000..e36d6f9d --- /dev/null +++ b/modules/nf-core/subworkflow/bam_stats_samtools.nf @@ -0,0 +1,25 @@ +/* + * Run SAMtools stats, flagstat and idxstats + */ + +params.options = [:] + +include { SAMTOOLS_STATS } from '../software/samtools/stats/main' addParams( options: params.options ) +include { SAMTOOLS_IDXSTATS } from '../software/samtools/idxstats/main' addParams( options: params.options ) +include { SAMTOOLS_FLAGSTAT } from '../software/samtools/flagstat/main' addParams( options: params.options ) + +workflow BAM_STATS_SAMTOOLS { + take: + ch_bam_bai // channel: [ val(meta), [ bam ], [bai] ] + + main: + SAMTOOLS_STATS ( ch_bam_bai ) + SAMTOOLS_FLAGSTAT ( ch_bam_bai ) + SAMTOOLS_IDXSTATS ( ch_bam_bai ) + + emit: + stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + version = SAMTOOLS_STATS.out.version // path: *.version.txt +} diff --git a/nextflow.config b/nextflow.config index 408bec0c..36d352cd 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,7 +14,11 @@ params { // References genome = '' + spikein_geome = 'K12-MG1655' save_reference = true + bowtie2_index = '' + spikein_fasta = '' + spikein_bowtie2_index = '' // QC skip_qc = false @@ -34,8 +38,9 @@ params { skip_trimming = false // Alignment - bowtie2_index = '' + aligner = 'bowtie2' save_unaligned = false + // Boilerplate options enable_conda = false From c388726ea181f9acad8991bd219ce6d64f1cb90b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Jan 2021 09:26:16 +0000 Subject: [PATCH 009/675] preapre genome indexing complete --- cutandrun.nf | 58 ++++++++++----------- modules/local/subworkflow/prepare_genome.nf | 6 +-- nextflow.config | 2 +- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 9a94e3c2..7fdf60b7 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -70,13 +70,10 @@ def prepareToolIndices = ['bowtie2'] def samtools_sort_options = modules['samtools_sort'] // Genome -def publish_genome_options = params.save_reference ? [publish_dir: 'genome'] : [publish_files: false] -def publish_index_options = params.save_reference ? [publish_dir: 'genome/index'] : [publish_files: false] - -def bowtie2_index_options = modules['bowtie2_index'] -if (!params.save_reference) { bowtie2_index_options['publish_files'] = false } -def bowtie2_spikein_index_options = modules['bowtie2_spikein_index'] -if (!params.save_reference) { bowtie2_index_options['publish_files'] = false } +def publish_genome_options = params.save_reference ? [publish_dir: 'genome/target'] : [publish_files: false] +def spikein_genome_options = params.save_reference ? [publish_dir: 'genome/spikein'] : [publish_files: false] +def bowtie2_index_options = params.save_reference ? [publish_dir: 'genome/target/index'] : [publish_files: false] +def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: 'genome/spikein/index'] : [publish_files: false] //////////////////////////////////////////////////// /* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ @@ -92,7 +89,11 @@ include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_ver /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, index_options: publish_index_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options, spikein_fasta: spikein_fasta ) +include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, + spikein_genome_options: spikein_genome_options, + bt2_index_options: bowtie2_index_options, + bt2_spikein_index_options: bowtie2_spikein_index_options, + spikein_fasta: spikein_fasta ) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -128,35 +129,34 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ - INPUT_CHECK ( - ch_input - ) - .map { - meta, fastq -> - meta.id = meta.id.split('_')[0..-2].join('_') - [ meta, fastq ] } - .groupTuple(by: [0]) - .map { it -> [ it[0], it[1].flatten() ] } - .set { ch_cat_fastq } - ch_cat_fastq | view + // INPUT_CHECK ( + // ch_input + // ) + // .map { + // meta, fastq -> + // meta.id = meta.id.split('_')[0..-2].join('_') + // [ meta, fastq ] } + // .groupTuple(by: [0]) + // .map { it -> [ it[0], it[1].flatten() ] } + // .set { ch_cat_fastq } /* * MODULE: Concatenate FastQ files from same sample if required */ - CAT_FASTQ ( - ch_cat_fastq - ) + // CAT_FASTQ ( + // ch_cat_fastq + // ) /* * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC */ - FASTQC_TRIMGALORE ( - CAT_FASTQ.out.reads, - params.skip_fastqc || params.skip_qc, - params.skip_trimming - ) - ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + // FASTQC_TRIMGALORE ( + // CAT_FASTQ.out.reads, + // params.skip_fastqc || params.skip_qc, + // params.skip_trimming + // ) + // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) + // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) /* * MODULE: Pipeline reporting diff --git a/modules/local/subworkflow/prepare_genome.nf b/modules/local/subworkflow/prepare_genome.nf index 3d4db7d6..5016b95b 100644 --- a/modules/local/subworkflow/prepare_genome.nf +++ b/modules/local/subworkflow/prepare_genome.nf @@ -3,14 +3,14 @@ */ params.genome_options = [:] -params.index_options = [:] +params.spikein_genome_options = [:] params.bt2_index_options = [:] params.bt2_spikein_index_options = [:] include { GUNZIP as GUNZIP_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) -include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../process/gunzip' addParams( options: params.spikein_genome_options ) include { GET_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) -include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) +include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.spikein_genome_options ) include { UNTAR as UNTAR_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_index_options ) include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_spikein_index_options ) include { BOWTIE2_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_index_options ) diff --git a/nextflow.config b/nextflow.config index 36d352cd..d0fcd9c8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -15,7 +15,7 @@ params { // References genome = '' spikein_geome = 'K12-MG1655' - save_reference = true + save_reference = false bowtie2_index = '' spikein_fasta = '' spikein_bowtie2_index = '' From e30ceb6b373e5c406de0230f9cbea19ea2932e8a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Jan 2021 09:28:15 +0000 Subject: [PATCH 010/675] reenabled pipeline --- cutandrun.nf | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 7fdf60b7..7984216f 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -129,34 +129,34 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ - // INPUT_CHECK ( - // ch_input - // ) - // .map { - // meta, fastq -> - // meta.id = meta.id.split('_')[0..-2].join('_') - // [ meta, fastq ] } - // .groupTuple(by: [0]) - // .map { it -> [ it[0], it[1].flatten() ] } - // .set { ch_cat_fastq } + INPUT_CHECK ( + ch_input + ) + .map { + meta, fastq -> + meta.id = meta.id.split('_')[0..-2].join('_') + [ meta, fastq ] } + .groupTuple(by: [0]) + .map { it -> [ it[0], it[1].flatten() ] } + .set { ch_cat_fastq } /* * MODULE: Concatenate FastQ files from same sample if required */ - // CAT_FASTQ ( - // ch_cat_fastq - // ) + CAT_FASTQ ( + ch_cat_fastq + ) /* * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC */ - // FASTQC_TRIMGALORE ( - // CAT_FASTQ.out.reads, - // params.skip_fastqc || params.skip_qc, - // params.skip_trimming - // ) - // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) - // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + FASTQC_TRIMGALORE ( + CAT_FASTQ.out.reads, + params.skip_fastqc || params.skip_qc, + params.skip_trimming + ) + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) /* * MODULE: Pipeline reporting From 3ad8cda0ef240f68fa67dafdd14383b0e8857981 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Jan 2021 21:12:09 +0000 Subject: [PATCH 011/675] aligner complete --- conf/modules.config | 19 +++- cutandrun.nf | 88 ++++++++++++++++--- modules/local/software/bowtie2/align/main.nf | 33 +++---- modules/local/subworkflow/align_bowtie2.nf | 59 +++++++++++++ .../nf-core/subworkflow/bam_sort_samtools.nf | 2 +- .../nf-core/subworkflow/bam_stats_samtools.nf | 2 +- .../nf-core/subworkflow/fastqc_trimgalore.nf | 4 +- nextflow.config | 2 +- 8 files changed, 175 insertions(+), 34 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 3ec08ca5..df2c4f83 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -34,10 +34,27 @@ params { 'bowtie2_spikein_index' { publish_dir = "genome/spikein_index" } + 'bowtie2_align' { + args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" + suffix = ".exp" + publish_dir = "${params.aligner}/target" + publish_files = ['txt':'', 'bam':''] + } + 'bowtie2_spikein_align' { + args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" + suffix = ".spikein" + publish_dir = "${params.aligner}/spikein" + publish_files = ['txt':'', 'bam':''] + } 'samtools_sort' { suffix = ".sorted" publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}" + publish_dir = "${params.aligner}/target" + } + 'samtools_spikein_sort' { + suffix = ".spikein.sorted" + publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}/spikein" } } } diff --git a/cutandrun.nf b/cutandrun.nf index 7984216f..b6d2453a 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -56,6 +56,12 @@ if (anno_readme && file(anno_readme).exists()) { // Don't overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() +// Genome +def publish_genome_options = params.save_reference ? [publish_dir: 'genome/target'] : [publish_files: false] +def spikein_genome_options = params.save_reference ? [publish_dir: 'genome/spikein'] : [publish_files: false] +def bowtie2_index_options = params.save_reference ? [publish_dir: 'genome/target/index'] : [publish_files: false] +def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: 'genome/spikein/index'] : [publish_files: false] + // QC def cat_fastq_options = modules['cat_fastq'] if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } @@ -63,17 +69,29 @@ if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } // Trimming def trimgalore_options = modules['trimgalore'] trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' -if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } +if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } // Alignment def prepareToolIndices = ['bowtie2'] -def samtools_sort_options = modules['samtools_sort'] -// Genome -def publish_genome_options = params.save_reference ? [publish_dir: 'genome/target'] : [publish_files: false] -def spikein_genome_options = params.save_reference ? [publish_dir: 'genome/spikein'] : [publish_files: false] -def bowtie2_index_options = params.save_reference ? [publish_dir: 'genome/target/index'] : [publish_files: false] -def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: 'genome/spikein/index'] : [publish_files: false] +def bowtie2_align_options = modules['bowtie2_align'] +def bowtie2_spikein_align_options = modules['bowtie2_spikein_align'] +if (params.save_unaligned) { bowtie2_align_options.publish_files.put('.gz','') } +if (!params.save_spikein_aligned) { bowtie2_spikein_align_options['publish_files'] = false } + +def samtools_sort_options = modules['samtools_sort'] +def samtools_spikein_sort_options = modules['samtools_spikein_sort'] +// if (['star_salmon','hisat2'].contains(params.aligner)) { +// if (params.save_align_intermeds || (!params.with_umi && params.skip_markduplicates)) { +// samtools_sort_options.publish_files.put('bam','') +// samtools_sort_options.publish_files.put('bai','') +// } +// } else { +// if (params.save_align_intermeds || params.skip_markduplicates) { +// samtools_sort_options.publish_files.put('bam','') +// samtools_sort_options.publish_files.put('bai','') +// } +// } //////////////////////////////////////////////////// /* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ @@ -89,11 +107,15 @@ include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_ver /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, - spikein_genome_options: spikein_genome_options, - bt2_index_options: bowtie2_index_options, - bt2_spikein_index_options: bowtie2_spikein_index_options, - spikein_fasta: spikein_fasta ) +include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, + spikein_genome_options: spikein_genome_options, + bt2_index_options: bowtie2_index_options, + bt2_spikein_index_options: bowtie2_spikein_index_options, + spikein_fasta: spikein_fasta ) +include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' addParams( align_options: bowtie2_align_options, + spikein_align_options: bowtie2_spikein_align_options, + samtools_options: samtools_sort_options, + samtools_spikein_options: samtools_spikein_sort_options ) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -155,9 +177,51 @@ workflow CUTANDRUN { params.skip_fastqc || params.skip_qc, params.skip_trimming ) + ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + /* + * SUBWORKFLOW: Alignment to target and spikein genome using botwtie2 + */ + ch_orig_bam = Channel.empty() + ch_orig_spikein_bam = Channel.empty() + ch_bowtie2_log = Channel.empty() + ch_bowtie2_spikein_log = Channel.empty() + ch_samtools_bam = Channel.empty() + ch_samtools_bai = Channel.empty() + ch_samtools_stats = Channel.empty() + ch_samtools_flagstat = Channel.empty() + ch_samtools_idxstats = Channel.empty() + ch_samtools_spikein_bam = Channel.empty() + ch_samtools_spikein_bai = Channel.empty() + ch_samtools_spikein_stats = Channel.empty() + ch_samtools_spikein_flagstat = Channel.empty() + ch_samtools_spikein_idxstats = Channel.empty() + if (params.aligner == 'bowtie2') { + ALIGN_BOWTIE2 ( + ch_trimmed_reads, + PREPARE_GENOME.out.bowtie2_index, + PREPARE_GENOME.out.bowtie2_spikein_index + ) + ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.samtools_version.first().ifEmpty(null)) + // ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam + // ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam + // ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log + // ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log + // ch_samtools_bam = ALIGN_BOWTIE2.out.bam + // ch_samtools_bai = ALIGN_BOWTIE2.out.bai + // ch_samtools_stats = ALIGN_BOWTIE2.out.stats + // ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat + // ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats + // ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam + // ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai + // ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats + // ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat + // ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats + } + /* * MODULE: Pipeline reporting */ diff --git a/modules/local/software/bowtie2/align/main.nf b/modules/local/software/bowtie2/align/main.nf index 121b8452..521d0c08 100644 --- a/modules/local/software/bowtie2/align/main.nf +++ b/modules/local/software/bowtie2/align/main.nf @@ -1,6 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] +params.save_unaligned = false def options = initOptions(params.options) process BOWTIE2_ALIGN { @@ -23,35 +24,35 @@ process BOWTIE2_ALIGN { path index output: - tuple val(meta), path("*.bam"), emit: bam - //path "*.version.txt" , emit: version - //tuple val(meta), path("${prefix}${opts.unmapped_suffix}.1.fastq.gz"), path("${prefix}${opts.unmapped_suffix}.2.fastq.gz"), optional: true, emit: unmapped_fq_pe - //tuple val(meta), path("${prefix}${opts.unmapped_suffix}.fastq.gz"), optional: true, emit: unmapped_fq_s - //tuple val(meta), path("${summary_name}.txt"), emit: report_meta + tuple val(meta), path("*.bam"), emit: bam + tuple val(meta), path("*.unmapped.1.gz"), path("*.unmapped.2.gz"), optional: true, emit: unmapped_sam + tuple val(meta), path("*summary.txt"), emit: log + path "*.version.txt", emit: version script: def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args = "--threads $task.cpus --no-unal" def inputs = '' - def unpaired = '' + def unmapped = '' read_list = reads.collect{it.toString()} if(read_list.size > 1){ inputs = '-1 ' + reads[0] + ' -2 ' + reads[1] - unpaired = '--un-gz' + if(params.save_unaligned) { unmapped = " --un-conc-gz ${prefix}.unmapped.gz" } } else { inputs = '-U ' + reads[0] - unpaired = '--un-conc-gz' + if(params.save_unaligned) { unmapped = " --un-gz ${prefix}.unmapped.gz" } } + args += unmapped + if(options.args != '') { args += ' ' + options.args } + """ - bowtie2 \\ - $options.args \\ - -p $task.cpus \\ - --no-unal \\ - $unpaired \\ - -x ${index[0].simpleName} \\ - $inputs \\ + bowtie2 -x ${index[0].simpleName} $args $inputs 2>${prefix}_summary.txt \\ | samtools view $options.args2 -@ $task.cpus -bS -o ${prefix}.bam - - """ \ No newline at end of file + + echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/modules/local/subworkflow/align_bowtie2.nf b/modules/local/subworkflow/align_bowtie2.nf index e69de29b..af28de85 100644 --- a/modules/local/subworkflow/align_bowtie2.nf +++ b/modules/local/subworkflow/align_bowtie2.nf @@ -0,0 +1,59 @@ +/* + * Alignment with BOWTIE2 + */ + +params.align_options = [:] +params.spikein_align_options = [:] +params.samtools_options = [:] +params.samtools_spikein_options = [:] + +include { BOWTIE2_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) +include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) +include { BAM_SORT_SAMTOOLS } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_options ) +include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) + +workflow ALIGN_BOWTIE2 { + take: + reads // channel: [ val(meta), [ reads ] ] + index // channel: /path/to/bowtie2/target/index/ + spikein_index // channel: /path/to/bowtie2/spikein/index/ + + main: + /* + * Map reads with BOWTIE2 to target genome + */ + BOWTIE2_ALIGN ( reads, index ) + + /* + * Map reads with BOWTIE2 to spike-in genome + */ + BOWTIE2_SPIKEIN_ALIGN ( reads, spikein_index ) + + /* + * Sort, index BAM file and run samtools stats, flagstat and idxstats + */ + BAM_SORT_SAMTOOLS ( BOWTIE2_ALIGN.out.bam ) + BAM_SORT_SAMTOOLS_SPIKEIN ( BOWTIE2_SPIKEIN_ALIGN.out.bam ) + + emit: + bowtie2_version = BOWTIE2_ALIGN.out.version // path: *.version.txt + samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt + + orig_bam = BOWTIE2_ALIGN.out.bam // channel: [ val(meta), bam ] + orig_spikein_bam = BOWTIE2_SPIKEIN_ALIGN.out.bam // channel: [ val(meta), bam ] + + bowtie2_log = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log_final ] + bowtie2_spikein_log = BAM_SORT_SAMTOOLS_SPIKEIN.out.log // channel: [ val(meta), log_final ] + + bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] + bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] + stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + + spikein_bam = BAM_SORT_SAMTOOLS_SPIKEIN.out.bam // channel: [ val(meta), [ bam ] ] + spikein_bai = BAM_SORT_SAMTOOLS_SPIKEIN.out.bai // channel: [ val(meta), [ bai ] ] + spikein_stats = BAM_SORT_SAMTOOLS_SPIKEIN.out.stats // channel: [ val(meta), [ stats ] ] + spikein_flagstat = BAM_SORT_SAMTOOLS_SPIKEIN.out.flagstat // channel: [ val(meta), [ flagstat ] ] + spikein_idxstats = BAM_SORT_SAMTOOLS_SPIKEIN.out.idxstats // channel: [ val(meta), [ idxstats ] ] +} diff --git a/modules/nf-core/subworkflow/bam_sort_samtools.nf b/modules/nf-core/subworkflow/bam_sort_samtools.nf index 14d4ad78..44a8b7e1 100644 --- a/modules/nf-core/subworkflow/bam_sort_samtools.nf +++ b/modules/nf-core/subworkflow/bam_sort_samtools.nf @@ -23,5 +23,5 @@ workflow BAM_SORT_SAMTOOLS { stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - version = SAMTOOLS_SORT.out.version // path: *.version.txt + version = SAMTOOLS_SORT.out.version // path: *.version.txt } diff --git a/modules/nf-core/subworkflow/bam_stats_samtools.nf b/modules/nf-core/subworkflow/bam_stats_samtools.nf index e36d6f9d..fa7607cb 100644 --- a/modules/nf-core/subworkflow/bam_stats_samtools.nf +++ b/modules/nf-core/subworkflow/bam_stats_samtools.nf @@ -21,5 +21,5 @@ workflow BAM_STATS_SAMTOOLS { stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), [ stats ] ] flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), [ flagstat ] ] idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - version = SAMTOOLS_STATS.out.version // path: *.version.txt + version = SAMTOOLS_STATS.out.version // path: *.version.txt } diff --git a/modules/nf-core/subworkflow/fastqc_trimgalore.nf b/modules/nf-core/subworkflow/fastqc_trimgalore.nf index e24e27d3..1804f73c 100644 --- a/modules/nf-core/subworkflow/fastqc_trimgalore.nf +++ b/modules/nf-core/subworkflow/fastqc_trimgalore.nf @@ -41,10 +41,10 @@ workflow FASTQC_TRIMGALORE { fastqc_html // channel: [ val(meta), [ html ] ] fastqc_zip // channel: [ val(meta), [ zip ] ] - fastqc_version // path: *.version.txt + fastqc_version // path: *.version.txt trim_html // channel: [ val(meta), [ html ] ] trim_zip // channel: [ val(meta), [ zip ] ] trim_log // channel: [ val(meta), [ txt ] ] - trimgalore_version // path: *.version.txt + trimgalore_version // path: *.version.txt } diff --git a/nextflow.config b/nextflow.config index d0fcd9c8..5b91172e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -40,7 +40,7 @@ params { // Alignment aligner = 'bowtie2' save_unaligned = false - + save_spikein_aligned = false // Boilerplate options enable_conda = false From b6ba24d37624ba93f1e80d57a4ab9531e63846c5 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Jan 2021 11:18:04 +0000 Subject: [PATCH 012/675] Added metadata annotation for bt2 --- assets/awk/bt2_report_to_csv.awk | 35 ++++++++++++++++++++++ conf/modules.config | 13 ++++---- cutandrun.nf | 24 +++++++++++---- modules/local/process/awk.nf | 34 +++++++++++++++++++++ modules/local/subworkflow/annotate_meta.nf | 34 +++++++++++++++++++++ 5 files changed, 127 insertions(+), 13 deletions(-) create mode 100644 assets/awk/bt2_report_to_csv.awk create mode 100644 modules/local/process/awk.nf create mode 100644 modules/local/subworkflow/annotate_meta.nf diff --git a/assets/awk/bt2_report_to_csv.awk b/assets/awk/bt2_report_to_csv.awk new file mode 100644 index 00000000..196b70d2 --- /dev/null +++ b/assets/awk/bt2_report_to_csv.awk @@ -0,0 +1,35 @@ +#!/bin/awk -f + +# This awk script parses a bowtie2 alignment summary to a csv file for easier downstream processing + +BEGIN { + cols="bt2_total_reads:bt2_align1:bt2_align_gt1:bt2_non_aligned:bt2_total_aligned" + FS="\n" + RS="\n\n" + col_count=split(cols, col_arr, ":"); + for(i=1; i<=col_count; i++) printf col_arr[i] ((i==col_count) ? "\n" : ","); +} +{ + for (i=1; i<=NF; i++) { + if(index($i,"reads; of these:") != 0) { + split($i, line_split, " "); + data["bt2_total_reads"]=line_split[1]; + } + if(index($i,"aligned concordantly exactly 1 time") != 0) { + split($i, line_split, " "); + data["bt2_align1"]=line_split[1]; + } + if(index($i,"aligned concordantly >1 times") != 0) { + split($i, line_split, " "); + data["bt2_align_gt1"]=line_split[1]; + } + if(index($i,"aligned concordantly 0 times") != 0) { + split($i, line_split, " "); + data["bt2_non_aligned"]=line_split[1]; + } + } +} +END { + data["bt2_total_aligned"] = data["bt2_align1"] + data["bt2_align_gt1"] + for (i=1; i<=col_count; i++) printf data[col_arr[i]] ((i==col_count) ? "\n" : ","); +} diff --git a/conf/modules.config b/conf/modules.config index df2c4f83..55972908 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -56,13 +56,10 @@ params { publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "${params.aligner}/spikein" } + 'awk_bt2' { + args = "" + suffix = "" + publish_dir = "awk/bt2" + } } } - - - -// --end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700 -p ${cores} -x ${ref} -1 -// --end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700 - -// --end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700 -p ${cores} -x ${spikeInRef} -1 -// --end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700 \ No newline at end of file diff --git a/cutandrun.nf b/cutandrun.nf index b6d2453a..b95e5c3a 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -47,7 +47,11 @@ if (anno_readme && file(anno_readme).exists()) { /* -- CONFIG FILES -- */ //////////////////////////////////////////////////// +//////////////////////////////////////////////////// +/* -- ASSETS -- */ +//////////////////////////////////////////////////// +ch_bt2_to_csv_awk = file("$projectDir/assets/awk/bt2_report_to_csv.awk", checkIfExists: true) //////////////////////////////////////////////////// /* -- INIALISE PARAMETERS AND OPTIONS -- */ @@ -93,6 +97,12 @@ def samtools_spikein_sort_options = modules['samtools_spikein_sort'] // } // } +// Meta annotation +def awk_bt2_options = modules['awk_bt2'] +awk_bt2_options['suffix'] = '.bt2.target' +//def awk_bt2_spikein_options = modules['awk_bt2'] +//awk_bt2_spikein_options['suffix'] = '.bt2.spikein' + //////////////////////////////////////////////////// /* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ //////////////////////////////////////////////////// @@ -107,15 +117,16 @@ include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_ver /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, +include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options, spikein_fasta: spikein_fasta ) -include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' addParams( align_options: bowtie2_align_options, +include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) +include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_options) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -204,13 +215,13 @@ workflow CUTANDRUN { PREPARE_GENOME.out.bowtie2_index, PREPARE_GENOME.out.bowtie2_spikein_index ) - ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) + //ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.samtools_version.first().ifEmpty(null)) // ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam // ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam - // ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log + ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log // ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log - // ch_samtools_bam = ALIGN_BOWTIE2.out.bam + ch_samtools_bam = ALIGN_BOWTIE2.out.bam // ch_samtools_bai = ALIGN_BOWTIE2.out.bai // ch_samtools_stats = ALIGN_BOWTIE2.out.stats // ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat @@ -222,6 +233,9 @@ workflow CUTANDRUN { // ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats } + ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) + ANNOTATE_BT2_META.out.output | view + /* * MODULE: Pipeline reporting */ diff --git a/modules/local/process/awk.nf b/modules/local/process/awk.nf new file mode 100644 index 00000000..96794513 --- /dev/null +++ b/modules/local/process/awk.nf @@ -0,0 +1,34 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process AWK { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? null : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), path(input) + path script + + output: + tuple val(meta), path("*.awk.txt"), emit: file + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + awk $options.args -f $script $input > ${prefix}.awk.txt + echo \$(awk --version 2>&1) | sed 's/^.*version //;' > ${software}.version.txt + """ +} diff --git a/modules/local/subworkflow/annotate_meta.nf b/modules/local/subworkflow/annotate_meta.nf new file mode 100644 index 00000000..400be523 --- /dev/null +++ b/modules/local/subworkflow/annotate_meta.nf @@ -0,0 +1,34 @@ +/* + * Annotate the pipeline meta data with the columns from a csv file + generated from processing a report text file with an awk script + */ + +params.options = [:] + +include { AWK } from '../process/awk' addParams( options: params.options ) + +workflow ANNOTATE_META { + take: input + take: report + take: script + main: + + main: + // Strip sample id and paths only from input + ch_paths = input.map { row -> [row[0].id, row[1..-1]].flatten() } + + // Create csv file from the report channel using the awk script + AWK ( report, script ) + + // Annotate the input meta data with the csv values generated from + // the awk script + AWK.out.file + .splitCsv(header:true) + .map { row -> [ row[0].id, row[0] << row[1] ] } + .join ( ch_paths ) + .map { row -> row[1..-1] } + .set { ch_annotated_meta } + + emit: + output = ch_annotated_meta // channel: [ val(meta), [ input ] ] +} From 601c49da91c5cef093fe5dce380d0b9d4ec21d9c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Jan 2021 15:36:15 +0000 Subject: [PATCH 013/675] dedup via piccard added --- conf/modules.config | 76 ++++++++-- cutandrun.nf | 139 ++++++++++++++---- .../picard/markduplicates/functions.nf | 59 ++++++++ .../software/picard/markduplicates/main.nf | 49 ++++++ .../software/picard/markduplicates/meta.yml | 67 +++++++++ .../subworkflow/mark_duplicates_picard.nf | 38 +++++ nextflow.config | 4 + 7 files changed, 389 insertions(+), 43 deletions(-) create mode 100644 modules/nf-core/software/picard/markduplicates/functions.nf create mode 100644 modules/nf-core/software/picard/markduplicates/main.nf create mode 100644 modules/nf-core/software/picard/markduplicates/meta.yml create mode 100644 modules/nf-core/subworkflow/mark_duplicates_picard.nf diff --git a/conf/modules.config b/conf/modules.config index 55972908..d648aabe 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,6 +18,13 @@ params { modules { + 'bowtie2_index' { + publish_dir = "genome/index" + } + 'bowtie2_spikein_index' { + publish_dir = "genome/spikein_index" + } + 'cat_fastq' { publish_dir = 'fastq' } @@ -28,26 +35,21 @@ params { args = "--fastqc" publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] } - 'bowtie2_index' { - publish_dir = "genome/index" - } - 'bowtie2_spikein_index' { - publish_dir = "genome/spikein_index" - } + 'bowtie2_align' { args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" - suffix = ".exp" + suffix = ".target" publish_dir = "${params.aligner}/target" - publish_files = ['txt':'', 'bam':''] + publish_files = ['txt':''] } 'bowtie2_spikein_align' { args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" suffix = ".spikein" publish_dir = "${params.aligner}/spikein" - publish_files = ['txt':'', 'bam':''] + publish_files = ['txt':''] } 'samtools_sort' { - suffix = ".sorted" + suffix = ".target.sorted" publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "${params.aligner}/target" } @@ -56,9 +58,61 @@ params { publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "${params.aligner}/spikein" } + + 'picard_markduplicates' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".target.markdup" + publish_files = ['metrics.txt':'picard_metrics'] + publish_dir = "${params.aligner}/target" + } + 'picard_markduplicates_samtools' { + suffix = ".target.markdup.sorted" + publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}/target" + } + 'picard_markduplicates_spikein' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".spikein.markdup" + publish_files = ['metrics.txt':'picard_metrics'] + publish_dir = "${params.aligner}/spikein" + } + 'picard_markduplicates_samtools_spikein' { + suffix = ".spikein.markdup.sorted" + publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}/spikein" + } + + 'picard_dedup' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".dedup.sorted" + publish_files = ['bam': '', 'metrics.txt':'picard_metrics'] + publish_dir = "${params.aligner}/target" + } + 'picard_dedup_samtools' { + suffix = ".dedup.sorted" + publish_files = ['bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}/target" + } + 'picard_dedup_spikein' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".spikein.dedup.sorted" + publish_files = ['bam': '', 'metrics.txt':'picard_metrics'] + publish_dir = "${params.aligner}/spikein" + } + 'picard_dedup_samtools_spikein' { + suffix = ".spikein.dedup.sorted" + publish_files = ['bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}/spikein" + } + 'awk_bt2' { args = "" - suffix = "" + suffix = ".target" + publish_dir = "awk/bt2" + } + 'awk_bt2_spikein' { + args = "" + suffix = ".spikein" publish_dir = "awk/bt2" } } diff --git a/cutandrun.nf b/cutandrun.nf index b95e5c3a..604a4a63 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -81,27 +81,35 @@ def prepareToolIndices = ['bowtie2'] def bowtie2_align_options = modules['bowtie2_align'] def bowtie2_spikein_align_options = modules['bowtie2_spikein_align'] if (params.save_unaligned) { bowtie2_align_options.publish_files.put('.gz','') } -if (!params.save_spikein_aligned) { bowtie2_spikein_align_options['publish_files'] = false } +if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put('.gz','') } +if (params.publish_align_intermed) { bowtie2_align_options.publish_files.put('.bam','') } +if (params.publish_align_intermed) { bowtie2_spikein_align_options.publish_files.put('.bam','') } def samtools_sort_options = modules['samtools_sort'] def samtools_spikein_sort_options = modules['samtools_spikein_sort'] -// if (['star_salmon','hisat2'].contains(params.aligner)) { -// if (params.save_align_intermeds || (!params.with_umi && params.skip_markduplicates)) { -// samtools_sort_options.publish_files.put('bam','') -// samtools_sort_options.publish_files.put('bai','') -// } -// } else { -// if (params.save_align_intermeds || params.skip_markduplicates) { -// samtools_sort_options.publish_files.put('bam','') -// samtools_sort_options.publish_files.put('bai','') -// } -// } +if (params.publish_align_intermed || params.skip_markduplicates) { + samtools_sort_options.publish_files.put('bam','') + samtools_sort_options.publish_files.put('bai','') + samtools_spikein_sort_options.publish_files.put('bam','') + samtools_spikein_sort_options.publish_files.put('bai','') +} + +def picard_markduplicates_options = modules['picard_markduplicates'] +def picard_markduplicates_spikein_options = modules['picard_markduplicates_spikein'] +def picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] +def picard_markduplicates_samtools_spikein_options = modules['picard_markduplicates_samtools_spikein'] +if (params.publish_align_intermed) { + picard_markduplicates_spikein_options.publish_files.put('bam','') + picard_markduplicates_samtools_spikein_options.publish_files.put('bai','') +} +if (!params.dedup_target_reads || (params.dedup_target_reads && params.publish_align_intermed)) { + picard_markduplicates_options.publish_files.put('bam','') + picard_markduplicates_samtools_options.publish_files.put('bai','') +} // Meta annotation def awk_bt2_options = modules['awk_bt2'] -awk_bt2_options['suffix'] = '.bt2.target' -//def awk_bt2_spikein_options = modules['awk_bt2'] -//awk_bt2_spikein_options['suffix'] = '.bt2.spikein' +def awk_bt2_spikein_options = modules['awk_bt2_spikein'] //////////////////////////////////////////////////// /* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ @@ -126,7 +134,8 @@ include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' add spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_options) +include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_options) +include { ANNOTATE_META as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_spikein_options) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -140,7 +149,11 @@ include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) +include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) +include { MARK_DUPLICATES_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options ) +include { MARK_DUPLICATES_PICARD as MARK_DUPLICATES_PICARD_SPIKEIN } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_spikein_options, samtools_options: picard_markduplicates_samtools_spikein_options ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'] ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD_SPIKEIN } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup_spikein'], samtools_options: modules['picard_dedup_samtools_spikein'] ) //////////////////////////////////////////////////// /* -- RUN MAIN WORKFLOW -- */ @@ -217,24 +230,86 @@ workflow CUTANDRUN { ) //ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.samtools_version.first().ifEmpty(null)) - // ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam - // ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam - ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log - // ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log - ch_samtools_bam = ALIGN_BOWTIE2.out.bam - // ch_samtools_bai = ALIGN_BOWTIE2.out.bai - // ch_samtools_stats = ALIGN_BOWTIE2.out.stats - // ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat - // ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats - // ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam - // ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai - // ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats - // ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat - // ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats + ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam + ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam + ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log + ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log + + ch_samtools_bam = ALIGN_BOWTIE2.out.bam + ch_samtools_bai = ALIGN_BOWTIE2.out.bai + ch_samtools_stats = ALIGN_BOWTIE2.out.stats + ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat + ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats + + ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam + ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai + ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats + ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat + ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats + } + + /* + * SUBWORKFLOW: Mark duplicates on all samples + */ + ch_markduplicates_multiqc = Channel.empty() + ch_markduplicates_spikein_multiqc = Channel.empty() + if (!params.skip_markduplicates) { + MARK_DUPLICATES_PICARD ( + ch_samtools_bam + ) + ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam + ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai + ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats + ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat + ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats + ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics + ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) + + MARK_DUPLICATES_PICARD_SPIKEIN ( + ch_samtools_spikein_bam + ) + ch_samtools_spikein_bam = MARK_DUPLICATES_PICARD.out.bam + ch_samtools_spikein_bai = MARK_DUPLICATES_PICARD.out.bai + ch_samtools_spikein_stats = MARK_DUPLICATES_PICARD.out.stats + ch_samtools_spikein_flagstat = MARK_DUPLICATES_PICARD.out.flagstat + ch_samtools_spikein_idxstats = MARK_DUPLICATES_PICARD.out.idxstats + ch_markduplicates_spikein_multiqc = MARK_DUPLICATES_PICARD.out.metrics } + /* + * SUBWORKFLOW: Remove duplicates + */ + ch_dedup_multiqc = Channel.empty() + ch_dedup_spikein_multiqc = Channel.empty() + if (!params.skip_markduplicates && !params.skip_removeduplicates) { + if(params.dedup_target_reads) { + DEDUP_PICARD ( + ch_samtools_bam + ) + ch_samtools_bam = DEDUP_PICARD.out.bam + ch_samtools_bai = DEDUP_PICARD.out.bai + ch_samtools_stats = DEDUP_PICARD.out.stats + ch_samtools_flagstat = DEDUP_PICARD.out.flagstat + ch_samtools_idxstats = DEDUP_PICARD.out.idxstats + ch_dedup_multiqc = DEDUP_PICARD.out.metrics + } + + DEDUP_PICARD_SPIKEIN ( + ch_samtools_spikein_bam + ) + ch_samtools_spikein_bam = DEDUP_PICARD_SPIKEIN.out.bam + ch_samtools_spikein_bai = DEDUP_PICARD_SPIKEIN.out.bai + ch_samtools_spikein_stats = DEDUP_PICARD_SPIKEIN.out.stats + ch_samtools_spikein_flagstat = DEDUP_PICARD_SPIKEIN.out.flagstat + ch_samtools_spikein_idxstats = DEDUP_PICARD_SPIKEIN.out.idxstats + ch_dedup_spikein_multiqc = DEDUP_PICARD_SPIKEIN.out.metrics + } + + /* + * SUBWORKFLOW: Annotate meta data with aligner stats + */ ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) - ANNOTATE_BT2_META.out.output | view + ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) /* * MODULE: Pipeline reporting diff --git a/modules/nf-core/software/picard/markduplicates/functions.nf b/modules/nf-core/software/picard/markduplicates/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/nf-core/software/picard/markduplicates/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/picard/markduplicates/main.nf b/modules/nf-core/software/picard/markduplicates/main.nf new file mode 100644 index 00000000..958f4502 --- /dev/null +++ b/modules/nf-core/software/picard/markduplicates/main.nf @@ -0,0 +1,49 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process PICARD_MARKDUPLICATES { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::picard=2.23.9" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/picard:2.23.9--0" + } else { + container "quay.io/biocontainers/picard:2.23.9--0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam") , emit: bam + tuple val(meta), path("*.metrics.txt"), emit: metrics + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def avail_mem = 3 + if (!task.memory) { + log.info '[Picard MarkDuplicates] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + picard \\ + -Xmx${avail_mem}g \\ + MarkDuplicates \\ + $options.args \\ + INPUT=$bam \\ + OUTPUT=${prefix}.bam \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt + + echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d: > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/picard/markduplicates/meta.yml b/modules/nf-core/software/picard/markduplicates/meta.yml new file mode 100644 index 00000000..d9d8619a --- /dev/null +++ b/modules/nf-core/software/picard/markduplicates/meta.yml @@ -0,0 +1,67 @@ +name: picard_markduplicates +description: Locate and tag duplicate reads in a BAM file +keywords: + - markduplicates + - pcr + - duplicates + - bam + - sam + - cram +tools: + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ +params: + - outdir: + type: string + description: | + The pipeline's output directory. By default, the module will + output files into `$params.outdir/` + - publish_dir_mode: + type: string + description: | + Value for the Nextflow `publishDir` mode parameter. + Available: symlink, rellink, link, copy, copyNoFollow, move. + - enable_conda: + type: boolean + description: | + Run the module with Conda using the software specified + via the `conda` directive + - singularity_pull_docker_container: + type: boolean + description: | + Instead of directly downloading Singularity images for use with Singularity, + force the workflow to pull and convert Docker containers instead. +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" + - metrics: + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" diff --git a/modules/nf-core/subworkflow/mark_duplicates_picard.nf b/modules/nf-core/subworkflow/mark_duplicates_picard.nf new file mode 100644 index 00000000..b5e19765 --- /dev/null +++ b/modules/nf-core/subworkflow/mark_duplicates_picard.nf @@ -0,0 +1,38 @@ +/* + * Picard MarkDuplicates, sort, index BAM file and run samtools stats, flagstat and idxstats + */ + +params.markduplicates_options = [:] +params.samtools_options = [:] + +include { PICARD_MARKDUPLICATES } from '../software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) +include { SAMTOOLS_INDEX } from '../software/samtools/index/main' addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_options ) + +workflow MARK_DUPLICATES_PICARD { + take: + bam // channel: [ val(meta), [ bam ] ] + + main: + /* + * Picard MarkDuplicates + */ + PICARD_MARKDUPLICATES ( bam ) + + /* + * Index BAM file and run samtools stats, flagstat and idxstats + */ + SAMTOOLS_INDEX ( PICARD_MARKDUPLICATES.out.bam ) + BAM_STATS_SAMTOOLS ( PICARD_MARKDUPLICATES.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) + + emit: + bam = PICARD_MARKDUPLICATES.out.bam // channel: [ val(meta), [ bam ] ] + metrics = PICARD_MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] + picard_version = PICARD_MARKDUPLICATES.out.version // path: *.version.txt + + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt +} diff --git a/nextflow.config b/nextflow.config index 5b91172e..675f7018 100644 --- a/nextflow.config +++ b/nextflow.config @@ -41,6 +41,10 @@ params { aligner = 'bowtie2' save_unaligned = false save_spikein_aligned = false + publish_align_intermed = false + skip_markduplicates = false + skip_removeduplicates = false + dedup_target_reads = false // Boilerplate options enable_conda = false From 7d572316e5537a3d48d67530d2055a9eadfab6a4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Jan 2021 08:51:01 +0000 Subject: [PATCH 014/675] Added qscore filtering --- conf/modules.config | 23 +++++++ cutandrun.nf | 64 ++++++++++++++++++- .../local/software/samtools/view/functions.nf | 59 +++++++++++++++++ modules/local/software/samtools/view/main.nf | 34 ++++++++++ .../subworkflow/samtools_view_sort_stats.nf | 35 ++++++++++ nextflow.config | 3 +- 6 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 modules/local/software/samtools/view/functions.nf create mode 100644 modules/local/software/samtools/view/main.nf create mode 100644 modules/local/subworkflow/samtools_view_sort_stats.nf diff --git a/conf/modules.config b/conf/modules.config index d648aabe..1aa35eec 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -59,6 +59,29 @@ params { publish_dir = "${params.aligner}/spikein" } + 'samtools_view' { + args = '-q 0' + suffix = ".target.filtered" + publish_files = false + publish_dir = "${params.aligner}/target" + } + 'samtools_spikein_view' { + args = '-q 0' + suffix = ".spikein.filtered" + publish_files = false + publish_dir = "${params.aligner}/spikein" + } + 'samtools_qfilter' { + suffix = ".target.filtered" + publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}/target" + } + 'samtools_spikein_qfilter' { + suffix = ".spikein.filtered" + publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "${params.aligner}/spikein" + } + 'picard_markduplicates' { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".target.markdup" diff --git a/cutandrun.nf b/cutandrun.nf index 604a4a63..040313fb 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -75,7 +75,7 @@ def trimgalore_options = modules['trimgalore'] trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } -// Alignment +// Alignment dedup and filtering def prepareToolIndices = ['bowtie2'] def bowtie2_align_options = modules['bowtie2_align'] @@ -94,6 +94,22 @@ if (params.publish_align_intermed || params.skip_markduplicates) { samtools_spikein_sort_options.publish_files.put('bai','') } + +def samtools_view_options = modules['samtools_view'] +def samtools_spikein_view_options = modules['samtools_spikein_view'] +def samtools_qfilter_options = modules['samtools_qfilter'] +def samtools_spikein_qfilter_options = modules['samtools_spikein_qfilter'] +if (params.minimum_alignment_q_score > 0) { + samtools_view_options.args = "-q " + params.minimum_alignment_q_score + samtools_spikein_view_options.args = "-q " + params.minimum_alignment_q_score +} +if (params.publish_align_intermed) { + samtools_view_options.publish_files = ['bam':''] + samtools_qfilter_options.publish_files.put('bai','') + samtools_spikein_view_options.publish_files = ['bam':''] + samtools_spikein_qfilter_options.publish_files.put('bai','') +} + def picard_markduplicates_options = modules['picard_markduplicates'] def picard_markduplicates_spikein_options = modules['picard_markduplicates_spikein'] def picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] @@ -134,6 +150,8 @@ include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' add spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) +include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) +include { SAMTOOLS_VIEW_SORT_STATS as SAMTOOLS_SPIKEIN_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_spikein_qfilter_options, samtools_view_options: samtools_spikein_view_options) include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_options) include { ANNOTATE_META as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_spikein_options) @@ -248,6 +266,30 @@ workflow CUTANDRUN { ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats } + /* + * SUBWORKFLOW: Filter reads based on quality metrics + * http://biofinysics.blogspot.com/2014/05/how-does-bowtie2-assign-mapq-scores.html + */ + if (params.minimum_alignment_q_score > 0) { + SAMTOOLS_VIEW_SORT_STATS ( + ch_samtools_bam + ) + ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam + ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai + ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats + ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat + ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats + + SAMTOOLS_SPIKEIN_VIEW_SORT_STATS ( + ch_samtools_spikein_bam + ) + ch_samtools_spikein_bam = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.bam + ch_samtools_spikein_bai = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.bai + ch_samtools_spikein_stats = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.stats + ch_samtools_spikein_flagstat = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.flagstat + ch_samtools_spikein_idxstats = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.idxstats + } + /* * SUBWORKFLOW: Mark duplicates on all samples */ @@ -311,6 +353,26 @@ workflow CUTANDRUN { ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) + /* + * CHANNEL: Calculate scale factor + */ + + + + // // ***** CALCULATE SCALE FACTOR FOR SPIKE-IN NORMALISATION ***** // + // if (params.spike_in_genome){ + // final_meta_spike + // .combine ( ch_normalisation_c ) + // .map { row -> [ row[0].sample_id, row[-1] / (row[0].find{ it.key == "bt2_spike_total_aligned" }?.value.toInteger()) ] } + // .set { ch_scale_factor } + // } else { // this else doesn't make sense because there would be no spike_in_meta_out from alignment if now spike-in genome is provided + // //spike_in_meta_annotate.out.annotated_input + // final_meta_spike + // .map { row -> [ row[0].sample_id, 1] } + // .set { ch_scale_factor } + // } + // //ch_scale_factor | view + /* * MODULE: Pipeline reporting */ diff --git a/modules/local/software/samtools/view/functions.nf b/modules/local/software/samtools/view/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/local/software/samtools/view/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/software/samtools/view/main.nf b/modules/local/software/samtools/view/main.nf new file mode 100644 index 00000000..22f718eb --- /dev/null +++ b/modules/local/software/samtools/view/main.nf @@ -0,0 +1,34 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process SAMTOOLS_VIEW { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + samtools view $options.args -@ $task.cpus -b -o ${prefix}.bam $bam + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/local/subworkflow/samtools_view_sort_stats.nf b/modules/local/subworkflow/samtools_view_sort_stats.nf new file mode 100644 index 00000000..3214f3cc --- /dev/null +++ b/modules/local/subworkflow/samtools_view_sort_stats.nf @@ -0,0 +1,35 @@ +/* + * Run bam files through samtools view and reindex and calc stats + */ + +params.samtools_view_options = [:] +params.samtools_options = [:] + +include { SAMTOOLS_VIEW } from '../software/samtools/view/main' addParams( options: params.samtools_view_options ) +include { SAMTOOLS_INDEX } from '../../nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from '../../nf-core/subworkflow/bam_stats_samtools' addParams( options: params.samtools_options ) + +workflow SAMTOOLS_VIEW_SORT_STATS { + take: + bam // channel: [ val(meta), [ bam ] ] + + main: + /* + * Filter using samtools view + */ + SAMTOOLS_VIEW ( bam ) + + /* + * Index BAM file and run samtools stats, flagstat and idxstats + */ + SAMTOOLS_INDEX ( SAMTOOLS_VIEW.out.bam ) + BAM_STATS_SAMTOOLS ( SAMTOOLS_VIEW.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) + + emit: + bam = SAMTOOLS_VIEW.out.bam // channel: [ val(meta), [ bam ] ] + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt +} diff --git a/nextflow.config b/nextflow.config index 675f7018..b27d225c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -41,10 +41,11 @@ params { aligner = 'bowtie2' save_unaligned = false save_spikein_aligned = false - publish_align_intermed = false + publish_align_intermed = true skip_markduplicates = false skip_removeduplicates = false dedup_target_reads = false + minimum_alignment_q_score = 42 // Boilerplate options enable_conda = false From 96f714644769573b0febea37c22b6e4f5e283132 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Jan 2021 09:21:32 +0000 Subject: [PATCH 015/675] options update --- nextflow.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index b27d225c..3f8ba486 100644 --- a/nextflow.config +++ b/nextflow.config @@ -41,11 +41,11 @@ params { aligner = 'bowtie2' save_unaligned = false save_spikein_aligned = false - publish_align_intermed = true + publish_align_intermed = false skip_markduplicates = false skip_removeduplicates = false dedup_target_reads = false - minimum_alignment_q_score = 42 + minimum_alignment_q_score = 0 // Boilerplate options enable_conda = false From 348ff669340ea638ecf1a4e34dc7be6af7bf4cee Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Jan 2021 15:27:56 +0000 Subject: [PATCH 016/675] Added scaled bedgraph creation --- bin/check_samplesheet.py | 8 +- conf/modules.config | 51 ++----- cutandrun.nf | 128 +++++++----------- .../local/process/bedtools_genomecov_scale.nf | 38 ++++++ modules/local/process/samplesheet_check.nf | 4 +- modules/local/subworkflow/annotate_meta.nf | 6 + .../subworkflow/mark_duplicates_picard.nf | 37 ++++- nextflow.config | 5 + 8 files changed, 150 insertions(+), 127 deletions(-) create mode 100644 modules/local/process/bedtools_genomecov_scale.nf diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 0b317500..5b7088e4 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -108,11 +108,11 @@ def check_samplesheet(file_in, file_out): ) ## Auto-detect paired-end/single-end - sample_info = [] ## [single_end, fastq_1, fastq_2] + sample_info = [] if sample and fastq_1 and fastq_2: ## Paired-end short reads - sample_info = ["0", fastq_1, fastq_2] + sample_info = [sample, str(replicate), "0", fastq_1, fastq_2] elif sample and fastq_1 and not fastq_2: ## Single-end short reads - sample_info = ["1", fastq_1, fastq_2] + sample_info = [sample, str(replicate), "1", fastq_1, fastq_2] else: print_error("Invalid combination of columns provided!", "Line", line) ## Create sample mapping dictionary = {sample: {replicate : [ single_end, fastq_1, fastq_2 ]}} @@ -132,7 +132,7 @@ def check_samplesheet(file_in, file_out): make_dir(out_dir) with open(file_out, "w") as fout: - fout.write(",".join(["sample", "single_end", "fastq_1", "fastq_2"]) + "\n") + fout.write(",".join(["id", "group", "replicate", "single_end", "fastq_1", "fastq_2"]) + "\n") for sample in sorted(sample_run_dict.keys()): ## Check that replicate ids are in format 1.. diff --git a/conf/modules.config b/conf/modules.config index 1aa35eec..68c661ba 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -61,53 +61,31 @@ params { 'samtools_view' { args = '-q 0' - suffix = ".target.filtered" + suffix = ".filtered" publish_files = false publish_dir = "${params.aligner}/target" } - 'samtools_spikein_view' { - args = '-q 0' - suffix = ".spikein.filtered" - publish_files = false - publish_dir = "${params.aligner}/spikein" - } 'samtools_qfilter' { - suffix = ".target.filtered" + suffix = ".filtered" publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "${params.aligner}/target" } - 'samtools_spikein_qfilter' { - suffix = ".spikein.filtered" - publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/spikein" - } 'picard_markduplicates' { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".target.markdup" + suffix = ".markdup" publish_files = ['metrics.txt':'picard_metrics'] publish_dir = "${params.aligner}/target" } 'picard_markduplicates_samtools' { - suffix = ".target.markdup.sorted" + suffix = ".markdup.sorted" publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "${params.aligner}/target" } - 'picard_markduplicates_spikein' { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".spikein.markdup" - publish_files = ['metrics.txt':'picard_metrics'] - publish_dir = "${params.aligner}/spikein" - } - 'picard_markduplicates_samtools_spikein' { - suffix = ".spikein.markdup.sorted" - publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/spikein" - } 'picard_dedup' { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".dedup.sorted" + suffix = ".dedup" publish_files = ['bam': '', 'metrics.txt':'picard_metrics'] publish_dir = "${params.aligner}/target" } @@ -116,27 +94,22 @@ params { publish_files = ['bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "${params.aligner}/target" } - 'picard_dedup_spikein' { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".spikein.dedup.sorted" - publish_files = ['bam': '', 'metrics.txt':'picard_metrics'] - publish_dir = "${params.aligner}/spikein" - } - 'picard_dedup_samtools_spikein' { - suffix = ".spikein.dedup.sorted" - publish_files = ['bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/spikein" - } 'awk_bt2' { args = "" suffix = ".target" - publish_dir = "awk/bt2" + publish_dir = "awk/bt2" } 'awk_bt2_spikein' { args = "" suffix = ".spikein" publish_dir = "awk/bt2" } + + 'bedtools_genomecov_bedgraph' { + args = "" + suffix = "" + publish_dir = "genomecov" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 040313fb..6f9f964e 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -96,32 +96,23 @@ if (params.publish_align_intermed || params.skip_markduplicates) { def samtools_view_options = modules['samtools_view'] -def samtools_spikein_view_options = modules['samtools_spikein_view'] def samtools_qfilter_options = modules['samtools_qfilter'] -def samtools_spikein_qfilter_options = modules['samtools_spikein_qfilter'] if (params.minimum_alignment_q_score > 0) { samtools_view_options.args = "-q " + params.minimum_alignment_q_score - samtools_spikein_view_options.args = "-q " + params.minimum_alignment_q_score } if (params.publish_align_intermed) { samtools_view_options.publish_files = ['bam':''] samtools_qfilter_options.publish_files.put('bai','') - samtools_spikein_view_options.publish_files = ['bam':''] - samtools_spikein_qfilter_options.publish_files.put('bai','') } def picard_markduplicates_options = modules['picard_markduplicates'] -def picard_markduplicates_spikein_options = modules['picard_markduplicates_spikein'] def picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] -def picard_markduplicates_samtools_spikein_options = modules['picard_markduplicates_samtools_spikein'] if (params.publish_align_intermed) { - picard_markduplicates_spikein_options.publish_files.put('bam','') - picard_markduplicates_samtools_spikein_options.publish_files.put('bai','') -} -if (!params.dedup_target_reads || (params.dedup_target_reads && params.publish_align_intermed)) { picard_markduplicates_options.publish_files.put('bam','') picard_markduplicates_samtools_options.publish_files.put('bai','') } +dedup_control_only = true +if(params.dedup_target_reads) { dedup_control_only = false } // Meta annotation def awk_bt2_options = modules['awk_bt2'] @@ -136,8 +127,10 @@ def awk_bt2_spikein_options = modules['awk_bt2_spikein'] */ include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from './modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) + /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ @@ -150,10 +143,9 @@ include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' add spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) -include { SAMTOOLS_VIEW_SORT_STATS as SAMTOOLS_SPIKEIN_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_spikein_qfilter_options, samtools_view_options: samtools_spikein_view_options) -include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_options) -include { ANNOTATE_META as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_spikein_options) +include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) +include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_options, meta_suffix: '_target') +include { ANNOTATE_META as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein') //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -168,10 +160,8 @@ include { ANNOTATE_META as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/sub * SUBWORKFLOW: Consisting entirely of nf-core/modules */ include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) -include { MARK_DUPLICATES_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options ) -include { MARK_DUPLICATES_PICARD as MARK_DUPLICATES_PICARD_SPIKEIN } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_spikein_options, samtools_options: picard_markduplicates_samtools_spikein_options ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'] ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD_SPIKEIN } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup_spikein'], samtools_options: modules['picard_dedup_samtools_spikein'] ) +include { MARK_DUPLICATES_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) //////////////////////////////////////////////////// /* -- RUN MAIN WORKFLOW -- */ @@ -246,7 +236,6 @@ workflow CUTANDRUN { PREPARE_GENOME.out.bowtie2_index, PREPARE_GENOME.out.bowtie2_spikein_index ) - //ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.samtools_version.first().ifEmpty(null)) ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam @@ -279,22 +268,12 @@ workflow CUTANDRUN { ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats - - SAMTOOLS_SPIKEIN_VIEW_SORT_STATS ( - ch_samtools_spikein_bam - ) - ch_samtools_spikein_bam = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.bam - ch_samtools_spikein_bai = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.bai - ch_samtools_spikein_stats = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.stats - ch_samtools_spikein_flagstat = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.flagstat - ch_samtools_spikein_idxstats = SAMTOOLS_SPIKEIN_VIEW_SORT_STATS.out.idxstats } /* * SUBWORKFLOW: Mark duplicates on all samples */ ch_markduplicates_multiqc = Channel.empty() - ch_markduplicates_spikein_multiqc = Channel.empty() if (!params.skip_markduplicates) { MARK_DUPLICATES_PICARD ( ch_samtools_bam @@ -306,72 +285,69 @@ workflow CUTANDRUN { ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) - - MARK_DUPLICATES_PICARD_SPIKEIN ( - ch_samtools_spikein_bam - ) - ch_samtools_spikein_bam = MARK_DUPLICATES_PICARD.out.bam - ch_samtools_spikein_bai = MARK_DUPLICATES_PICARD.out.bai - ch_samtools_spikein_stats = MARK_DUPLICATES_PICARD.out.stats - ch_samtools_spikein_flagstat = MARK_DUPLICATES_PICARD.out.flagstat - ch_samtools_spikein_idxstats = MARK_DUPLICATES_PICARD.out.idxstats - ch_markduplicates_spikein_multiqc = MARK_DUPLICATES_PICARD.out.metrics } /* * SUBWORKFLOW: Remove duplicates */ ch_dedup_multiqc = Channel.empty() - ch_dedup_spikein_multiqc = Channel.empty() if (!params.skip_markduplicates && !params.skip_removeduplicates) { - if(params.dedup_target_reads) { - DEDUP_PICARD ( - ch_samtools_bam - ) - ch_samtools_bam = DEDUP_PICARD.out.bam - ch_samtools_bai = DEDUP_PICARD.out.bai - ch_samtools_stats = DEDUP_PICARD.out.stats - ch_samtools_flagstat = DEDUP_PICARD.out.flagstat - ch_samtools_idxstats = DEDUP_PICARD.out.idxstats - ch_dedup_multiqc = DEDUP_PICARD.out.metrics - } - - DEDUP_PICARD_SPIKEIN ( - ch_samtools_spikein_bam + DEDUP_PICARD ( + ch_samtools_bam ) - ch_samtools_spikein_bam = DEDUP_PICARD_SPIKEIN.out.bam - ch_samtools_spikein_bai = DEDUP_PICARD_SPIKEIN.out.bai - ch_samtools_spikein_stats = DEDUP_PICARD_SPIKEIN.out.stats - ch_samtools_spikein_flagstat = DEDUP_PICARD_SPIKEIN.out.flagstat - ch_samtools_spikein_idxstats = DEDUP_PICARD_SPIKEIN.out.idxstats - ch_dedup_spikein_multiqc = DEDUP_PICARD_SPIKEIN.out.metrics + ch_samtools_bam = DEDUP_PICARD.out.bam + ch_samtools_bai = DEDUP_PICARD.out.bai + ch_samtools_stats = DEDUP_PICARD.out.stats + ch_samtools_flagstat = DEDUP_PICARD.out.flagstat + ch_samtools_idxstats = DEDUP_PICARD.out.idxstats + ch_dedup_multiqc = DEDUP_PICARD.out.metrics } /* - * SUBWORKFLOW: Annotate meta data with aligner stats + * SUBWORKFLOW: Annotate meta data with aligner stats and */ ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) /* - * CHANNEL: Calculate scale factor + * CHANNEL: Combine merge spikein meta data with main data stream */ + ANNOTATE_BT2_SPIKEIN_META.out.output + .map { row -> [row[0].id, row[0] ].flatten()} + .set { ch_spikein_bt2_meta } + ANNOTATE_BT2_META.out.output + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_spikein_bt2_meta ) + .map { row -> [ row[1] << row[3], row[2] ] } + .set { ch_combined_meta } + /* + * CHANNEL: Calculate scale factor for each sample and join to main data flow + */ + ANNOTATE_BT2_SPIKEIN_META.out.output + .map { row -> [ row[0].id, params.normalisation_c / (row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger()) ] } + .set { ch_scale_factor } + + ch_combined_meta + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_scale_factor ) + .map { row -> row[1..(row.size() - 1)] } + .map { row -> + row[0].put('scale_factor', row[2]) + [ row[0], row[1], row[2] ] } + .set { ch_samtools_bam_scale } - // // ***** CALCULATE SCALE FACTOR FOR SPIKE-IN NORMALISATION ***** // - // if (params.spike_in_genome){ - // final_meta_spike - // .combine ( ch_normalisation_c ) - // .map { row -> [ row[0].sample_id, row[-1] / (row[0].find{ it.key == "bt2_spike_total_aligned" }?.value.toInteger()) ] } - // .set { ch_scale_factor } - // } else { // this else doesn't make sense because there would be no spike_in_meta_out from alignment if now spike-in genome is provided - // //spike_in_meta_annotate.out.annotated_input - // final_meta_spike - // .map { row -> [ row[0].sample_id, 1] } - // .set { ch_scale_factor } - // } - // //ch_scale_factor | view + /* + * MODULE: Convert to bedgraph + */ + if(!params.skip_coverage) { + BEDTOOLS_GENOMECOV_SCALE ( + ch_samtools_bam_scale + ) + ch_bedtools_bedgraph = BEDTOOLS_GENOMECOV_SCALE.out.bedgraph + ch_software_versions = ch_software_versions.mix(BEDTOOLS_GENOMECOV_SCALE.out.version.first().ifEmpty(null)) + } /* * MODULE: Pipeline reporting diff --git a/modules/local/process/bedtools_genomecov_scale.nf b/modules/local/process/bedtools_genomecov_scale.nf new file mode 100644 index 00000000..4a285ff1 --- /dev/null +++ b/modules/local/process/bedtools_genomecov_scale.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process BEDTOOLS_GENOMECOV_SCALE { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::bedtools=2.29.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.29.2--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.29.2--hc088bd4_0" + } + + input: + tuple val(meta), path(bam), val(scale) + + output: + tuple val(meta), path("*.bedGraph"), emit: bedgraph + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + """ + bedtools genomecov -ibam $bam $options.args -bg -scale $scale \\ + | bedtools sort > ${prefix}.bedGraph + + bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt + """ +} \ No newline at end of file diff --git a/modules/local/process/samplesheet_check.nf b/modules/local/process/samplesheet_check.nf index 65a80732..3fa26422 100644 --- a/modules/local/process/samplesheet_check.nf +++ b/modules/local/process/samplesheet_check.nf @@ -31,7 +31,9 @@ process SAMPLESHEET_CHECK { // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] def get_samplesheet_paths(LinkedHashMap row) { def meta = [:] - meta.id = row.sample + meta.id = row.id + meta.group = row.group + meta.replicate = row.replicate.toInteger() meta.single_end = row.single_end.toBoolean() def array = [] diff --git a/modules/local/subworkflow/annotate_meta.nf b/modules/local/subworkflow/annotate_meta.nf index 400be523..ea39d91f 100644 --- a/modules/local/subworkflow/annotate_meta.nf +++ b/modules/local/subworkflow/annotate_meta.nf @@ -4,6 +4,7 @@ */ params.options = [:] +params.meta_suffix = '_test' include { AWK } from '../process/awk' addParams( options: params.options ) @@ -24,6 +25,11 @@ workflow ANNOTATE_META { // the awk script AWK.out.file .splitCsv(header:true) + .map { row -> + new_meta = [:] + row[1].each{ k, v -> new_meta.put(k + params.meta_suffix, v) } + [row[0], new_meta] + } .map { row -> [ row[0].id, row[0] << row[1] ] } .join ( ch_paths ) .map { row -> row[1..-1] } diff --git a/modules/nf-core/subworkflow/mark_duplicates_picard.nf b/modules/nf-core/subworkflow/mark_duplicates_picard.nf index b5e19765..10c77aee 100644 --- a/modules/nf-core/subworkflow/mark_duplicates_picard.nf +++ b/modules/nf-core/subworkflow/mark_duplicates_picard.nf @@ -4,6 +4,7 @@ params.markduplicates_options = [:] params.samtools_options = [:] +params.control_only = false include { PICARD_MARKDUPLICATES } from '../software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) include { SAMTOOLS_INDEX } from '../software/samtools/index/main' addParams( options: params.samtools_options ) @@ -17,22 +18,44 @@ workflow MARK_DUPLICATES_PICARD { /* * Picard MarkDuplicates */ - PICARD_MARKDUPLICATES ( bam ) + out_bam = Channel.empty() + metrics = Channel.empty() + version = Channel.empty() + if( !params.control_only ) { + PICARD_MARKDUPLICATES ( bam ) + out_bam = PICARD_MARKDUPLICATES.out.bam + metrics = PICARD_MARKDUPLICATES.out.metrics + version = PICARD_MARKDUPLICATES.out.version + } + else { // Split out non igg files and run only on these + bam.branch { it -> + target: it[0].group != 'igg' + control: it[0].group == 'igg' + } + .set { ch_split } + PICARD_MARKDUPLICATES ( ch_split.control ) + out_bam = PICARD_MARKDUPLICATES.out.bam + metrics = PICARD_MARKDUPLICATES.out.metrics + version = PICARD_MARKDUPLICATES.out.version + + out_bam = out_bam.mix( ch_split.target ) + } + /* * Index BAM file and run samtools stats, flagstat and idxstats */ - SAMTOOLS_INDEX ( PICARD_MARKDUPLICATES.out.bam ) - BAM_STATS_SAMTOOLS ( PICARD_MARKDUPLICATES.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) + SAMTOOLS_INDEX ( out_bam ) + BAM_STATS_SAMTOOLS ( out_bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) emit: - bam = PICARD_MARKDUPLICATES.out.bam // channel: [ val(meta), [ bam ] ] - metrics = PICARD_MARKDUPLICATES.out.metrics // channel: [ val(meta), [ metrics ] ] - picard_version = PICARD_MARKDUPLICATES.out.version // path: *.version.txt + bam = out_bam // channel: [ val(meta), [ bam ] ] + metrics // channel: [ val(meta), [ metrics ] ] + picard_version = version // path: *.version.txt bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt + samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt } diff --git a/nextflow.config b/nextflow.config index 3f8ba486..0c3466de 100644 --- a/nextflow.config +++ b/nextflow.config @@ -47,6 +47,11 @@ params { dedup_target_reads = false minimum_alignment_q_score = 0 + // Coverage + normalisation_c = 10000 + skip_coverage = false + + // Boilerplate options enable_conda = false clusterOptions = '' From 417c7372ebaf6aba02d6ec39f84f21bc6b09d500 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 22 Jan 2021 09:39:42 +0000 Subject: [PATCH 017/675] SEACR peak calling implimented --- conf/modules.config | 5 ++ cutandrun.nf | 35 +++++++++-- .../software/seacr/callpeak/functions.nf | 59 +++++++++++++++++++ modules/local/software/seacr/callpeak/main.nf | 41 +++++++++++++ nextflow.config | 3 + 5 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 modules/local/software/seacr/callpeak/functions.nf create mode 100644 modules/local/software/seacr/callpeak/main.nf diff --git a/conf/modules.config b/conf/modules.config index 68c661ba..106083c6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -111,5 +111,10 @@ params { suffix = "" publish_dir = "genomecov" } + 'seacr' { + args = "non stringent" + suffix = ".bed" + publish_dir = "seacr" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 6f9f964e..9c18a1db 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -128,9 +128,9 @@ def awk_bt2_spikein_options = modules['awk_bt2_spikein'] include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from './modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) +include { SEACR_CALLPEAK } from './modules/local/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) - /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ @@ -338,15 +338,40 @@ workflow CUTANDRUN { [ row[0], row[1], row[2] ] } .set { ch_samtools_bam_scale } - /* - * MODULE: Convert to bedgraph - */ + if(!params.skip_coverage) { + /* + * MODULE: Convert to bedgraph + */ BEDTOOLS_GENOMECOV_SCALE ( ch_samtools_bam_scale ) ch_bedtools_bedgraph = BEDTOOLS_GENOMECOV_SCALE.out.bedgraph ch_software_versions = ch_software_versions.mix(BEDTOOLS_GENOMECOV_SCALE.out.version.first().ifEmpty(null)) + + /* + * CHANNEL: Separate bedgraphs into target/control pairings for each replicate + */ + ch_bedtools_bedgraph.branch { it -> + target: it[0].group != 'igg' + control: it[0].group == 'igg' + } + .set { ch_bedgraph_split } + + ch_bedgraph_split.target + .combine(ch_bedgraph_split.control) + .filter { row -> row[0].replicate == row[2].replicate } + .map { row -> [ row[0], row[1], row[3] ] } + .set { ch_bedgraph_combined } + + /* + * MODULE: Call peaks + */ + SEACR_CALLPEAK ( + ch_bedgraph_combined + ) + ch_seacr_bed = SEACR_CALLPEAK.out.bed + ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) } /* @@ -357,6 +382,8 @@ workflow CUTANDRUN { ) } + + //////////////////////////////////////////////////// /* -- COMPLETION EMAIL -- */ //////////////////////////////////////////////////// diff --git a/modules/local/software/seacr/callpeak/functions.nf b/modules/local/software/seacr/callpeak/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/local/software/seacr/callpeak/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/software/seacr/callpeak/main.nf b/modules/local/software/seacr/callpeak/main.nf new file mode 100644 index 00000000..0e83c3fb --- /dev/null +++ b/modules/local/software/seacr/callpeak/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +def VERSION = '1.3' + +process SEACR_CALLPEAK { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.29.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0" + } else { + container 'quay.io/biocontainers/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0' + } + + input: + tuple val(meta), path(bedgraph), path(ctrlbedgraph) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + SEACR_1.3.sh \\ + $bedgraph \\ + $ctrlbedgraph \\ + $options.args \\ + $prefix + echo $VERSION > ${software}.version.txt + """ +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 0c3466de..c75fad10 100644 --- a/nextflow.config +++ b/nextflow.config @@ -51,6 +51,9 @@ params { normalisation_c = 10000 skip_coverage = false + // Reporting and Visualisation + skip_igv = false + // Boilerplate options enable_conda = false From 65635be4939acfe4d8ba24f7105510a2cf9932eb Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 22 Jan 2021 09:54:24 +0000 Subject: [PATCH 018/675] added bigwig conversion --- conf/modules.config | 7 +++ cutandrun.nf | 24 ++++++-- modules/local/process/ucsc_bedclip.nf | 38 ++++++++++++ .../ucsc/bedgraphtobigwig/functions.nf | 59 +++++++++++++++++++ .../software/ucsc/bedgraphtobigwig/main.nf | 38 ++++++++++++ 5 files changed, 162 insertions(+), 4 deletions(-) create mode 100644 modules/local/process/ucsc_bedclip.nf create mode 100644 modules/nf-core/software/ucsc/bedgraphtobigwig/functions.nf create mode 100644 modules/nf-core/software/ucsc/bedgraphtobigwig/main.nf diff --git a/conf/modules.config b/conf/modules.config index 106083c6..186f4d06 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -116,5 +116,12 @@ params { suffix = ".bed" publish_dir = "seacr" } + 'ucsc_bedclip' { + suffix = ".clip" + publish_files = false + } + 'ucsc_bedgraphtobigwig' { + publish_dir = "${params.aligner}/bigwig" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 9c18a1db..b0c3b9ea 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -129,6 +129,7 @@ include { INPUT_CHECK } from './modules/local/subworkflow/input_check' include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from './modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) include { SEACR_CALLPEAK } from './modules/local/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) +include { UCSC_BEDCLIP } from './modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) /* @@ -154,7 +155,7 @@ include { ANNOTATE_META as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/sub /* * MODULES */ - +include { UCSC_BEDGRAPHTOBIGWIG } from './modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: modules['ucsc_bedgraphtobigwig'] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -371,7 +372,24 @@ workflow CUTANDRUN { ch_bedgraph_combined ) ch_seacr_bed = SEACR_CALLPEAK.out.bed - ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + + /* + * MODULE: Clip off-chromosome peaks + */ + UCSC_BEDCLIP ( + ch_bedtools_bedgraph, + PREPARE_GENOME.out.chrom_sizes + ) + + /* + * MODULE: Convert to bigwig + */ + UCSC_BEDGRAPHTOBIGWIG ( + UCSC_BEDCLIP.out.bedgraph, + PREPARE_GENOME.out.chrom_sizes + ) + ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) } /* @@ -382,8 +400,6 @@ workflow CUTANDRUN { ) } - - //////////////////////////////////////////////////// /* -- COMPLETION EMAIL -- */ //////////////////////////////////////////////////// diff --git a/modules/local/process/ucsc_bedclip.nf b/modules/local/process/ucsc_bedclip.nf new file mode 100644 index 00000000..2bb653ed --- /dev/null +++ b/modules/local/process/ucsc_bedclip.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +def VERSION = '377' + +process UCSC_BEDCLIP { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::ucsc-bedclip=377" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/ucsc-bedclip:377--h446ed27_1" + } else { + container "quay.io/biocontainers/ucsc-bedclip:377--h446ed27_1" + } + + input: + tuple val(meta), path(bedgraph) + path sizes + + output: + tuple val(meta), path("*.bedGraph"), emit: bedgraph + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedClip $bedgraph $sizes ${prefix}.bedGraph + echo $VERSION > ${software}.version.txt + """ +} \ No newline at end of file diff --git a/modules/nf-core/software/ucsc/bedgraphtobigwig/functions.nf b/modules/nf-core/software/ucsc/bedgraphtobigwig/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/nf-core/software/ucsc/bedgraphtobigwig/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/ucsc/bedgraphtobigwig/main.nf b/modules/nf-core/software/ucsc/bedgraphtobigwig/main.nf new file mode 100644 index 00000000..10300280 --- /dev/null +++ b/modules/nf-core/software/ucsc/bedgraphtobigwig/main.nf @@ -0,0 +1,38 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +def VERSION = '377' + +process UCSC_BEDGRAPHTOBIGWIG { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::ucsc-bedgraphtobigwig=377" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/ucsc-bedgraphtobigwig:377--h446ed27_1" + } else { + container "quay.io/biocontainers/ucsc-bedgraphtobigwig:377--h446ed27_1" + } + + input: + tuple val(meta), path(bedgraph) + path sizes + + output: + tuple val(meta), path("*.bigWig"), emit: bigwig + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedGraphToBigWig $bedgraph $sizes ${prefix}.bigWig + echo $VERSION > ${software}.version.txt + """ +} From cb1eb79bef3b09a1206da1d1aa04e6d89f4e8439 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 22 Jan 2021 11:12:54 +0000 Subject: [PATCH 019/675] Added igv prep --- bin/igv_files_to_session.py | 122 ++++++++++++++++++++ conf/modules.config | 4 + conf/test_hg38_chr7.config | 2 +- cutandrun.nf | 13 +++ main.nf | 14 ++- modules/local/process/igv_session.nf | 32 +++++ modules/local/subworkflow/prepare_genome.nf | 20 +++- nextflow.config | 3 +- 8 files changed, 203 insertions(+), 7 deletions(-) create mode 100755 bin/igv_files_to_session.py create mode 100644 modules/local/process/igv_session.nf diff --git a/bin/igv_files_to_session.py b/bin/igv_files_to_session.py new file mode 100755 index 00000000..5b62451d --- /dev/null +++ b/bin/igv_files_to_session.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python + +####################################################################### +####################################################################### +## Created on July 4th 2018 to create IGV session file from file list +####################################################################### +####################################################################### + +import os +import errno +import argparse + +############################################ +############################################ +## PARSE ARGUMENTS +############################################ +############################################ + +Description = 'Create IGV session file from a list of files and associated colours - ".bed", ".bw", ".bigwig", ".tdf", ".gtf" files currently supported.' +Epilog = """Example usage: python igv_files_to_session.py """ + +argParser = argparse.ArgumentParser(description=Description, epilog=Epilog) + +## REQUIRED PARAMETERS +argParser.add_argument('XML_OUT', help="XML output file.") +argParser.add_argument('LIST_FILE', help="Tab-delimited file containing two columns i.e. file_name\tcolour. Header isnt required.") +argParser.add_argument('GENOME', help="Full path to genome fasta file or shorthand for genome available in IGV e.g. hg19.") + +## OPTIONAL PARAMETERS +argParser.add_argument('-pp', '--path_prefix', type=str, dest="PATH_PREFIX", default='', help="Path prefix to be added at beginning of all files in input list file.") +args = argParser.parse_args() + +############################################ +############################################ +## HELPER FUNCTIONS +############################################ +############################################ + +def makedir(path): + + if not len(path) == 0: + try: + os.makedirs(path) + except OSError as exception: + if exception.errno != errno.EEXIST: + raise + +############################################ +############################################ +## MAIN FUNCTION +############################################ +############################################ + +def igv_files_to_session(XMLOut,ListFile,Genome,PathPrefix=''): + + makedir(os.path.dirname(XMLOut)) + + fileList = [] + fin = open(ListFile,'r') + while True: + line = fin.readline() + if line: + ifile,colour = line.strip().split('\t') + if len(colour.strip()) == 0: + colour = '0,0,178' + fileList.append((PathPrefix.strip()+ifile,colour)) + else: + break + fout.close() + + ## ADD RESOURCES SECTION + XMLStr = '\n' + XMLStr += '\n' % (Genome) + XMLStr += '\t\n' + for ifile,colour in fileList: + XMLStr += '\t\t\n' % (ifile) + XMLStr += '\t\n' + + ## ADD PANEL SECTION + XMLStr += '\t\n' + for ifile,colour in fileList: + extension = os.path.splitext(ifile)[1].lower() + if extension in ['.bed','.broadpeak','.narrowpeak']: + XMLStr += '\t\t" ) + } +} + +println ( "TEST < " + params.gtf + " >" ) + //////////////////////////////////////////////////// /* -- PRINT PARAMETER SUMMARY -- */ diff --git a/modules/local/process/igv_session.nf b/modules/local/process/igv_session.nf new file mode 100644 index 00000000..d5d6efae --- /dev/null +++ b/modules/local/process/igv_session.nf @@ -0,0 +1,32 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process IGV_SESSION { + tag "igv" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + container "quay.io/biocontainers/python:3.8.3" + + input: + path genome + path gtf + path beds + path bw + + output: + path('*.{txt,xml,bed,bw,fa}', includeInputs:true) + + script: + """ + find -L * -iname "*.fa" -exec echo -e {}"\\t0,0,178" \\; > fa.igv.txt + find -L * -iname "*.bed" -exec echo -e {}"\\t0,0,178" \\; > bed.igv.txt + find -L * -iname "*.bw" -exec echo -e {}"\\t0,0,178" \\; > bw.igv.txt + cat *.txt > igv_files.txt + igv_files_to_session.py igv_session.xml igv_files.txt $genome --path_prefix './' + """ +} \ No newline at end of file diff --git a/modules/local/subworkflow/prepare_genome.nf b/modules/local/subworkflow/prepare_genome.nf index 5016b95b..30173042 100644 --- a/modules/local/subworkflow/prepare_genome.nf +++ b/modules/local/subworkflow/prepare_genome.nf @@ -7,13 +7,14 @@ params.spikein_genome_options = [:] params.bt2_index_options = [:] params.bt2_spikein_index_options = [:] -include { GUNZIP as GUNZIP_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../process/gunzip' addParams( options: params.spikein_genome_options ) -include { GET_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_GTF } from '../process/gunzip' addParams( options: params.spikein_genome_options ) +include { GET_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.spikein_genome_options ) -include { UNTAR as UNTAR_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_index_options ) +include { UNTAR as UNTAR_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_index_options ) include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_spikein_index_options ) -include { BOWTIE2_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_index_options ) +include { BOWTIE2_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_index_options ) include { BOWTIE2_INDEX as BOWTIE2_SPIKEIN_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_spikein_index_options ) workflow PREPARE_GENOME { @@ -39,6 +40,16 @@ workflow PREPARE_GENOME { ch_spikein_fasta = file(params.spikein_fasta) } + /* + * Uncompress GTF annotation file + */ + ch_gtf = Channel.empty() + if (params.gtf.endsWith('.gz')) { + ch_gtf = GUNZIP_GTF ( params.gtf ).gunzip + } else { + ch_gtf = file(params.gtf) + } + /* * Create chromosome sizes file */ @@ -82,6 +93,7 @@ workflow PREPARE_GENOME { fasta = ch_fasta // path: genome.fasta chrom_sizes = ch_chrom_sizes // path: genome.sizes spikein_chrom_sizes = ch_spikein_chrom_sizes // path: genome.sizes + gtf = ch_gtf // path: genome.gtf bowtie2_index = ch_bt2_index // path: bt2/index/ bowtie2_spikein_index = ch_bt2_spikein_index // path: bt2/index/ bowtie2_version = ch_bt2_version // path: *.version.txt diff --git a/nextflow.config b/nextflow.config index c75fad10..7a43c8da 100644 --- a/nextflow.config +++ b/nextflow.config @@ -11,6 +11,8 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = '' + fasta = '' + gtf = '' // References genome = '' @@ -54,7 +56,6 @@ params { // Reporting and Visualisation skip_igv = false - // Boilerplate options enable_conda = false clusterOptions = '' From 7c5d05f4a48776be60c1d910a7d8d275cae97117 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 22 Jan 2021 12:00:00 +0000 Subject: [PATCH 020/675] Corrected gtf issue --- main.nf | 13 +------------ nextflow.config | 2 -- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/main.nf b/main.nf index d8184359..0049f432 100644 --- a/main.nf +++ b/main.nf @@ -27,18 +27,7 @@ if (params.help) { //////////////////////////////////////////////////// params.fasta = Checks.get_genome_attribute(params, 'fasta') -//params.gtf = Checks.get_genome_attribute(params, 'gtf') -params.gtf = 'test' - -if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey('gtf')) { - val = params.genomes[ params.genome ][ 'gtf' ] - println ( "TEST < " + val + " >" ) - } -} - -println ( "TEST < " + params.gtf + " >" ) - +params.gtf = Checks.get_genome_attribute(params, 'gtf') //////////////////////////////////////////////////// /* -- PRINT PARAMETER SUMMARY -- */ diff --git a/nextflow.config b/nextflow.config index 7a43c8da..0d93e132 100644 --- a/nextflow.config +++ b/nextflow.config @@ -11,8 +11,6 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = '' - fasta = '' - gtf = '' // References genome = '' From c11b6063674d6ca8d09f89075c2641c199e257f2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 22 Jan 2021 16:21:47 +0000 Subject: [PATCH 021/675] igv session complete --- conf/test_hg38_chr7.config | 2 +- modules/local/process/igv_session.nf | 41 ++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/conf/test_hg38_chr7.config b/conf/test_hg38_chr7.config index 9919efb9..b2380af5 100644 --- a/conf/test_hg38_chr7.config +++ b/conf/test_hg38_chr7.config @@ -12,6 +12,6 @@ params { config_profile_description = 'Full test dataset to check pipeline function' input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' - //fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' + fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' genome = 'GRCh38' } diff --git a/modules/local/process/igv_session.nf b/modules/local/process/igv_session.nf index d5d6efae..fd69a2c0 100644 --- a/modules/local/process/igv_session.nf +++ b/modules/local/process/igv_session.nf @@ -3,6 +3,8 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] def options = initOptions(params.options) +colour_pallete = ['38,70,83', '231,111,81', '42,157,143', '244,162,97', '233,196,106'] + process IGV_SESSION { tag "igv" publishDir "${params.outdir}", @@ -16,17 +18,44 @@ process IGV_SESSION { path genome path gtf path beds - path bw + path bigwig output: - path('*.{txt,xml,bed,bw,fa}', includeInputs:true) + path('*.{txt,xml,bed,bigWig,fa,gtf}', includeInputs:true) script: + output = '' + colours = [:] + colour_pos = 0 + + file_list = beds.collect{it.toString()}.sort() + file_list += bigwig.collect{it.toString()}.sort() + for(file in file_list){ + file_split = file.split('_R') + group = file_split[0] + if(!colours.containsKey(group)) { + colours.put(group, colour_pallete[colour_pos]) + + colour_pos++ + if(colour_pos == colour_pallete.size) { + colour_pos = 0 + } + } + + line = file + "\t" + colours[group] + "\n" + output += line + } + output = output.trim() + """ - find -L * -iname "*.fa" -exec echo -e {}"\\t0,0,178" \\; > fa.igv.txt - find -L * -iname "*.bed" -exec echo -e {}"\\t0,0,178" \\; > bed.igv.txt - find -L * -iname "*.bw" -exec echo -e {}"\\t0,0,178" \\; > bw.igv.txt + echo "$output" > exp_files.txt + find -L * -iname "*.gtf" -exec echo -e {}"\\t0,48,73" \\; > gtf.igv.txt cat *.txt > igv_files.txt igv_files_to_session.py igv_session.xml igv_files.txt $genome --path_prefix './' """ -} \ No newline at end of file +} + +// find -L * -iname "*.gtf" -exec echo -e {}"\\t0,0,178" \\; > gtf.igv.txt +// find -L * -iname "*.bed" -exec echo -e {}"\\t0,0,178" \\; > bed.igv.txt +// find -L * -iname "*.bigWig" -exec echo -e {}"\\t0,0,178" \\; > bigwig.igv.txt +// cat *.txt > igv_files.txt \ No newline at end of file From 78f3d14eb6c990c03a7a4136b1108608c33490d4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Feb 2021 11:31:04 +0000 Subject: [PATCH 022/675] tidy up --- cutandrun.nf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 42163bc2..23374705 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -127,13 +127,13 @@ def awk_bt2_spikein_options = modules['awk_bt2_spikein'] /* * MODULES */ -include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) -include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) +include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) +include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from './modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) -include { SEACR_CALLPEAK } from './modules/local/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) -include { UCSC_BEDCLIP } from './modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) -include { IGV_SESSION } from './modules/local/process/igv_session' addParams( options: modules['igv'] ) -include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { SEACR_CALLPEAK } from './modules/local/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) +include { UCSC_BEDCLIP } from './modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) +include { IGV_SESSION } from './modules/local/process/igv_session' addParams( options: modules['igv'] ) +include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules From c3ca3e8c6ff23e36ee0a74c17f258ab23a5fd2ad Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Feb 2021 14:55:35 +0000 Subject: [PATCH 023/675] Fixed channel name error --- modules/local/subworkflow/align_bowtie2.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/subworkflow/align_bowtie2.nf b/modules/local/subworkflow/align_bowtie2.nf index af28de85..eb5abcdf 100644 --- a/modules/local/subworkflow/align_bowtie2.nf +++ b/modules/local/subworkflow/align_bowtie2.nf @@ -43,7 +43,7 @@ workflow ALIGN_BOWTIE2 { orig_spikein_bam = BOWTIE2_SPIKEIN_ALIGN.out.bam // channel: [ val(meta), bam ] bowtie2_log = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log_final ] - bowtie2_spikein_log = BAM_SORT_SAMTOOLS_SPIKEIN.out.log // channel: [ val(meta), log_final ] + bowtie2_spikein_log = BOWTIE2_SPIKEIN_ALIGN.out.log // channel: [ val(meta), log_final ] bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] From 5b1628b81c2be3d7116c9ebb9ee94b4305863bb4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Feb 2021 14:55:43 +0000 Subject: [PATCH 024/675] Added multiqc support --- assets/multiqc_config.yaml | 125 ++++++++++++++++++++++++++++++- conf/modules.config | 5 ++ cutandrun.nf | 36 ++++++++- modules/local/process/multiqc.nf | 46 ++++++++++++ nextflow.config | 2 +- 5 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 modules/local/process/multiqc.nf diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index bc24430e..d7382242 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -2,10 +2,133 @@ report_comment: > This report has been generated by the nf-core/cutandrun analysis pipeline. For information about how to interpret these results, please see the documentation. + +report_header_info: + - Contact E-mail: "chris.cheshire@crick.ac.uk" + - Application Type: "CUT&TAG" + - Project Type: "Application" + - Sequencing Platform: "HiSeq 2500 High Output V4" + - Sequencing Setup: "2x50" + +show_analysis_paths: True +show_analysis_time: True + +show_hide_buttons: + - Read Group 1 + - Read Group 2 + - Controls + - Conditions +show_hide_mode: + - show + - show + - show + - show +show_hide_patterns: + - _r1 + - _r2 + - igg_ + - ["h3k4me3_", "h3k27me3_"] + +export_plots: true + +# Run only these modules +run_modules: + - custom_content + - fastqc + - cutadapt + - bowtie2 + - samtools + - picard + +module_order: + - custom_content + - fastqc: + name: 'FastQC (raw)' + info: 'This section of the report shows FastQC results before adapter trimming.' + path_filters: + - './fastqc/*.zip' + - cutadapt + - fastqc: + name: 'FastQC (trimmed)' + info: 'This section of the report shows FastQC results after adapter trimming.' + path_filters: + - './trimgalore/fastqc/*.zip' + - bowtie2: + name: 'Bowtie2 (target)' + path_filters: + - "./bowtie2/*target_summary.txt" + - bowtie2: + name: 'Bowtie2 (spike-in)' + path_filters: + - "./bowtie2/*spikein_summary.txt" + - samtools + - picard + report_section_order: software_versions: order: -1000 nf-core-cutandrun-summary: order: -1001 -export_plots: true +# Don't show % Dups in the General Stats table (we have this from Picard) +table_columns_visible: + FastQC: + percent_duplicates: False + +section_comments: + fastqc_raw_fastqc_per_base_sequence_content: > + The discordant sequence content at the begining of the reads are common phenomenon for CUT&TAG reads. Failing to pass the Per base seuqnence content does not mean your data failed. + - It can be due to the Tn5 preference. + - What you might be detecting is the 10-bp periodicity that shows up as a sawtooth pattern in the length distribution. If so, this is normal and will not affect alignment or peak calling. In any case we do not recommend trimming as the bowtie2 parameters that we list will give accurate mapping information without trimming. + +fastqc_config: + fastqc_theoretical_gc: "hg38_genome" + +# Customise the module search patterns to speed up execution time +# - Skip module sub-tools that we are not interested in +# - Replace file-content searching with filename pattern searching +# - Don't add anything that is the same as the MultiQC default +# See https://multiqc.info/docs/#optimise-file-search-patterns for details +sp: + cutadapt: + fn: '*trimming_report.txt' + + samtools/stats: + fn: '*.stats' + samtools/flagstat: + fn: '*.flagstat' + samtools/idxstats: + fn: '*.idxstats*' + + picard/markdups: + fn: '*.MarkDuplicates.metrics.txt' + picard/alignment_metrics: + skip: true + picard/basedistributionbycycle: + skip: true + picard/gcbias: + skip: true + picard/hsmetrics: + skip: true + picard/insertsize: + skip: true + picard/oxogmetrics: + skip: true + picard/pcr_metrics: + skip: true + picard/quality_by_cycle: + skip: true + picard/quality_score_distribution: + skip: true + picard/quality_yield_metrics: + skip: true + picard/rnaseqmetrics: + skip: true + picard/rrbs_metrics: + skip: true + picard/sam_file_validation: + skip: true + picard/variant_calling_metrics: + skip: true + picard/wgs_metrics: + skip: true \ No newline at end of file diff --git a/conf/modules.config b/conf/modules.config index cc99838f..368a043c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -127,5 +127,10 @@ params { 'igv' { publish_dir = "igv" } + + 'multiqc' { + args = "" + publish_dir = "multiqc" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 23374705..71bd12c6 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -49,6 +49,9 @@ if (anno_readme && file(anno_readme).exists()) { /* -- CONFIG FILES -- */ //////////////////////////////////////////////////// +ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() + //////////////////////////////////////////////////// /* -- ASSETS -- */ //////////////////////////////////////////////////// @@ -72,6 +75,9 @@ def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: 'genom def cat_fastq_options = modules['cat_fastq'] if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } +def multiqc_options = modules['multiqc'] +multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' + // Trimming def trimgalore_options = modules['trimgalore'] trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' @@ -134,6 +140,7 @@ include { SEACR_CALLPEAK } from './modules/local/software/seacr/callpe include { UCSC_BEDCLIP } from './modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) include { IGV_SESSION } from './modules/local/process/igv_session' addParams( options: modules['igv'] ) include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { MULTIQC } from './modules/local/process/multiqc' addParams( options: multiqc_options ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -311,7 +318,7 @@ workflow CUTANDRUN { * SUBWORKFLOW: Annotate meta data with aligner stats and */ ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) - ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) + ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_spikein_log, ch_bt2_to_csv_awk) /* * CHANNEL: Combine merge spikein meta data with main data stream @@ -406,11 +413,36 @@ workflow CUTANDRUN { } /* - * MODULE: Pipeline reporting + * MODULE: Collect software versions used in pipeline */ GET_SOFTWARE_VERSIONS ( ch_software_versions.map { it }.collect() ) + + /* + * MODULE: Multiqc + */ + if (!params.skip_multiqc) { + workflow_summary = Schema.params_summary_multiqc(workflow, params.summary_params) + ch_workflow_summary = Channel.value(workflow_summary) + + MULTIQC ( + ch_multiqc_config, + ch_multiqc_custom_config.collect().ifEmpty([]), + GET_SOFTWARE_VERSIONS.out.yaml.collect(), + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), + FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), + FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), + FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), + ch_bowtie2_log.collect{it[1]}.ifEmpty([]), + ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), + ch_samtools_stats.collect{it[1]}.ifEmpty([]), + ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), + ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), + ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]) + ) + multiqc_report = MULTIQC.out.report.toList() + } } //////////////////////////////////////////////////// diff --git a/modules/local/process/multiqc.nf b/modules/local/process/multiqc.nf new file mode 100644 index 00000000..b88ca52c --- /dev/null +++ b/modules/local/process/multiqc.nf @@ -0,0 +1,46 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process MULTIQC { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? "bioconda::multiqc=1.9" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/multiqc:1.9--pyh9f0ad1d_0" + } else { + container "quay.io/biocontainers/multiqc:1.9--pyh9f0ad1d_0" + } + + input: + path multiqc_config + path multiqc_custom_config + path software_versions + path workflow_summary + path ('fastqc/*') + path ('trimgalore/fastqc/*') + path ('trimgalore/*') + path ('bowtie2/*') + path ('bowtie2/*') + path ('samtools/stats/*') + path ('samtools/flagstat/*') + path ('samtools/idxstats/*') + path ('picard/markduplicates/*') + + output: + path "*multiqc_report.html", emit: report + path "*_data" , emit: data + path "*_plots" , optional:true, emit: plots + + script: + def software = getSoftwareName(task.process) + def custom_config = params.multiqc_config ? "--config $multiqc_custom_config" : '' + """ + multiqc -f $options.args $custom_config . + """ +} diff --git a/nextflow.config b/nextflow.config index 0d93e132..5abde3fb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -60,7 +60,7 @@ params { outdir = './results' publish_dir_mode = 'copy' multiqc_config = '' - multiqc_title = '' + multiqc_title = 'This is a test title' email = '' email_on_fail = '' max_multiqc_email_size = '25.MB' From c6a9712053ab3ee6bb1a68e08b0aea0dba606b7c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Feb 2021 15:08:45 +0000 Subject: [PATCH 025/675] Added metadata export to csv file --- conf/modules.config | 4 +++- cutandrun.nf | 10 ++++++++ modules/local/process/export_meta.nf | 35 ++++++++++++++++++++++++++++ nextflow.config | 1 + 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 modules/local/process/export_meta.nf diff --git a/conf/modules.config b/conf/modules.config index 368a043c..f0e45041 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -127,10 +127,12 @@ params { 'igv' { publish_dir = "igv" } - 'multiqc' { args = "" publish_dir = "multiqc" } + 'export_meta' { + publish_dir = "meta" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 71bd12c6..6a28093c 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -141,6 +141,7 @@ include { UCSC_BEDCLIP } from './modules/local/process/ucsc_bedclip' include { IGV_SESSION } from './modules/local/process/igv_session' addParams( options: modules['igv'] ) include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) include { MULTIQC } from './modules/local/process/multiqc' addParams( options: multiqc_options ) +include { EXPORT_META } from './modules/local/process/export_meta' addParams( options: modules['export_meta'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -443,6 +444,15 @@ workflow CUTANDRUN { ) multiqc_report = MULTIQC.out.report.toList() } + + /* + * MODULE: Reporting + */ + if (!params.skip_reporting) { + EXPORT_META ( + ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + ) + } } //////////////////////////////////////////////////// diff --git a/modules/local/process/export_meta.nf b/modules/local/process/export_meta.nf new file mode 100644 index 00000000..0c094e5e --- /dev/null +++ b/modules/local/process/export_meta.nf @@ -0,0 +1,35 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process EXPORT_META { + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? "" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + val meta + + output: + path "meta_table.csv", emit: csv + + script: + arr_str = meta[0].keySet().join(",") + + for (int i = 0; i < meta.size(); i++) { + sample_str = meta[i].values().join(",") + arr_str = arr_str + "\n" + sample_str + } + + """ + echo "${arr_str}" > meta_table.csv + """ +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 5abde3fb..b0179f29 100644 --- a/nextflow.config +++ b/nextflow.config @@ -53,6 +53,7 @@ params { // Reporting and Visualisation skip_igv = false + skip_reporting = false // Boilerplate options enable_conda = false From b75ce53def4af3c5bddc2ee3a0a8452f1ca99347 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Feb 2021 15:56:00 +0000 Subject: [PATCH 026/675] added test reporting module --- bin/gen_pdf.py | 43 +++++++++++++++++++++++ bin/reporting/lib/__init__.py | 2 ++ bin/reporting/main.py | 0 cutandrun.nf | 3 ++ modules/local/process/generate_reports.nf | 24 +++++++++++++ 5 files changed, 72 insertions(+) create mode 100755 bin/gen_pdf.py create mode 100644 bin/reporting/lib/__init__.py create mode 100644 bin/reporting/main.py create mode 100644 modules/local/process/generate_reports.nf diff --git a/bin/gen_pdf.py b/bin/gen_pdf.py new file mode 100755 index 00000000..30839c3e --- /dev/null +++ b/bin/gen_pdf.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +import datetime +import numpy as np +from matplotlib.backends.backend_pdf import PdfPages +import matplotlib.pyplot as plt + +# Create the PdfPages object to which we will save the pages: +# The with statement makes sure that the PdfPages object is closed properly at +# the end of the block, even if an Exception occurs. +with PdfPages('multipage_pdf.pdf') as pdf: + plt.figure(figsize=(3, 3)) + plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o') + plt.title('Page One') + pdf.savefig() # saves the current figure into a pdf page + plt.close() + + # if LaTeX is not installed or error caught, change to `usetex=False` + plt.rc('text', usetex=False) + plt.figure(figsize=(8, 6)) + x = np.arange(0, 5, 0.1) + plt.plot(x, np.sin(x), 'b-') + plt.title('Page Two') + pdf.attach_note("plot of sin(x)") # you can add a pdf note to + # attach metadata to a page + pdf.savefig() + plt.close() + + plt.rc('text', usetex=False) + fig = plt.figure(figsize=(4, 5)) + plt.plot(x, x ** 2, 'ko') + plt.title('Page Three') + pdf.savefig(fig) # or you can pass a Figure object to pdf.savefig + plt.close() + + # We can also set the file's metadata via the PdfPages object: + d = pdf.infodict() + d['Title'] = 'Multipage PDF Example' + d['Author'] = 'Jouni K. Sepp\xe4nen' + d['Subject'] = 'How to create a multipage pdf file and set its metadata' + d['Keywords'] = 'PdfPages multipage keywords author title subject' + d['CreationDate'] = datetime.datetime(2009, 11, 13) + d['ModDate'] = datetime.datetime.today() \ No newline at end of file diff --git a/bin/reporting/lib/__init__.py b/bin/reporting/lib/__init__.py new file mode 100644 index 00000000..ec69c5c9 --- /dev/null +++ b/bin/reporting/lib/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- \ No newline at end of file diff --git a/bin/reporting/main.py b/bin/reporting/main.py new file mode 100644 index 00000000..e69de29b diff --git a/cutandrun.nf b/cutandrun.nf index 6a28093c..aed02a3a 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -142,6 +142,7 @@ include { IGV_SESSION } from './modules/local/process/igv_session' include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) include { MULTIQC } from './modules/local/process/multiqc' addParams( options: multiqc_options ) include { EXPORT_META } from './modules/local/process/export_meta' addParams( options: modules['export_meta'] ) +include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: [:] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -453,6 +454,8 @@ workflow CUTANDRUN { ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) } + + GENERATE_REPORTS() } //////////////////////////////////////////////////// diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf new file mode 100644 index 00000000..605a9311 --- /dev/null +++ b/modules/local/process/generate_reports.nf @@ -0,0 +1,24 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process GENERATE_REPORTS { + tag "$samplesheet" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + //conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + //container "quay.io/biocontainers/python:3.8.3" + container 'quay.io/biocontainers/pybda:0.1.0--pyh5ca1d4c_0' + + output: + path '*.pdf' + + + script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ + """ + gen_pdf.py + """ +} \ No newline at end of file From 7d8629f49bfbbdda9e42b5f098220d8055c7b8de Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 2 Feb 2021 13:07:39 +0000 Subject: [PATCH 027/675] Added first plot gen --- .vscode/settings.json | 3 + bin/gen_pdf.py | 43 ---------- bin/reporting/lib/figures.py | 156 +++++++++++++++++++++++++++++++++++ bin/reporting/main.py | 49 +++++++++++ 4 files changed, 208 insertions(+), 43 deletions(-) create mode 100644 .vscode/settings.json delete mode 100755 bin/gen_pdf.py create mode 100644 bin/reporting/lib/figures.py mode change 100644 => 100755 bin/reporting/main.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..fa60f685 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/usr/local/Caskroom/miniconda/base/envs/cutrun/bin/python" +} \ No newline at end of file diff --git a/bin/gen_pdf.py b/bin/gen_pdf.py deleted file mode 100755 index 30839c3e..00000000 --- a/bin/gen_pdf.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python - -import datetime -import numpy as np -from matplotlib.backends.backend_pdf import PdfPages -import matplotlib.pyplot as plt - -# Create the PdfPages object to which we will save the pages: -# The with statement makes sure that the PdfPages object is closed properly at -# the end of the block, even if an Exception occurs. -with PdfPages('multipage_pdf.pdf') as pdf: - plt.figure(figsize=(3, 3)) - plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o') - plt.title('Page One') - pdf.savefig() # saves the current figure into a pdf page - plt.close() - - # if LaTeX is not installed or error caught, change to `usetex=False` - plt.rc('text', usetex=False) - plt.figure(figsize=(8, 6)) - x = np.arange(0, 5, 0.1) - plt.plot(x, np.sin(x), 'b-') - plt.title('Page Two') - pdf.attach_note("plot of sin(x)") # you can add a pdf note to - # attach metadata to a page - pdf.savefig() - plt.close() - - plt.rc('text', usetex=False) - fig = plt.figure(figsize=(4, 5)) - plt.plot(x, x ** 2, 'ko') - plt.title('Page Three') - pdf.savefig(fig) # or you can pass a Figure object to pdf.savefig - plt.close() - - # We can also set the file's metadata via the PdfPages object: - d = pdf.infodict() - d['Title'] = 'Multipage PDF Example' - d['Author'] = 'Jouni K. Sepp\xe4nen' - d['Subject'] = 'How to create a multipage pdf file and set its metadata' - d['Keywords'] = 'PdfPages multipage keywords author title subject' - d['CreationDate'] = datetime.datetime(2009, 11, 13) - d['ModDate'] = datetime.datetime.today() \ No newline at end of file diff --git a/bin/reporting/lib/figures.py b/bin/reporting/lib/figures.py new file mode 100644 index 00000000..31de3e3b --- /dev/null +++ b/bin/reporting/lib/figures.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python +# coding: utf-8 + +import os +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import seaborn as sb + +class Figures: + data_table = None + + def __init__(self, logger, data): + self.logger = logger + self.data_path = data + + def load_data(self): + self.data_table = pd.read_csv(self.data_path, sep=',') + + + def annotate_data(self): + # Make new perctenage alignment columns + self.data_table['target_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_target')] / self.data_table.loc[:, ('bt2_total_reads_target')] * 100 + self.data_table['spikein_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_spikein')] / self.data_table.loc[:, ('bt2_total_reads_spikein')] * 100 + # self.data_table.describe() + # print(self.data_table) + # self.data_table.info() + + def generate_plots(self): + # Init + plots = dict() + data = dict() + + # Get Data + self.load_data() + self.annotate_data() + + # Plot 1 + plot1, data1 = self.alignment_summary() + plots["alignment_summary"] = plot1 + data["alignment_summary"] = data1 + + return (plots, data) + + def gen_plots_to_folder(self, output_path): + # Init + sb.set_theme() + abs_path = os.path.abspath(output_path) + + # Get plots and supporting data tables + plots, data = self.generate_plots() + + # Save data to output folder + for key in data: + data[key].to_csv(os.path.join(abs_path, key + '.csv'), index=False) + plots[key].savefig(os.path.join(abs_path, key + '.png')) + + ##### PLOTS ##### + + # ---------- Plot 1 - Alignment Summary --------- # + def alignment_summary(self): + # Subset data + df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] + + ## Construct quad plot + fig, seq_summary = plt.subplots(2,2) + fig.suptitle("Sequencing and Alignment Summary") + + # Seq depth + sb.boxplot(data=df_data, x='group', y='bt2_total_reads_target', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[0,0]) + seq_summary[0,0].set_title("Sequencing Depth") + seq_summary[0,0].set_ylabel("Total Reads") + + # Alignable fragments + sb.boxplot(data=df_data, x='group', y='bt2_total_aligned_target', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[0,1]) + seq_summary[0,1].set_title("Alignable Fragments") + seq_summary[0,1].set_ylabel("Total Aligned Reads") + + # Alignment rate hg38 + sb.boxplot(data=df_data, x='group', y='target_alignment_rate', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[1,0]) + seq_summary[1,0].set_title("Alignment Rate (hg38)") + seq_summary[1,0].set_ylabel("Percent of Fragments Aligned") + + # Alignment rate e.coli + sb.boxplot(data=df_data, x='group', y='spikein_alignment_rate', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[1,1]) + seq_summary[1,1].set_title("Alignment Rate (e.coli)") + seq_summary[1,1].set_ylabel("Percent of Fragments Aligned") + + plt.subplots_adjust(wspace=0.5, hspace=0.5) + + return fig, df_data + + + + + + + +# import glob +# +# import re + + +# # ---------- Plots 2&3 - Mapped Fragment Distribution --------- # + +# # Parse './' to fragments argument as we expect all data to be in the same directory. +# fragments = args.exp_fragments + +# # Create list of deeptools raw fragment files +# dt_frag_list = glob.glob(fragments + '*raw.csv') + +# df_list = list() +# for i in list(range(0,len(dt_frag_list))): +# # create dataframe from csv file for each file and save to a list +# dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', skiprows=[0], header=0) +# df_list.append( dt_frag_i ) + +# # create long forms of fragment histograms +# dt_frag_i_long = np.repeat(dt_frag_i['Size'].values, dt_frag_i['Occurrences'].values) +# dt_sample_i_long = np.repeat(dt_frag_i['Sample'][0], len(dt_frag_i_long)) + +# if i==0: +# frags_arr = dt_frag_i_long +# sample_arr = dt_sample_i_long +# og_frag_df = dt_frag_i +# else: +# frags_arr = np.append(frags_arr, dt_frag_i_long) +# sample_arr = np.append(sample_arr, dt_sample_i_long) +# og_frag_df = og_frag_df.append(dt_frag_i) + +# # create hue array using regex pattern matching +# for i in list(range(0,len(sample_arr))): +# sample_i = sample_arr[i] +# sample_exp = re.findall("^[^_]*", sample_i) + +# if i==0: +# sample_exp_arr = np.array(sample_exp[0]) +# else: +# sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) + +# df_long = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) +# df_long.to_csv('./fragmanet_distribution_violin.csv', index=False) +# og_frag_df.to_csv('./fragmanet_distribution_line.csv', index=False) +# # print(df_long) + +# plt.clf() +# ax1 = sns.violinplot(data=df_long, x="sample", y="fragment_size", hue="histone_mark") +# # plt.show() +# fig1 = ax1.get_figure() +# fig1.savefig('fragmanet_distribution_violin.png') + +# plt.clf() +# ax2 = sns.lineplot(data=og_frag_df, x="Size", y="Occurrences", hue="Sample") +# # plt.show() +# fig2 = ax2.get_figure() +# fig2.savefig('fragmanet_distribution_line.png') diff --git a/bin/reporting/main.py b/bin/reporting/main.py old mode 100644 new mode 100755 index e69de29b..f854e4e6 --- a/bin/reporting/main.py +++ b/bin/reporting/main.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# coding: utf-8 + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import sys +import os +import argparse +import logging + +from lib.figures import Figures + +def gen_png(parsed_args): + input_path = parsed_args.input + output_path = parsed_args.output + + log_path = None + if parsed_args.log: + log_path = parsed_args.log + + logging.basicConfig(filename=log_path, level=os.environ.get("LOGLEVEL", "INFO")) + logger = logging.getLogger("gen_png") + logger.info('Generating plots to output folder') + + fig = Figures(logger, input_path) + fig.gen_plots_to_folder(output_path) + + +if __name__ == '__main__': + logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) + logger = logging.getLogger("app") + logger.info(sys.executable) + + # Create command args + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(help='sub-command help') + + # Functions + parser_genimg = subparsers.add_parser('genimg', help='generate images help') + parser_genimg.set_defaults(func=gen_png) + parser_genimg.add_argument('--input', required=True) + parser_genimg.add_argument('--output', required=True) + parser_genimg.add_argument('--log', required=False) + + # Parse + parsed_args = parser.parse_args() + parsed_args.func(parsed_args) \ No newline at end of file From a5fca7f5e0b2e6376ea8f7ecfe9d717641e4deaf Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 2 Feb 2021 14:22:38 +0000 Subject: [PATCH 028/675] Added pdf export --- bin/reporting/lib/figures.py | 60 ++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/bin/reporting/lib/figures.py b/bin/reporting/lib/figures.py index 31de3e3b..854713cb 100644 --- a/bin/reporting/lib/figures.py +++ b/bin/reporting/lib/figures.py @@ -5,6 +5,7 @@ import numpy as np import pandas as pd import matplotlib.pyplot as plt +from matplotlib.backends.backend_pdf import PdfPages import seaborn as sb class Figures: @@ -55,6 +56,23 @@ def gen_plots_to_folder(self, output_path): data[key].to_csv(os.path.join(abs_path, key + '.csv'), index=False) plots[key].savefig(os.path.join(abs_path, key + '.png')) + # Save pdf of the plots + self.gen_pdf(abs_path, plots) + + def gen_pdf(self, output_path, plots): + with PdfPages(os.path.join(output_path, 'report.pdf')) as pdf: + for key in plots: + pdf.savefig(plots[key]) + + # # We can also set the file's metadata via the PdfPages object: + # d = pdf.infodict() + # d['Title'] = 'Multipage PDF Example' + # d['Author'] = 'Jouni K. Sepp\xe4nen' + # d['Subject'] = 'How to create a multipage pdf file and set its metadata' + # d['Keywords'] = 'PdfPages multipage keywords author title subject' + # d['CreationDate'] = datetime.datetime(2009, 11, 13) + # d['ModDate'] = datetime.datetime.today() + ##### PLOTS ##### # ---------- Plot 1 - Alignment Summary --------- # @@ -154,3 +172,45 @@ def alignment_summary(self): # # plt.show() # fig2 = ax2.get_figure() # fig2.savefig('fragmanet_distribution_line.png') + +# import datetime +# import numpy as np +# from matplotlib.backends.backend_pdf import PdfPages +# import matplotlib.pyplot as plt + +# # Create the PdfPages object to which we will save the pages: +# # The with statement makes sure that the PdfPages object is closed properly at +# # the end of the block, even if an Exception occurs. +# with PdfPages('multipage_pdf.pdf') as pdf: +# plt.figure(figsize=(3, 3)) +# plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o') +# plt.title('Page One') +# pdf.savefig() # saves the current figure into a pdf page +# plt.close() + +# # if LaTeX is not installed or error caught, change to `usetex=False` +# plt.rc('text', usetex=True) +# plt.figure(figsize=(8, 6)) +# x = np.arange(0, 5, 0.1) +# plt.plot(x, np.sin(x), 'b-') +# plt.title('Page Two') +# pdf.attach_note("plot of sin(x)") # you can add a pdf note to +# # attach metadata to a page +# pdf.savefig() +# plt.close() + +# plt.rc('text', usetex=False) +# fig = plt.figure(figsize=(4, 5)) +# plt.plot(x, x ** 2, 'ko') +# plt.title('Page Three') +# pdf.savefig(fig) # or you can pass a Figure object to pdf.savefig +# plt.close() + +# # We can also set the file's metadata via the PdfPages object: +# d = pdf.infodict() +# d['Title'] = 'Multipage PDF Example' +# d['Author'] = 'Jouni K. Sepp\xe4nen' +# d['Subject'] = 'How to create a multipage pdf file and set its metadata' +# d['Keywords'] = 'PdfPages multipage keywords author title subject' +# d['CreationDate'] = datetime.datetime(2009, 11, 13) +# d['ModDate'] = datetime.datetime.today() \ No newline at end of file From ae1ae137907006f31448d53e6d1a01bcddcdca1b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 2 Feb 2021 15:57:38 +0000 Subject: [PATCH 029/675] Added dash support --- assets/run_dash.sh | 3 +++ bin/reporting/Dockerfile | 21 ++++++++++++++++++++ bin/reporting/app.py | 35 ++++++++++++++++++++++++++++++++++ bin/reporting/environment.yml | 19 ++++++++++++++++++ bin/reporting/lib/figures.py | 25 ++++++++++++++++++++++-- bin/reporting/requirements.txt | 3 +++ 6 files changed, 104 insertions(+), 2 deletions(-) create mode 100755 assets/run_dash.sh create mode 100644 bin/reporting/Dockerfile create mode 100644 bin/reporting/app.py create mode 100644 bin/reporting/environment.yml create mode 100644 bin/reporting/requirements.txt diff --git a/assets/run_dash.sh b/assets/run_dash.sh new file mode 100755 index 00000000..173bc89c --- /dev/null +++ b/assets/run_dash.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker run -it -p 8050:8050 -v "$PWD":/app/data --rm luslab/dash:latest \ No newline at end of file diff --git a/bin/reporting/Dockerfile b/bin/reporting/Dockerfile new file mode 100644 index 00000000..8bd1ed82 --- /dev/null +++ b/bin/reporting/Dockerfile @@ -0,0 +1,21 @@ +FROM continuumio/miniconda3:4.9.2 +LABEL authors="chris.cheshire@crick.ac.uk" \ + description="Docker image containing all requirements plotly dash" + +# Init +RUN mkdir /app + +# Install conda and pip packages +COPY ./environment.yml / +COPY ./requirements.txt / +RUN conda env create -f /environment.yml && conda clean -a +ENV PATH /opt/conda/envs/dash/bin:$PATH + +# copy files over +COPY ./app.py /app/app.py +COPY ./lib /app/lib + +ENV DASH_DEBUG_MODE True +WORKDIR /app +EXPOSE 8050 +CMD ["python", "app.py"] \ No newline at end of file diff --git a/bin/reporting/app.py b/bin/reporting/app.py new file mode 100644 index 00000000..02fe90a2 --- /dev/null +++ b/bin/reporting/app.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# coding: utf-8 + +import dash +import dash_bootstrap_components as dbc +import dash_core_components as dcc +import dash_html_components as html +import flask + +from lib.figures import Figures + +server = flask.Flask(__name__) +app = dash.Dash(__name__, server=server, external_stylesheets=[dbc.themes.BOOTSTRAP]) +app.config.suppress_callback_exceptions = True + +# Init data +figures = Figures(None, "data/meta_table.csv") +figs, data = figures.generate_dash_plots() + +app.layout = html.Div( + children=[ + html.H1(children="Hello Dash 2020"), + html.Div(children="""Dash: A web application framework for Python."""), + dcc.Graph( + id='example-graph', + figure=figs["alignment_summary"] + ), + ] +) + +if __name__ == "__main__": + import os + + debug = False if os.environ["DASH_DEBUG_MODE"] == "False" else True + app.run_server(host="0.0.0.0", port=8050, debug=debug) \ No newline at end of file diff --git a/bin/reporting/environment.yml b/bin/reporting/environment.yml new file mode 100644 index 00000000..e400db1e --- /dev/null +++ b/bin/reporting/environment.yml @@ -0,0 +1,19 @@ +# conda env create -f environment.yml +name: dash +channels: + - conda-forge + - bioconda + - defaults +dependencies: + # python version + - python=3.9.1 + + # conda packages + - numpy=1.20.* + - pandas=1.2.* + - seaborn=0.11.* + + # pip packages + - pip + - pip: + - -r file:requirements.txt \ No newline at end of file diff --git a/bin/reporting/lib/figures.py b/bin/reporting/lib/figures.py index 854713cb..1a96317f 100644 --- a/bin/reporting/lib/figures.py +++ b/bin/reporting/lib/figures.py @@ -7,6 +7,7 @@ import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages import seaborn as sb +import plotly.express as px class Figures: data_table = None @@ -43,6 +44,22 @@ def generate_plots(self): return (plots, data) + def generate_dash_plots(self): + # Init + plots = dict() + data = dict() + + # Get Data + self.load_data() + self.annotate_data() + + # Plot 1 + plot1, data1 = self.alignment_summary_ex() + plots["alignment_summary"] = plot1 + data["alignment_summary"] = data1 + + return (plots, data) + def gen_plots_to_folder(self, output_path): # Init sb.set_theme() @@ -108,12 +125,16 @@ def alignment_summary(self): return fig, df_data + def alignment_summary_ex(self): + # Subset data + df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] + fig = px.box(df_data, x="group", y="bt2_total_reads_target") - - + return fig, df_data + # import glob # # import re diff --git a/bin/reporting/requirements.txt b/bin/reporting/requirements.txt new file mode 100644 index 00000000..0ddb8f82 --- /dev/null +++ b/bin/reporting/requirements.txt @@ -0,0 +1,3 @@ +dash==1.19.* +dash-daq==0.5.* +dash-bootstrap-components==0.11.* \ No newline at end of file From b2db491b1b75ee2efd98d7ee1424eebe8596e4fa Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Mar 2021 14:51:56 +0000 Subject: [PATCH 030/675] Restructured python directories --- .gitignore | 3 +++ bin/{ => python}/check_samplesheet.py | 0 bin/{ => python}/igv_files_to_session.py | 0 bin/{ => python}/reporting/app.py | 0 bin/{ => python}/reporting/lib/__init__.py | 0 bin/{ => python}/reporting/lib/figures.py | 0 bin/{ => python}/reporting/main.py | 0 bin/{ => python}/scrape_software_versions.py | 0 8 files changed, 3 insertions(+) rename bin/{ => python}/check_samplesheet.py (100%) rename bin/{ => python}/igv_files_to_session.py (100%) rename bin/{ => python}/reporting/app.py (100%) rename bin/{ => python}/reporting/lib/__init__.py (100%) rename bin/{ => python}/reporting/lib/figures.py (100%) rename bin/{ => python}/reporting/main.py (100%) rename bin/{ => python}/scrape_software_versions.py (100%) diff --git a/.gitignore b/.gitignore index aa4bb5b3..be162b4d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ tests/ testing/ testing* *.pyc + +.local +.config \ No newline at end of file diff --git a/bin/check_samplesheet.py b/bin/python/check_samplesheet.py similarity index 100% rename from bin/check_samplesheet.py rename to bin/python/check_samplesheet.py diff --git a/bin/igv_files_to_session.py b/bin/python/igv_files_to_session.py similarity index 100% rename from bin/igv_files_to_session.py rename to bin/python/igv_files_to_session.py diff --git a/bin/reporting/app.py b/bin/python/reporting/app.py similarity index 100% rename from bin/reporting/app.py rename to bin/python/reporting/app.py diff --git a/bin/reporting/lib/__init__.py b/bin/python/reporting/lib/__init__.py similarity index 100% rename from bin/reporting/lib/__init__.py rename to bin/python/reporting/lib/__init__.py diff --git a/bin/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py similarity index 100% rename from bin/reporting/lib/figures.py rename to bin/python/reporting/lib/figures.py diff --git a/bin/reporting/main.py b/bin/python/reporting/main.py similarity index 100% rename from bin/reporting/main.py rename to bin/python/reporting/main.py diff --git a/bin/scrape_software_versions.py b/bin/python/scrape_software_versions.py similarity index 100% rename from bin/scrape_software_versions.py rename to bin/python/scrape_software_versions.py From dae6fe5a5915a9da82a31369be04be4e78e2f177 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Mar 2021 14:52:08 +0000 Subject: [PATCH 031/675] Commenting --- cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index aed02a3a..fb151e1f 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -455,7 +455,7 @@ workflow CUTANDRUN { ) } - GENERATE_REPORTS() + //GENERATE_REPORTS() } //////////////////////////////////////////////////// From f3f53865950fd5c20d1d60fd582592571e472f13 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Mar 2021 14:52:21 +0000 Subject: [PATCH 032/675] Move dash to separate container --- {bin/reporting => dev/docker/dash}/Dockerfile | 0 {bin/reporting => dev/docker/dash}/environment.yml | 0 {bin/reporting => dev/docker/dash}/requirements.txt | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {bin/reporting => dev/docker/dash}/Dockerfile (100%) rename {bin/reporting => dev/docker/dash}/environment.yml (100%) rename {bin/reporting => dev/docker/dash}/requirements.txt (100%) diff --git a/bin/reporting/Dockerfile b/dev/docker/dash/Dockerfile similarity index 100% rename from bin/reporting/Dockerfile rename to dev/docker/dash/Dockerfile diff --git a/bin/reporting/environment.yml b/dev/docker/dash/environment.yml similarity index 100% rename from bin/reporting/environment.yml rename to dev/docker/dash/environment.yml diff --git a/bin/reporting/requirements.txt b/dev/docker/dash/requirements.txt similarity index 100% rename from bin/reporting/requirements.txt rename to dev/docker/dash/requirements.txt From ef36e1b78e02d46478c556ef0df215bb5dc213b2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Mar 2021 14:52:44 +0000 Subject: [PATCH 033/675] Added deseq2 dev --- bin/r/deseq2_diff.r | 192 +++++++++++++++++++++++++ dev/docker/deseq2_diff/Dockerfile | 28 ++++ dev/docker/deseq2_diff/build.sh | 3 + dev/docker/deseq2_diff/environment.yml | 14 ++ dev/docker/deseq2_diff/run.sh | 3 + 5 files changed, 240 insertions(+) create mode 100644 bin/r/deseq2_diff.r create mode 100644 dev/docker/deseq2_diff/Dockerfile create mode 100755 dev/docker/deseq2_diff/build.sh create mode 100644 dev/docker/deseq2_diff/environment.yml create mode 100755 dev/docker/deseq2_diff/run.sh diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r new file mode 100644 index 00000000..679abe2b --- /dev/null +++ b/bin/r/deseq2_diff.r @@ -0,0 +1,192 @@ +#!/usr/bin/env Rscript + +################################################ +################################################ +## REQUIREMENTS ## +################################################ +################################################ + +## TODO + +## TODO: TIDY CAMEL CASE AND SNAKE CASE + +################################################ +################################################ +## LOAD LIBRARIES ## +################################################ +################################################ + +library(optparse) +library(stringr) +library(BiocParallel) +library(magrittr) +library(GenomicRanges) +library(chromVAR) +library(DESeq2) + +################################################ +################################################ +## PARSE COMMAND-LINE PARAMETERS ## +################################################ +################################################ + +option_list <- list( + make_option(c("-c", "--control" ), type="character", default=NULL , metavar="path" , help="TODO" ), + make_option(c("-t", "--treatment" ), type="character", default=NULL , metavar="path" , help="TODO" ), + make_option(c("-b", "--bed" ), type="character", default=NULL , metavar="path" , help="TODO" ), + make_option(c("-a", "--bam" ), type="character", default=NULL , metavar="path" , help="TODO" ), + make_option(c("-o", "--outdir" ), type="character", default='./' , metavar="path" , help="Output directory." ), + make_option(c("-p", "--outprefix" ), type="character", default='deseq2', metavar="string" , help="Output prefix." ), + make_option(c("-s", "--count_thresh" ), type="integer", default='5', metavar="string" , help="TODO" ), + make_option(c("-@", "--cores" ), type="integer" , default=1 , metavar="integer", help="Number of cores." ) +) + +opt_parser <- OptionParser(option_list=option_list) +opt <- parse_args(opt_parser) + +if (is.null(opt$control)){ + print_help(opt_parser) + stop("Please provide a control group name.", call.=FALSE) +} + +if (is.null(opt$treatment)){ + print_help(opt_parser) + stop("Please provide a treatment group name.", call.=FALSE) +} + +if (is.null(opt$bed)){ + print_help(opt_parser) + stop("Please provide a list of bed files to load.", call.=FALSE) +} + +if (is.null(opt$bam)){ + print_help(opt_parser) + stop("Please provide a list of bam files to load", call.=FALSE) +} + +# Get file lists +bed_list <- unlist(strsplit(opt$bed, ",")) +bam_list <- unlist(strsplit(opt$bam, ",")) + +# Check same length +if (length(bed_list) != length(bam_list)) { + print_help(opt_parser) + stop("Bed and bam file list are different lengths", call.=FALSE) +} + +################################################ +################################################ +## READ IN DATA FILES ## +################################################ +################################################ + +# Create group list +groups = c(opt$control, opt$treatment) + +if (file.exists(opt$outdir) == FALSE) { + dir.create(opt$outdir,recursive=TRUE) +} +setwd(opt$outdir) + +################################################ +################################################ +## READ IN DATA FILES ## +################################################ +################################################ + +# Init +mPeak = GRanges() +file_count = 0 + +# Read in bed files that match the control or treatment group +for(group in groups){ + search_res <- str_detect(bed_list, group) + file_list <- bed_list[search_res] + + for(file in file_list) { + peakRes = read.table(file, header = FALSE, fill = TRUE) + mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = "*") %>% append(mPeak, .) + file_count = file_count + 1 + } +} + +# Create replicate counts and names +group_count = length(groups) +rep_count = file_count / group_count +reps = paste0("rep", 1:rep_count) + +# Create peak table and count matrix +masterPeak = reduce(mPeak) +countMat = matrix(NA, length(masterPeak), file_count) +colnames(countMat) = paste(rep(groups, 2), rep(reps, each = 2), sep = "_") + +# Read in bam files that match the control or treatment group +for(i in seq_along(groups)){ + search_res <- str_detect(bam_list, groups[i]) + file_list <- bam_list[search_res] + + for(j in seq_along(file_list)) { + fragment_counts <- getCounts(file_list[j], masterPeak, paired = TRUE, by_rg = FALSE, format = "bam") + countMat[, (((i-1)*group_count) + (j-1)) + 1] = counts(fragment_counts)[,1] + } +} + +################################################ +################################################ +## RUN DESEQ2 ## +################################################ +################################################ + +selectR = which(rowSums(countMat) > opt$count_thresh) ## Create index list for peak count filter +dataS = countMat[selectR,] ## Select data from filter +condition = factor(rep(groups, each = length(reps))) + +dds = DESeqDataSetFromMatrix(countData = dataS, + colData = DataFrame(condition), + design = ~ condition) +DDS = DESeq(dds) +normDDS = counts(DDS, normalized = TRUE) ## normalization with respect to the sequencing depth +colnames(normDDS) = paste0(colnames(normDDS), "_norm") +res = results(DDS, independentFiltering = FALSE, altHypothesis = "greaterAbs") + +################################################ +################################################ +## FORMAT RESULTS ## +################################################ +################################################ + +countMatDiff = cbind(dataS, normDDS, res) ## Combine deseq results +countMatDiff + +peakFiltered = masterPeak[selectR,] +peakFiltered + +diffFinal = merge(peakFiltered, countMatDiff, by=0) +#summary(diffFinal) + +################################################ +################################################ +## OUTPUT RESULTS ## +################################################ +################################################ + +#write.csv(countMatDiff,"count_mat_diff.csv", row.names=FALSE) + +################################################ +################################################ +## R SESSION INFO ## +################################################ +################################################ + +RLogFile <- "R_sessionInfo.log" +if (file.exists(RLogFile) == FALSE) { + sink(RLogFile) + a <- sessionInfo() + print(a) + sink() +} + +################################################ +################################################ +################################################ +################################################ \ No newline at end of file diff --git a/dev/docker/deseq2_diff/Dockerfile b/dev/docker/deseq2_diff/Dockerfile new file mode 100644 index 00000000..4584c396 --- /dev/null +++ b/dev/docker/deseq2_diff/Dockerfile @@ -0,0 +1,28 @@ +# Set the base image to Ubuntu 16.04 +FROM rocker/rstudio:4.0.3 + +LABEL authors="chris.cheshire@crick.ac.uk" \ + description="Docker image containing Rstudio and a conda env for the deseq2_diff.r script" + +#Install conda +ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 +ENV PATH /opt/conda/bin:$PATH + +RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-Linux-x86_64.sh -O ~/miniconda.sh && \ + /bin/bash ~/miniconda.sh -b -p /opt/conda && \ + rm ~/miniconda.sh && \ + /opt/conda/bin/conda clean -tipsy && \ + ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ + echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \ + echo "conda activate base" >> ~/.bashrc + +ENV TINI_VERSION v0.16.1 +ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini +RUN chmod +x /usr/bin/tini + +# Update conda +RUN conda update -n base -c defaults conda + +# Install conda packages +COPY environment.yml / +RUN conda env update -f /environment.yml && conda clean -a \ No newline at end of file diff --git a/dev/docker/deseq2_diff/build.sh b/dev/docker/deseq2_diff/build.sh new file mode 100755 index 00000000..0064437c --- /dev/null +++ b/dev/docker/deseq2_diff/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker build -f Dockerfile -t luslab/cutrun-ds2-dev:latest . \ No newline at end of file diff --git a/dev/docker/deseq2_diff/environment.yml b/dev/docker/deseq2_diff/environment.yml new file mode 100644 index 00000000..f5a154da --- /dev/null +++ b/dev/docker/deseq2_diff/environment.yml @@ -0,0 +1,14 @@ +name: root +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - conda-forge::r-optparse=1.6.6 + - conda-forge::r-stringr=1.4.0 + - conda-forge::r-magrittr=2.0.1 + - bioconda::bioconductor-biocparallel=1.24.0 + - bioconda::bioconductor-genomicranges=1.42.0 + - bioconda::bioconductor-chromvar=1.12.0 + - bioconda::bioconductor-deseq2=1.30.0 + \ No newline at end of file diff --git a/dev/docker/deseq2_diff/run.sh b/dev/docker/deseq2_diff/run.sh new file mode 100755 index 00000000..8134bc68 --- /dev/null +++ b/dev/docker/deseq2_diff/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker run -it -e PASSWORD=password -p 8787:8787 -v ~/dev/repos/cutandrun:/home/rstudio luslab/cutrun-ds2-dev:latest \ No newline at end of file From 96b8a322da4086e9a0a68aa6d05e0d8c75e7b02c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Mar 2021 14:52:53 +0000 Subject: [PATCH 034/675] Config changes --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index f0e45041..8ed0be66 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -74,7 +74,7 @@ params { 'picard_markduplicates' { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".markdup" - publish_files = ['metrics.txt':'picard_metrics'] + publish_files = ['bam': 'picard_markdup', 'metrics.txt':'picard_metrics'] publish_dir = "${params.aligner}/target" } 'picard_markduplicates_samtools' { From 9391c9c3e2349f4a2d4956bb9c271c61d618d4b6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 1 Mar 2021 14:52:59 +0000 Subject: [PATCH 035/675] ignore file update --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index be162b4d..c9ed0247 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,7 @@ testing* *.pyc .local -.config \ No newline at end of file +.config +.bash_history + +R_sessionInfo.log From 6984e24ccf5936bb9d990312e36f05aaf336c992 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 1 Mar 2021 15:36:09 +0000 Subject: [PATCH 036/675] add full path of python file now that its been moved --- modules/local/process/samplesheet_check.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/process/samplesheet_check.nf b/modules/local/process/samplesheet_check.nf index 3fa26422..6fc5d05b 100644 --- a/modules/local/process/samplesheet_check.nf +++ b/modules/local/process/samplesheet_check.nf @@ -24,7 +24,7 @@ process SAMPLESHEET_CHECK { script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - check_samplesheet.py $samplesheet samplesheet.valid.csv + $baseDir/bin/python/check_samplesheet.py $samplesheet samplesheet.valid.csv """ } From 0f7c7edb46f27b408efeb3ef715a5986a9c90756 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 1 Mar 2021 21:27:55 +0000 Subject: [PATCH 037/675] add full paths for where python files have been moved to --- modules/local/process/get_software_versions.nf | 2 +- modules/local/process/igv_session.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/process/get_software_versions.nf b/modules/local/process/get_software_versions.nf index 7ad04057..73b00279 100644 --- a/modules/local/process/get_software_versions.nf +++ b/modules/local/process/get_software_versions.nf @@ -27,6 +27,6 @@ process GET_SOFTWARE_VERSIONS { """ echo $workflow.manifest.version > pipeline.version.txt echo $workflow.nextflow.version > nextflow.version.txt - scrape_software_versions.py &> software_versions_mqc.yaml + $baseDir/bin/python/scrape_software_versions.py &> software_versions_mqc.yaml """ } diff --git a/modules/local/process/igv_session.nf b/modules/local/process/igv_session.nf index fd69a2c0..1340b5aa 100644 --- a/modules/local/process/igv_session.nf +++ b/modules/local/process/igv_session.nf @@ -51,7 +51,7 @@ process IGV_SESSION { echo "$output" > exp_files.txt find -L * -iname "*.gtf" -exec echo -e {}"\\t0,48,73" \\; > gtf.igv.txt cat *.txt > igv_files.txt - igv_files_to_session.py igv_session.xml igv_files.txt $genome --path_prefix './' + $baseDir/bin/python/igv_files_to_session.py igv_session.xml igv_files.txt $genome --path_prefix './' """ } From 6368a79a8c912f9f4fa0a56d54aae0bd4863bb6c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 5 Mar 2021 11:09:19 +0000 Subject: [PATCH 038/675] Added reporting dev env --- bin/python/reporting/main.py | 1 + conf/modules.config | 3 +++ cutandrun.nf | 6 +++--- dev/docker/static_reports/Dockerfile | 8 ++++++++ dev/docker/static_reports/build.sh | 3 +++ dev/docker/static_reports/environment.yml | 15 +++++++++++++++ dev/docker/static_reports/run.sh | 6 ++++++ .../static_reports/test_data/meta_table.csv | 7 +++++++ dev/docker/static_reports/test_output/README | 1 + modules/local/process/generate_reports.nf | 15 ++++++++++----- 10 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 dev/docker/static_reports/Dockerfile create mode 100755 dev/docker/static_reports/build.sh create mode 100644 dev/docker/static_reports/environment.yml create mode 100755 dev/docker/static_reports/run.sh create mode 100644 dev/docker/static_reports/test_data/meta_table.csv create mode 100644 dev/docker/static_reports/test_output/README diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index f854e4e6..2a19e405 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -19,6 +19,7 @@ def gen_png(parsed_args): log_path = None if parsed_args.log: log_path = parsed_args.log + print(log_path) logging.basicConfig(filename=log_path, level=os.environ.get("LOGLEVEL", "INFO")) logger = logging.getLogger("gen_png") diff --git a/conf/modules.config b/conf/modules.config index 8ed0be66..875f7b46 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -134,5 +134,8 @@ params { 'export_meta' { publish_dir = "meta" } + 'generate_reports' { + publish_dir = "reports" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index fb151e1f..19c765bf 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -142,7 +142,7 @@ include { IGV_SESSION } from './modules/local/process/igv_session' include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) include { MULTIQC } from './modules/local/process/multiqc' addParams( options: multiqc_options ) include { EXPORT_META } from './modules/local/process/export_meta' addParams( options: modules['export_meta'] ) -include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: [:] ) +include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -453,9 +453,9 @@ workflow CUTANDRUN { EXPORT_META ( ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) - } - //GENERATE_REPORTS() + GENERATE_REPORTS(EXPORT_META.out.csv) + } } //////////////////////////////////////////////////// diff --git a/dev/docker/static_reports/Dockerfile b/dev/docker/static_reports/Dockerfile new file mode 100644 index 00000000..7c539990 --- /dev/null +++ b/dev/docker/static_reports/Dockerfile @@ -0,0 +1,8 @@ +FROM nfcore/base:1.12.1 +LABEL authors="chris.cheshire@crick.ac.uk" \ + description="Docker image containing all requirements for generating static reports" + +# Install conda packages +COPY ./environment.yml / +RUN conda env create -f /environment.yml && conda clean -a +ENV PATH /opt/conda/envs/reporting/bin:$PATH \ No newline at end of file diff --git a/dev/docker/static_reports/build.sh b/dev/docker/static_reports/build.sh new file mode 100755 index 00000000..34d8b974 --- /dev/null +++ b/dev/docker/static_reports/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker build -f dev/docker/static_reports/Dockerfile -t luslab/cutandrun-dev-reporting:latest dev/docker/static_reports \ No newline at end of file diff --git a/dev/docker/static_reports/environment.yml b/dev/docker/static_reports/environment.yml new file mode 100644 index 00000000..01431bcf --- /dev/null +++ b/dev/docker/static_reports/environment.yml @@ -0,0 +1,15 @@ +# conda env create -f environment.yml +name: reporting +channels: + - conda-forge + - bioconda + - defaults +dependencies: + # python version + - python=3.8.3 + + # conda packages + - numpy=1.20.* + - pandas=1.2.* + - seaborn=0.11.* + - plotly:plotly_express=0.4.* \ No newline at end of file diff --git a/dev/docker/static_reports/run.sh b/dev/docker/static_reports/run.sh new file mode 100755 index 00000000..82f97bba --- /dev/null +++ b/dev/docker/static_reports/run.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/python/reporting/main.py genimg \ +--input /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ +--output /home/repo/dev/docker/static_reports/test_output \ +--log /home/repo/dev/docker/static_reports/test_output/log.txt \ No newline at end of file diff --git a/dev/docker/static_reports/test_data/meta_table.csv b/dev/docker/static_reports/test_data/meta_table.csv new file mode 100644 index 00000000..55747f44 --- /dev/null +++ b/dev/docker/static_reports/test_data/meta_table.csv @@ -0,0 +1,7 @@ +id,group,replicate,single_end,bt2_total_reads_target,bt2_align1_target,bt2_align_gt1_target,bt2_non_aligned_target,bt2_total_aligned_target,bt2_total_reads_spikein,bt2_align1_spikein,bt2_align_gt1_spikein,bt2_non_aligned_spikein,bt2_total_aligned_spikein,scale_factor +h3k4me3_R2,h3k4me3,2,false,1725035,106331,62940,1555764,169271,1725035,4093,113,1720829,4206,2.3775558726 +h3k27me3_R2,h3k27me3,2,false,2535578,190258,181849,2163471,372107,2535578,446,15,2535117,461,21.6919739696 +h3k27me3_R1,h3k27me3,1,false,2860575,208496,170330,2481749,378826,2860575,210,10,2860355,220,45.4545454545 +h3k4me3_R1,h3k4me3,1,false,1511072,87991,32964,1390117,120955,1511072,340,7,1510725,347,28.8184438040 +igg_R1,igg,1,false,2056442,122953,125243,1808246,248196,2056442,75440,2061,1978941,77501,0.1290305932 +igg_R2,igg,2,false,1113563,62155,71755,979653,133910,1113563,40122,1160,1072281,41282,0.2422363258 diff --git a/dev/docker/static_reports/test_output/README b/dev/docker/static_reports/test_output/README new file mode 100644 index 00000000..321b7d1c --- /dev/null +++ b/dev/docker/static_reports/test_output/README @@ -0,0 +1 @@ +Test data will generate this directory \ No newline at end of file diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index 605a9311..b6ff0df1 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -4,21 +4,26 @@ params.options = [:] def options = initOptions(params.options) process GENERATE_REPORTS { - tag "$samplesheet" publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } //conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) //container "quay.io/biocontainers/python:3.8.3" - container 'quay.io/biocontainers/pybda:0.1.0--pyh5ca1d4c_0' + //container 'quay.io/biocontainers/pybda:0.1.0--pyh5ca1d4c_0' + container "luslab/cutandrun-dev-reporting:latest" + + input: + path meta_data output: - path '*.pdf' - + path '*.pdf', emit: pdf + path '*.csv', emit: csv + path '*.png', emit: png + //path '' script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - gen_pdf.py + $baseDir/bin/python/reporting/main.py genimg --input $meta_data --output . --log log.txt """ } \ No newline at end of file From 35d7193f223c0c32f68201c760100abbc89ef0fa Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 5 Mar 2021 11:10:00 +0000 Subject: [PATCH 039/675] Ignoring generated test output --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index c9ed0247..23db1a42 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,9 @@ testing* .bash_history R_sessionInfo.log + +dev/docker/static_reports/test_output/alignment_summary.csv + +dev/docker/static_reports/test_output/alignment_summary.png + +dev/docker/static_reports/test_output/report.pdf From ae312c6db565905e55bf437da7b1bf52eae949a4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 8 Mar 2021 11:52:18 +0000 Subject: [PATCH 040/675] Logging now working --- .gitignore | 2 ++ bin/python/reporting/main.py | 40 ++++++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 23db1a42..a3ce8e1d 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ dev/docker/static_reports/test_output/alignment_summary.csv dev/docker/static_reports/test_output/alignment_summary.png dev/docker/static_reports/test_output/report.pdf + +dev/docker/static_reports/test_output/log.txt diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index 2a19e405..c5007eb9 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -12,28 +12,36 @@ from lib.figures import Figures +def init_logger(app_name, log_file = None): + logger = logging.getLogger(app_name) + logger.setLevel(logging.DEBUG) + formatter = logging.Formatter('%(asctime)s:%(name)s:%(levelname)s - %(message)s') + + if log_file: + fh = logging.FileHandler(log_file) + fh.setLevel(logging.DEBUG) + fh.setFormatter(formatter) + logger.addHandler(fh) + + ch = logging.StreamHandler() + ch.setLevel(logging.INFO) + ch.setFormatter(formatter) + logger.addHandler(ch) + + return logger + def gen_png(parsed_args): input_path = parsed_args.input output_path = parsed_args.output + logger = init_logger('gen_img', parsed_args.log) - log_path = None - if parsed_args.log: - log_path = parsed_args.log - print(log_path) - - logging.basicConfig(filename=log_path, level=os.environ.get("LOGLEVEL", "INFO")) - logger = logging.getLogger("gen_png") logger.info('Generating plots to output folder') - fig = Figures(logger, input_path) fig.gen_plots_to_folder(output_path) + logger.info('Completed') -if __name__ == '__main__': - logging.basicConfig(level=os.environ.get("LOGLEVEL", "INFO")) - logger = logging.getLogger("app") - logger.info(sys.executable) - +if __name__ == '__main__': # Create command args parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(help='sub-command help') @@ -47,4 +55,10 @@ def gen_png(parsed_args): # Parse parsed_args = parser.parse_args() + + # Init logging + logger = init_logger('reporting', parsed_args.log) + logger.info("Reporting app") + + # Call functions parsed_args.func(parsed_args) \ No newline at end of file From aaad92a95bae6041ba5a940ca785697a1158c4d1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 10 Mar 2021 15:23:41 +0000 Subject: [PATCH 041/675] Added piccard metrics meta data parsing --- conf/modules.config | 7 +++ cutandrun.nf | 11 +++- modules/local/process/awk.nf | 7 ++- modules/local/process/awk_script.nf | 34 +++++++++++ modules/local/process/process_file.nf | 30 ++++++++++ modules/local/subworkflow/annotate_meta.nf | 40 ------------- .../local/subworkflow/annotate_meta_awk.nf | 60 +++++++++++++++++++ 7 files changed, 143 insertions(+), 46 deletions(-) create mode 100644 modules/local/process/awk_script.nf create mode 100644 modules/local/process/process_file.nf delete mode 100644 modules/local/subworkflow/annotate_meta.nf create mode 100644 modules/local/subworkflow/annotate_meta_awk.nf diff --git a/conf/modules.config b/conf/modules.config index 875f7b46..578b6cce 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -131,6 +131,13 @@ params { args = "" publish_dir = "multiqc" } + 'awk_dedup' { + args = "" + suffix = ".dedup" + publish_dir = "awk/picard" + command = "'/^[^#]/{print}'" + command2 = "| head -2 | sed 's/\\t/,/g' - | sed 's/.*/\\L&/g' -" + } 'export_meta' { publish_dir = "meta" } diff --git a/cutandrun.nf b/cutandrun.nf index 19c765bf..c9f6d47e 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -56,6 +56,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi /* -- ASSETS -- */ //////////////////////////////////////////////////// +ch_dummy_file = file("dummy/file", checkIfExists: false) ch_bt2_to_csv_awk = file("$projectDir/assets/awk/bt2_report_to_csv.awk", checkIfExists: true) //////////////////////////////////////////////////// @@ -125,6 +126,7 @@ if(params.dedup_target_reads) { dedup_control_only = false } // Meta annotation def awk_bt2_options = modules['awk_bt2'] def awk_bt2_spikein_options = modules['awk_bt2_spikein'] +def awk_dedup_options = modules['awk_dedup'] //////////////////////////////////////////////////// /* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ @@ -157,8 +159,9 @@ include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' add samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) -include { ANNOTATE_META as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_options, meta_suffix: '_target') -include { ANNOTATE_META as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein') +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -450,8 +453,10 @@ workflow CUTANDRUN { * MODULE: Reporting */ if (!params.skip_reporting) { + ANNOTATE_DEDUP_META(ch_samtools_bam_scale, ch_markduplicates_multiqc, ch_dummy_file.collect()) + EXPORT_META ( - ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) GENERATE_REPORTS(EXPORT_META.out.csv) diff --git a/modules/local/process/awk.nf b/modules/local/process/awk.nf index 96794513..529744d7 100644 --- a/modules/local/process/awk.nf +++ b/modules/local/process/awk.nf @@ -1,7 +1,9 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +def options = initOptions(params.options) +options.command = params.options.command ?: '' +options.command2 = params.options.command2 ?: '' process AWK { tag "$meta.id" @@ -18,7 +20,6 @@ process AWK { input: tuple val(meta), path(input) - path script output: tuple val(meta), path("*.awk.txt"), emit: file @@ -28,7 +29,7 @@ process AWK { def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" """ - awk $options.args -f $script $input > ${prefix}.awk.txt + awk $options.args $options.command $input $options.command2 > ${prefix}.awk.txt echo \$(awk --version 2>&1) | sed 's/^.*version //;' > ${software}.version.txt """ } diff --git a/modules/local/process/awk_script.nf b/modules/local/process/awk_script.nf new file mode 100644 index 00000000..4bbba947 --- /dev/null +++ b/modules/local/process/awk_script.nf @@ -0,0 +1,34 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process AWK_SCRIPT { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? null : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), path(input) + path script + + output: + tuple val(meta), path("*.awk.txt"), emit: file + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + awk $options.args -f $script $input > ${prefix}.awk.txt + echo \$(awk --version 2>&1) | sed 's/^.*version //;' > ${software}.version.txt + """ +} diff --git a/modules/local/process/process_file.nf b/modules/local/process/process_file.nf new file mode 100644 index 00000000..5b9de5e2 --- /dev/null +++ b/modules/local/process/process_file.nf @@ -0,0 +1,30 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process PROCESS_FILE { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? null : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.output.txt"), emit: file + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + $options.command > ${prefix}.output.txt + """ +} \ No newline at end of file diff --git a/modules/local/subworkflow/annotate_meta.nf b/modules/local/subworkflow/annotate_meta.nf deleted file mode 100644 index ea39d91f..00000000 --- a/modules/local/subworkflow/annotate_meta.nf +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Annotate the pipeline meta data with the columns from a csv file - generated from processing a report text file with an awk script - */ - -params.options = [:] -params.meta_suffix = '_test' - -include { AWK } from '../process/awk' addParams( options: params.options ) - -workflow ANNOTATE_META { - take: input - take: report - take: script - main: - - main: - // Strip sample id and paths only from input - ch_paths = input.map { row -> [row[0].id, row[1..-1]].flatten() } - - // Create csv file from the report channel using the awk script - AWK ( report, script ) - - // Annotate the input meta data with the csv values generated from - // the awk script - AWK.out.file - .splitCsv(header:true) - .map { row -> - new_meta = [:] - row[1].each{ k, v -> new_meta.put(k + params.meta_suffix, v) } - [row[0], new_meta] - } - .map { row -> [ row[0].id, row[0] << row[1] ] } - .join ( ch_paths ) - .map { row -> row[1..-1] } - .set { ch_annotated_meta } - - emit: - output = ch_annotated_meta // channel: [ val(meta), [ input ] ] -} diff --git a/modules/local/subworkflow/annotate_meta_awk.nf b/modules/local/subworkflow/annotate_meta_awk.nf new file mode 100644 index 00000000..4e9b8c48 --- /dev/null +++ b/modules/local/subworkflow/annotate_meta_awk.nf @@ -0,0 +1,60 @@ +/* + * Annotate the pipeline meta data with the columns from a csv file + generated from processing a report text file with an awk script + + TODO: input is a passthrough + */ + +params.options = [:] +params.meta_suffix = '' +params.meta_prefix = '' +params.script_mode = false + +include { AWK_SCRIPT } from '../process/awk_script' addParams( options: params.options ) +include { AWK } from '../process/awk' addParams( options: params.options ) + +workflow ANNOTATE_META_AWK { + take: passthrough + take: report + take: script + main: + + main: + // Strip sample id and paths only from input + ch_paths = passthrough.map { row -> [row[0].id, row[1..-1]].flatten() } + + ch_annotated_meta = Channel.empty() + if(params.script_mode) { + AWK_SCRIPT ( report, script ) + + AWK_SCRIPT.out.file + .splitCsv(header:true) + .map { row -> + new_meta = [:] + row[1].each{ k, v -> new_meta.put(params.meta_prefix + k + params.meta_suffix, v) } + [row[0], new_meta] + } + .map { row -> [ row[0].id, row[0] << row[1] ] } + .join ( ch_paths ) + .map { row -> row[1..-1] } + .set { ch_annotated_meta } + } + else { + AWK ( report ) + + AWK.out.file + .splitCsv(header:true) + .map { row -> + new_meta = [:] + row[1].each{ k, v -> new_meta.put(params.meta_prefix + k + params.meta_suffix, v) } + [row[0], new_meta] + } + .map { row -> [ row[0].id, row[0] << row[1] ] } + .join ( ch_paths ) + .map { row -> row[1..-1] } + .set { ch_annotated_meta } + } + + emit: + output = ch_annotated_meta // channel: [ val(annotated_meta), [ passthrough ] ] +} From b7c74592568fe70ca4d489926c761589d13be072 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 16 Mar 2021 10:49:12 +0000 Subject: [PATCH 042/675] ignore updates --- .gitignore | 4 +--- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes docs/images/mqc_fastqc_counts.png | Bin 33918 -> 0 bytes docs/images/mqc_fastqc_quality.png | Bin 55769 -> 0 bytes docs/images/nf-core-cutandrun_logo.png | Bin 18230 -> 0 bytes 5 files changed, 1 insertion(+), 3 deletions(-) delete mode 100755 docs/images/mqc_fastqc_adapter.png delete mode 100755 docs/images/mqc_fastqc_counts.png delete mode 100755 docs/images/mqc_fastqc_quality.png delete mode 100644 docs/images/nf-core-cutandrun_logo.png diff --git a/.gitignore b/.gitignore index a3ce8e1d..603091a3 100644 --- a/.gitignore +++ b/.gitignore @@ -15,9 +15,7 @@ testing* R_sessionInfo.log dev/docker/static_reports/test_output/alignment_summary.csv - dev/docker/static_reports/test_output/alignment_summary.png - dev/docker/static_reports/test_output/report.pdf - dev/docker/static_reports/test_output/log.txt +dev/docker/static_reports/test_output/duplication_summary.csv diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 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 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56ab2ba88cab87841916eb680a816deae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55769 zcmeFZRal$t)-Fn+z*nS{Vx>rm6qiDAOL2F1cMtAuDNvx0;#Q!zyE_zjcbDMqmSlzR zn{)pEI@tSUUwdu2)&Y>bJb7fuJ?=5a1EER^lGqq;F_4guu%)HMRFIHRN0E?_z5hZ+ zJaJ}X&O!Wm=At4gf>b&}x`%l4+)`Lx7zwEYjQMDcig^FRNlM!V3F)=#)7P^V3xFpQ z(!7JTn6R3s!6EcTteK|QPPjx@DDOv5T2*CXB}Z%z@|SP-DsObzPh`FaVcdV&m0)j; zcZ>LN@}*RhsyUw6to^1IV&KrBgSL*D84<+V=b92tLUGmkCzrla{Dr!*h^X~IGAQjM zyD9lfz=>mTe@ql{QdCq_QdAt=(BA&2YBUsY=dfzD{{p(Xxaz)h;YCF8?Ul%1e}5}@ zO@0yZuh)nND%kn8|Na%lH#NLM=KqYOnC|MbCw}whr}=*yP7H-Y`-r9qwQ2rq9Dz|0 zBdN65Kl4A$DgS>m=QkV7|7=EzGh^Yu&HaDh$NCi3wnS$c$@$FVUp#HFss7?l0LJ~{ z!`SL7tNPPP=8^Kq8)3(i@(qbit!IaRj$Duu3h(VXaI4Sdu3~_@H&ak|A1shtFJP;$ z&Ff|ziaT$FS{aiU@Te#m;Cp!+I*IbJ@XxAqIeeeH<$>FQ&-YdyTH@a_&X?%>7*prF zp2!e%;=M(CLssc(k6U1h(+Z6N7fk4b1$pU zx+k}@k}uu*?&UWT+g}Y#gV?3_XQkIe!hs%Suq9Q))|Tlh`Wr-J#)v6)bNt9IQZ-?zd%Hw*=ZrCzD^f-D3r^0KBi$+ip$`A6Mk<3rtrZFNxAf zKk90T99Gb#t7ndaGJ(*jcpaOR-2zFV|0MH`0H4>cX|8kH-A>yB@PzO5QPgAAeG<9~ z(7IdVikhJ^RFhx&6*~Cd*30U>;FKs>ES%nYuI$%8RM=1({ChUX}X7!Wu zAA=&In$O5ezi+pM8LtJ8`oW`oa28+E!&*f>9{W97;k4XXkIS^H4+UAGvZx7D{UOIK zH$}ZEkpj2NC%)GxA>My-R{)`xdTyO1fcg{J)!T^@lJhkw=vrQzj&$^Qa(I7Cu2xl- zg5af(2k=sEQGeBmBNF1c9B_MFCIG7eR|`T^)>Jws({-d$>S9rNoIs$o1qKW1U(s7gPai5(qrX(&Um zwy;AI@AZ}{%d9#&PBP>zwc8=%jgWWGH2jQp`DWYPw4k^T`^Nvelzg_m4tOygvshAx zSic)*_56B2$iwR{sdtKA-$NW8Cffewvz4#abf1JwCg*y2X*Lu~6edkmydt&um&!Yh;0Fgz!I z8S zXW#cIlDgIR7Kgd*mV>IL1+VdR*KujmVe6Bnrwi2`nyj5h(N`umHB#h26X zt}BBFa)TAfq5C^R?mPC5nk4!GljuO$+PG#|*B4a_2>^!?m-qb{I`I10^!40&Ah?Xo z5pt;rAZdrM_}>Q86li@(J8)D#f?(9Br`@U}FA1>Jx%%}~}bmH|q8K|Y!jaNAu?dYM~6 zRZJc^eBV;Y!Mnx?kn&2<<#2q|Pp)+P>ZBPmqA2KkX?Et2s&9LqBzZimIWVsmGYatA zRXt~RY=fjB;A5x~rSrZ2e#S!_7>vCGqC{9lj*|V8LTb}g!H@mpp{+Rn_v>x&(6H+J z7}nKf@B4Ld%Z-a7|M0=og<;D>XSx@Y&lV$4Ekin}o2SXK^<>^M{r+%K-I&?XE$nJSn(xJK4qrH|bnqfPU>4jm=e=x!oc#?Jke&g(g- zUucQtw<$SVY?d~P}!t-c2Lo8mx6d`@70 zvP5TBSUX%%C7-WOwciMN4WbKqP5B%ow3f{Z-jx6kgNKYV|^tpbL^<*qZ-A^30n?FBY*Hn_q~jp%0Mg-<>UCF!!;rL{!Y{b z*3Cv>f1?;licgf`G`bG-zLl-3R|wc#Q538g0z$S#C86oCbHSjNy?ANChiOIVH2rMI zG5nGlT3Axtm$CYA3AoOV^jpuMy|ROZ?T(T^1UI_*!$t2I@DM>^@!2%tQ*2Px;zGGh z02fo5-BK-N3cz|cST76mXYkO_egPK}#MwY7cUixalk{5k7n=LGIBj3hTJKhyeXzl~ zGo3fkBcT7$3Q6oSx65M@pbZ+YC;(b=HY>1%!!mZp6Fqznq0rpI#0pXZU|dVnIlk9-%u>~`h}VhYjz zmPod{6t5ndj-zKD=!WOo(!>9dq!*2ld8_8dca!LG1x9m|yPCUXkoxbbV)V`B^QlP* z2QLUMxOI2m3%(x6c>7K);Oa-%C(!K#N~N9Ef%3qRq9J)~x4KpV>itdW?%7A43LDIa z8X^^jrZk!ojDyDSMXww70zLApJntoe%=xcBD#D>RDy64nfaU_M6Z)d7V4v3O7+UfM zI23&xL2-PqOi$oj<6nQBorePGYWBHH+x}3PF;m>1({p~`Te}(*tYP8JcKw|ZaIa3W z5|KeaW+a1}*~V9jOh9(L$~YKYYcNd}*`l$FOU6yA(HR-(cSZ&9*~&v1R}oErionDF zkmE|SIb~(H=VJ$DZ4b&-CQ)fO@a_a4)*zSnmv493+6k&S(%z0p_QJ>psX^O_V9lhrb>BAr9 z#!w93wGILaXkvaRP39@H;n)|GB8ih{1e-l>kB{FBn1qGHL%+#NzbvY3$Xf&5Ir5z2 zPG9!I*3-qPiSN%$8O#PHBV)1VD}P1)O~7Dhj2?72@pBcduzphsN8H)`k=p3Wh%;_$ zOeXLMp7o@Qaw@rwstN}`?{)X08s5C`DQlRw*eDrX7{@P}7d8#NUz6uvKJSkcQF?Ne z6pViyWiT|=e=Doa?LjcWpUG)555Bnx)chgcgWJ97&2EQZf!xal z)p2nI02nbGF^RF>u>$hlk&33=WQ-^JoI>Si0u8 zV07Zbz#>r^qAXD{lBu!00RKml^p=Cv64=~UMF`M+kogAK za9tvbFb_5Czmu~*!Wcf7X4}nlOhFn>z@2UYs5e8zXiDYQ=Ox))S3>&zy2o(u2h5!JvYvSsLq$lAJ%%c;J%Lb@e5mEkCW z?eZ|Dux0i&Si?wGLD+e^#G`KKbCx{u6gsr?6jUM?pE*3wAGiPuHc1MIvY4|WVosn|)%172v_ zuJ9qyLTdW=-$|n#8!G@V$$7Z3oifYzxs!m`vv;S}RV*&e|L#YrvkJalcR(jP&|ivp zdX?VXKmoSP&tSH<4&P*Xc=vJz77}8-1B8!d0cW#BxWLd8o=iJfUfU`0+(QVsx$4{8 zM%dD+!cq1`U^-K(q~!|)T~eLAZia5FB+I+)`mCM=ATeKEa>FyeeU0P0N(2$?H5_a% z1c?1K;t}s!d86fx%Dsml&FIN>)%>u!tJSay-_BD*KV3b8rOY0MRDF}8&W3rMO8Cvd zq4No{`UQOiAyeW&=;8TZg&{D6<%2^Z z!|qE6iY8+BPguq9y#O>n~H+h-giBAsF%%~f&;2z zHSJ9+elB|j$&@GebI=dtreMMQ&ghri{%!G?7SS%=%2G0KqHH#RkD(za3ny=Hi$(=p zLGvS3B|d!WGOoC}J8#If=~Y0uQMxBB0Dao47Ri8W79ysyRyY66Fcmx+Tm-DB zhy25cx=95+#qc?ToUlOnSSf2{HM2o=*VzYQSjU+-RrVoQq-g{FF4Zg zE~D2d*8doXY~?Q)$%+d%R^R5T*Ja|j(efj$qMbfNU$|`D4f(?#^kdi{t)k*vJRUdL zlxcwb4m#}66CTp`2n9CPSQhv#x;!Mn5l~6yO6GGaT9+UCvj-#Cg^PfUgy(9?6bFXL zpNb`ZMW&HB#=RloUUl{4T*WAYN0#{>9S=giO>#Fy+5dV^K*r~FnE~_`y9;cG`R|Z< zoOm=C`0i!|j9q)!?A~%82Uz7BM!4{L-9s2&lDz;lp6G%f*Hh2|EjuF*ZTdWkb~fij z6_P^E5528|&KH1y9o-vpP$5xCn_I}+iK{MC;6&BY+8Fs=m!-n;b%SD?b{UHjMD=vl z=|HehRp36=l!l{Nb=j)%E)c-p>$yu+7f<0NCv?~F0Cqtaf)`7bVV&u>BhZse9N&i(A3$x{)K4e9C)`q;|M{`52%Ol-Fg#F@RhIVC{{nI!7gqddBASWD!btp-(BBw zy3b`l5s_nR2<)6q^Y+vd*eWbZ{zSIO{;S}l*pU8|lJn$|PvBuKUqx7+=-R09e`&ej zfx{|HP3Z%AGj5jsR!`dCO19@yQ~>yvW;*!(X7#4zWHpB}1(BEfJf?t!{10!5-z-JJ zQX-eGqE>l9_7%!}cZXT{YORv&H@6?!P^VBI%uu6V6=U2bfK z-nUhXzIRgAtSRD^1sRqBr@J>`*yP8cp7G0o-9a4q`1%ZFqkHR25(W(nc!>F8Rev?+ z2p#E#0X>$-*t{U__3WWm|LRC(^ku5R)_I#q+`)twhDXu$zH2tK)}SV;F#zE0@2 zg?0JR?v@D90Hrb{11&%10Dztc$r&o2>~^QX>Hg!vk;( z#!o$oW+d2aJ3E!HTRLmi#ku04&fiTkl>~TQ=DSMO6nU&V@0^f&T|`G#xX*^A`Jd~q zJ}%Ne)$q(Ccl0IwAN0|Wt_{zb<)PfG{R#-xbxpIXTB^TSg|zin6u zSh5q{v1O+fzBxjo@#?QW1SARF$04v2_)CFv*=aWK_yOuc#x(QJ=Ett;&FUqs;sfxq zCIB|&O^N=5HrZJJV02Sr(xjsQLk19jeTIiI@V|PQ~{$B-zwT*x3pGviT$60%8 zCF!>divF-$D){m87X$&aRcy6G_WdbycC+L(o9?%>1B5-W24q|AHU&J)RiTV0+o^D# zT@WW6EHpXfOd)pp&5q{s?`;3C`S)0Y*FJT?+vbC9;6s04-B?QK(}F_(bAgv9`a9z3 z6M28iWc~@r|2+7AU-9?vZT>GSHUD2*%^6Xwe{?i5`rX!MSZEWDhZAtQj+cwo7%6a? zSLc=zv`#AoZy(3i_dRGaga;nDKI!IPS|BN(j!XSr`)E`qYOKB0Wf*X2oba7V#{I5) zk=%1laIo%)G5j-l9>dPfyf>2it=GmbYZG{h1;(^o*K*Rh-V5gQHTu_th|#qnsfD#z z@N=S0eaEKKL8ivW8}}v!0nvu1qUJx#E)FXw=}JTjohk=?^dIb7E2n>IU)7z^yXKN5>F_agCUG}=!;#J&CZeBX*c`T6-#zh=YC zndemokzv74zo3(!G~OKC6xP?%!8h!~ZNg_vh8nM8JRn4`F)hCQXDep(R~_D}48xI{ zy4B6+;dRhGlsf5MLde2Kp_-kt&0xj4>3R zhquhEz2pj?@1^q#2>W9fj)Lo|e>Qu;f1NoyY^u>Q{MwRUOwH>_4=8z=h;cgr9=^=* z?xGoVzo&BQKig6XySlGE%#IRELH|3M`R8%$1||7_>z7ob{BH;Pi(>l!kOxD5aw~vz80WD^z{{}CSKKBaMsdz*X zg6)>mlPEl1p-B3iKpQu{PzB-uPdhWO{u5Cs7TY70bf2c^q^bito#+l%nrww;wH*q9 z9^AY$9%^s&xgT$p@9X{}TC>IZXEuYUIBot@Zd+L=dt8Ib>xM9s`UCq}w*sdfH-c>$0J>4`lZ*J!KJWf!Y{KJ18 zO*eu+eRMMb1qB7s`&Lme!UCS%p^vnj9Q2HvZ-t@@!T%j}87W(a>}+UdXigJcB$4Fw!o$e+tk>*3^i~SJOF4C(3^hQo`+k zUHc7b-*l>D~O}$@DWtwNsB+WB=I-1wY3B z)aL(26^f6bcMLQ!gU#$v8OoT`dO;}%ZkQ@+oL)F*{Gtk~zA0_h*@O(Wo!zyFkK)04I`B2uMsXC_I zU!z7c!RhYhJk8D~`gE!0=iP>pQ1&?a zB!)_?vR+2ekCH#{3X(;%F)T=$KuNw;e-z^P__rCKy7~zHo4Nd6PA>hsiCK;Rkg$~!x* z1oZ}mhF_&o*#{n_Gl6O4`E5MaZ`8*?L(y-2KH65;x&P}1M}c~Nt(r)Z&EUbuGWgb` zq7h*-WJ2sQ%Gao%mg#yU&%gCFZGLyHw3wSiqxS1=ra7 zhfVM<(E_q=xL(ERoMH|F6v6KtK8Lk~#`=qi2h8)gZN zpyUxJ+PA&F!GFW~&t>#~6y)_7(HpW8GA#0Jj)JnO8cp|o$d$>=w7`eLBf~3W4w@?I z3W{(h>8dd`6ru&FGa6{(H&J8WF#<6i9@Pa!~XE?j?N_|er(s~ zoQnPL+2qvYPfp!VWX_=|XJ`LT_K`)B)Hpg6`5Jj1h*XuWGaakV^^5GAL8 z1<+W`_)7+Y9;rgWz7UMAb3^H0$qF~P}9YX$|(l68N)eOTs+-Qe#c_pox#H>9Hd=PVCb?037 zc_zYv+uwJQsXssy&e|r6osX(3gtZO%F+;}1ED_{DN(OKVGEW(OEgOHy`z;Y7edqUg zys_WA|GWh3p==edvj;U(>@0s)K za$RXeodzH`gT9(d)4eY`^}kKtGx+twpn!(!VK&>E+`yXpuh(v|Wpi(xTH=d7h;v5M zR!OVLI0!YPL@|EdV)~92GWb13R$pt`GEOT?Qb3x8FL#*Qs?^3PjDp30bwiH;|K&TnmI{XS_VTuIA^Xnk) zsnw>~BEwGBj$xwjGp_8r=GxpTbLY>4v$JC!E~~?Hz8N?^Ndu^6cq%-o7f>+JKkXTPIu#nTp1%Bf8oJEn+~#k zN$lGfo=h(}gTm<=NmRx#HWubhurWa9!z_j0mirhQKozcX)o-MCKS+U+)JmbYr=O&@ zqxm_+j`#c2m5$2FzBZCB1j*|si#Xvy3^!Fg04#vUxMh?he_JB87X1Pu^@Js}Al%lvRC}tTS?07wM`*eC|2fyacbu0nu1^PZ>k4AuS6p2pa8h}3!lXb z7r_gjW1#8@siJi4P7|_X)OLVfrXKQ1D=O4MjItz#=B=8o?40SD-1vq-P6EOgSr>U~Z9S?C>u(HvJCbLw4qC ztop8mY8GXcZ~_~n((s%NJy11JVUEbad`sQH;>i#eZ%GutbswFi`1%Pt)KH$zcr%DNDbV>DfG#DbOi8HOuFJpN&gT2;Iw>eOv}O#o z4R?4w{O&%K5Vb8@eB}{yeS>?T6RABQWkJM`{;QZIfGnGhyGq@IV*-6knvpw|-p9>L z8_Al3s`00QS`2aOB3S!KJ6PoClJHk*^e<9Ad|2h$i@?&-W7MU;?%kal^yz-r<+G^1 z3ePEaFu4kt4B8S>_b4Tog*3~bz8YIp2aKD9eM`&~kMoKBWiRy9>3*ex{3JikcJ}Fb z%F|>X-1Il#2ykyN?PknmKS5VQ>R)oG6|@i!HKt@e_*{`e6InENts%!y^}F{k;`8W< zOrqN3znhy>Y9D=`Y^b~%VAL%YTfa)04G_FL@T75=u?EDHHkKYcahGyN8oqe$#fkN- zL8ZX;gEHG~1>0NUj1-Y$rY3Fo=O%*5W=W@_?&iwRXu`HWXo{>Xyp@Hhxe!iZ?z&aD z4#nffwZ_Qzzrns#X;7I)Zjo{zoMhLa+xqy$Lg_DE<4d}V4`)a2&!Cd8UrIb`$7hQ~ z=rk3pL_>uShe-#nDQLLow4nimpL(^LXX95){J{Vs+#}lAx7hhMZKMAmM z@F@}Uj3|<`r$;{V-DHE@vA-qpGrh)EZ5nLHWL(KsXXqLi6M2tSeldQ*-*^A#+2(TN zh$e0D&p8p<0o2}CZ?Hhg*9_EEM8poNPOG1Aa2MN4ah2O+F;TTtw>uGr!H)Gh>J2rH zXFLlZh85r9yE4=+UxGnHePi3;6^A7(&UUa7E_@yVU?4Y_-Fl<@d%Quv-C`T%DQ|3``&(L^MPUn-q&sCZ zIsW1CvgOQcUB>3?@6N76^$4n~f@AH|@$r9Ikk}0E6n$%+>4bIhw}NC?o0k^zHGQCq zxp%a2gBW2V&eD+hK-KcNgv_rD{9j9$3M3nTudV&qOyVhqdTQ*bNTlgAZR#YREPi=I zfkqQU1+uZ!r~ zapTZw$fVK7r9vJg-B@Ml62+w5DO-4xdbOHw%~CT+&0R2hKK6+*aN;}#xCcXC8`-rj z#;6lm-Bt>#;*zI)V_WakvCNkFRBe|M;i6nIt8_Sqf)GD$y4Ebet;_EQ-h36+-}Hwi z*G}Fgdp~G<3==(#xp-|EIBy&Mupf-xtXVY1eM0f9a^eqffibJ*| zFeh(6S1byR5ldEw}h82UX3!s5W0g3eUd%q+f2x+?Q9?AJ$OF(NzRM^O0ul)+F&srRw4rpP9NNM zC+6g5Exi}AgJU;t`_6WH(mrCoZ3b*c%ri})d9Ihd2^NoS7gwNk za5jd{cQ*6X&O$wBl|Mpu%G zfG|V3AiCEMp;(0hIdu;xI$DRF-Q+5CzoEklgGPL8%wa`qXo-C(ae{e2;oprIn(;Y@Rg$=FML#BVB8#k+Rsl+tItuyeq~L*%@f2v&d2@{8TD zM4U=vKs?;y0D1T4AlMAjt@pZ4y~b5b@2%c%N=e{S-}#nshr*)&pdIT`hWpYx&!zQe zjQd!}?*!y1TmKrsOhSFkV0&vQpSUeJ3^??Yn_vhJE!C@OqdrT8p(8U?oK zh4%j8J@{vmM&n5g*a{t_Z9=H#&%@^O?8k?dY_{BgDp+AGs7eel>=}gdqYj%0RVi$( zsT+LAc6Q%axVf$PzQhzC+57B3hfK@;tUU~41cfVo{!Kj}NUffe)J3ZeQ!*z(w z>Yf&dPaI1$fq6}(4-q#NuR(Tjuk+8QT?>!Z%}?WO-j#B?w@`gzPQ`$y$X_?XzFGTR zq4hP-)!S%(Z9A9kK-iSIk7=8q-+i=TuFWi-ym*_>eUoPt=U@$W&Du0xolIbxFcuds z4|Sb9PnETL$71WkID^fx}bZ->Qs>AzZ!# z)c%0bGRnt2(({R^w`7S zQ7`JPVihS~JElzLcg&Jdd}{iZFO;O*+4PfZg117qLHd0iCL@#g)Gf`g%DXKUr@=Yy zaQwqceMb;fi5;K|T|B z`ANT$P7xM#`E`EtzTje-z>i*~rOcq&w0y=+5+UNB=7_ZR+xavh$!gMiy9+D2V)I5) zXmTO4S339dDqho((|)vpY7L~`^o1fNL?K(C>SAW7+0tP}5O6WnD~RdrArPuwYBrFn z0t9YDTYbmUanM0m#&K`|H1tT-76<{b^1V|*ZWLDqsJ;U0k+kIi?txp3rqAApczcKB zo-dSweIHV#%4W#2=aTn${B1Sv+UK<<0kN}qKR$ZB4bCuBx0k6_9x~vVoKV+ z&(}WQ=Jfd5nXXxN3SCvQlpXd}JoI-|b2eC!WgJd}PGeu$0!A_7d^#zIInYxi2_?*Ae@&^G z$PDnH`PPs*7BM*M79tWQTA8;<+CjnjahNS z)TAw}dr@;mwFV9luiSC7%1XKG3xtoE5sB2~ygqfPHmK?D`3S&-UbuAZDCpu%&f(5$ zZ=tm6>C+h!4NRlD7~_9!xK|Rw7kh7$EdN8&O|Q*;*ZCaD z4jJd=S~Xv{DiBm!zi9n!b0}i$`%OoeZgb9z_M07f<{%w$=I`(F7_&6GM`$zITB8MB8N6Ln8`vU|&v^H% zzlI7CK3Iehb#r8caRv?DU*F)1A3F@2*T^{A{zQd`>S=|uUQsZ&KA$%6(}JuU$Osz{88r^rp+Wi2e{`0T9QV1?p4 za~L#5T~1-Vhe|5^Tiu~ICc2J`73V*Tefm#B~4=bveHUwyMjMBL|;cX%8)=8 zoFo#i&)!T+)w-21=sR3;km9s1*flcnP%RDC*F=Tm+O94aEg_pD%leF8vta2*Az+P5 zADCIRacf?WQ5yN&B7R1q%5=w5DPM1NI*8FkNSjOkOD-biO1n=>Yb5tgEnr6RP3U8p z5Y3K}dS=;@c)-P$KCeSaK>{xIyvtA`@hFg}FUHmS*FTS48)2aw_y`Ge$ znPdOp^4YsOOpB;eHiXpO*`L}sIyT{J3b~>{{`Hm*>q&-6fwqLN*}Hm*SJZr0npYDr z?=PMOu;BO2GP-?w@jR;0&XjsqFWugHNL(Ya_7gUH7>j4_c5%P9E#H1=OZjV-#{l0u_)~I>-0fUVyiYkdf9XWUa zM1Xd3e6i;hJ1jx+30m4J7u2Est`0T%J8*(f$K%%KjgCZsHvMO3bvqCnPh3H|?xQma z4rSbdWu=z(`9a-Vy*y?Xf&ekh=h1@{dte9L4d-_~uQ60YMb*`Oc8Afv+%Yp?VF6=U zBVxaZSM8}7nHB{T5Ec5;B(df4+%q?_-G3OE5S=3EkUl8VV4L_ckv;LF(c9jrKJ0u# zcUAY~BU|YBk+VVlfiscRFj_~_Mj8R6yWmfL^BTYEytrmUr|}&luY{yq2gBhj`^c5Z z^S(cSkrU0?2?&(}>)0c{^rSVWrQMSY%$yc?UR!hrcSNmq+0&B!svJ0?5C~GA8}c>6 zj3N{*t4OCfKpu_^evK+tV7fprL3p;sL9(|iBI7Pia)v6MwpCc}&x=Mz?g403Xl<e;viOll%5G z0F13z2bFa2Hzg%Djq*8s(f={4DAR z_VYbC*mT3k8^YwXI%jshm2GBx>{5ieUdx1_gq9OvdT$5b@dmgLq=((RU{ZK6<-f+T zm}DK>i(S6*_7hf2xOTX|1-7HO4%Lop@E&^79{! z@9zg?%&B$Nbb{u$4&`iUl7ECne{W^Zt*<`qAxIkdiPu5@9OKNSobC�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s diff --git a/docs/images/nf-core-cutandrun_logo.png b/docs/images/nf-core-cutandrun_logo.png deleted file mode 100644 index 8d24fe55dc35f9f835b765b9c7e4999e5ead67c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18230 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 Krd-N6@c#klED!(y From dfc415d86e085a7ead859b47e53ee6a4c8cc0ceb Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 16 Mar 2021 10:49:35 +0000 Subject: [PATCH 043/675] updated ignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 603091a3..2a6de161 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ dev/docker/static_reports/test_output/alignment_summary.png dev/docker/static_reports/test_output/report.pdf dev/docker/static_reports/test_output/log.txt dev/docker/static_reports/test_output/duplication_summary.csv + +dev/docker/static_reports/test_output/duplication_summary.png From 4b19981e49a872695b8bf78e5777b3f9f4e87265 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 16 Mar 2021 10:49:48 +0000 Subject: [PATCH 044/675] Improved annotate meta --- modules/local/subworkflow/annotate_meta_awk.nf | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/modules/local/subworkflow/annotate_meta_awk.nf b/modules/local/subworkflow/annotate_meta_awk.nf index 4e9b8c48..5c92f97c 100644 --- a/modules/local/subworkflow/annotate_meta_awk.nf +++ b/modules/local/subworkflow/annotate_meta_awk.nf @@ -2,7 +2,7 @@ * Annotate the pipeline meta data with the columns from a csv file generated from processing a report text file with an awk script - TODO: input is a passthrough + TODO: input is a passthrough and that is the thing that is annotated */ params.options = [:] @@ -20,8 +20,8 @@ workflow ANNOTATE_META_AWK { main: main: - // Strip sample id and paths only from input - ch_paths = passthrough.map { row -> [row[0].id, row[1..-1]].flatten() } + // Strip out the sample id from the meta in the passthrough + ch_paths = passthrough.map { row -> [row[0].id, row[0], row[1..-1]].flatten() } ch_annotated_meta = Channel.empty() if(params.script_mode) { @@ -32,11 +32,10 @@ workflow ANNOTATE_META_AWK { .map { row -> new_meta = [:] row[1].each{ k, v -> new_meta.put(params.meta_prefix + k + params.meta_suffix, v) } - [row[0], new_meta] + [row[0].id, new_meta] } - .map { row -> [ row[0].id, row[0] << row[1] ] } .join ( ch_paths ) - .map { row -> row[1..-1] } + .map { row -> [ row[2] << row[1], row[3..-1] ] } .set { ch_annotated_meta } } else { @@ -47,11 +46,10 @@ workflow ANNOTATE_META_AWK { .map { row -> new_meta = [:] row[1].each{ k, v -> new_meta.put(params.meta_prefix + k + params.meta_suffix, v) } - [row[0], new_meta] + [row[0].id, new_meta] } - .map { row -> [ row[0].id, row[0] << row[1] ] } .join ( ch_paths ) - .map { row -> row[1..-1] } + .map { row -> [ row[2] << row[1], row[3..-1] ] } .set { ch_annotated_meta } } From 653b01e48dd38b7d310efe1881fbe5175a369016 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 16 Mar 2021 10:50:09 +0000 Subject: [PATCH 045/675] Improved export meta to deal with missing and out of order metadata items --- modules/local/process/export_meta.nf | 29 +++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/modules/local/process/export_meta.nf b/modules/local/process/export_meta.nf index 0c094e5e..1c426bba 100644 --- a/modules/local/process/export_meta.nf +++ b/modules/local/process/export_meta.nf @@ -22,14 +22,37 @@ process EXPORT_META { path "meta_table.csv", emit: csv script: - arr_str = meta[0].keySet().join(",") + def header = [:] + // Find the header key set for (int i = 0; i < meta.size(); i++) { - sample_str = meta[i].values().join(",") + meta[i].each { + entry -> + if(!header.containsKey(entry.key)) { + header.put(entry.key, null) + } + } + } + + // Init output string + arr_str = header.keySet().join(",") + + // Map the values and write row + for (int i = 0; i < meta.size(); i++) { + header.each { + entry -> + entry.value = null + } + + meta[i].each { + entry -> + header[entry.key] = entry.value + } + sample_str = header.values().join(",") arr_str = arr_str + "\n" + sample_str } """ - echo "${arr_str}" > meta_table.csv + echo "$arr_str" > meta_table.csv """ } \ No newline at end of file From 5dadc47be0f6da8f4fdf86b0ee24e0675480d91e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 16 Mar 2021 10:50:17 +0000 Subject: [PATCH 046/675] Updated test data --- dev/docker/static_reports/test_data/meta_table.csv | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dev/docker/static_reports/test_data/meta_table.csv b/dev/docker/static_reports/test_data/meta_table.csv index 55747f44..d264545f 100644 --- a/dev/docker/static_reports/test_data/meta_table.csv +++ b/dev/docker/static_reports/test_data/meta_table.csv @@ -1,7 +1,7 @@ -id,group,replicate,single_end,bt2_total_reads_target,bt2_align1_target,bt2_align_gt1_target,bt2_non_aligned_target,bt2_total_aligned_target,bt2_total_reads_spikein,bt2_align1_spikein,bt2_align_gt1_spikein,bt2_non_aligned_spikein,bt2_total_aligned_spikein,scale_factor -h3k4me3_R2,h3k4me3,2,false,1725035,106331,62940,1555764,169271,1725035,4093,113,1720829,4206,2.3775558726 -h3k27me3_R2,h3k27me3,2,false,2535578,190258,181849,2163471,372107,2535578,446,15,2535117,461,21.6919739696 -h3k27me3_R1,h3k27me3,1,false,2860575,208496,170330,2481749,378826,2860575,210,10,2860355,220,45.4545454545 -h3k4me3_R1,h3k4me3,1,false,1511072,87991,32964,1390117,120955,1511072,340,7,1510725,347,28.8184438040 -igg_R1,igg,1,false,2056442,122953,125243,1808246,248196,2056442,75440,2061,1978941,77501,0.1290305932 -igg_R2,igg,2,false,1113563,62155,71755,979653,133910,1113563,40122,1160,1072281,41282,0.2422363258 +id,group,replicate,single_end,bt2_total_reads_spikein,bt2_align1_spikein,bt2_align_gt1_spikein,bt2_non_aligned_spikein,bt2_total_aligned_spikein,bt2_total_reads_target,bt2_align1_target,bt2_align_gt1_target,bt2_non_aligned_target,bt2_total_aligned_target,scale_factor,dedup_library,dedup_unpaired_reads_examined,dedup_read_pairs_examined,dedup_secondary_or_supplementary_rds,dedup_unmapped_reads,dedup_unpaired_read_duplicates,dedup_read_pair_duplicates,dedup_read_pair_optical_duplicates,dedup_percent_duplication,dedup_estimated_library_size +h3k4me3_R2,h3k4me3,2,false,1725035,4093,113,1720829,4206,1725035,106331,62940,1555764,169271,2.3775558726,unknown library,0,169271,0,0,0,4037,0,0.023849,3492107 +h3k27me3_R2,h3k27me3,2,false,2535578,446,15,2535117,461,2535578,190258,181849,2163471,372107,21.6919739696,unknown library,0,372107,0,0,0,4051,0,0.010887,16965792 +h3k4me3_R1,h3k4me3,1,false,1511072,340,7,1510725,347,1511072,87991,32964,1390117,120955,28.8184438040,unknown library,0,120955,0,0,0,7628,0,0.063065,918217 +igg_R2,igg,2,false,1113563,40122,1160,1072281,41282,1113563,62155,71755,979653,133910,0.2422363258,unknown library,0,133910,0,0,0,39588,0,0.295631,179210 +h3k27me3_R1,h3k27me3,1,false,2860575,210,10,2860355,220,2860575,208496,170330,2481749,378826,45.4545454545,unknown library,0,378826,0,0,0,16244,0,0.04288,4290097 +igg_R1,igg,1,false,2056442,75440,2061,1978941,77501,2056442,122953,125243,1808246,248196,0.1290305932,unknown library,0,248196,0,0,0,62615,0,0.25228,405129 From 6cada60910b806fcb9b4af353ca4b01a35559291 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 16 Mar 2021 10:50:40 +0000 Subject: [PATCH 047/675] Workflow minor changes --- cutandrun.nf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index c9f6d47e..16fdcae3 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -354,7 +354,6 @@ workflow CUTANDRUN { [ row[0], row[1], row[2] ] } .set { ch_samtools_bam_scale } - if(!params.skip_coverage) { /* * MODULE: Convert to bedgraph @@ -454,12 +453,14 @@ workflow CUTANDRUN { */ if (!params.skip_reporting) { ANNOTATE_DEDUP_META(ch_samtools_bam_scale, ch_markduplicates_multiqc, ch_dummy_file.collect()) + //ANNOTATE_DEDUP_META.out.output | view EXPORT_META ( ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) - GENERATE_REPORTS(EXPORT_META.out.csv) + //GENERATE_REPORTS(EXPORT_META.out.csv) } } From 51b1123ee60e043a79724139d2c74619969edea8 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 16 Mar 2021 13:03:53 +0000 Subject: [PATCH 048/675] Duplication summary now renders --- bin/python/reporting/lib/figures.py | 73 ++++- bin/r/deseq-test.ipynb | 435 ++++++++++++++++++++++++++++ cutandrun.nf | 2 +- nextflow.config | 2 +- 4 files changed, 503 insertions(+), 9 deletions(-) create mode 100644 bin/r/deseq-test.ipynb diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 1a96317f..6425c8b9 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -6,7 +6,8 @@ import pandas as pd import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages -import seaborn as sb +from matplotlib.ticker import FuncFormatter +import seaborn as sns import plotly.express as px class Figures: @@ -15,6 +16,17 @@ class Figures: def __init__(self, logger, data): self.logger = logger self.data_path = data + sns.set() + sns.set_theme() + sns.set_context("paper") + + def format_millions(self, x, pos): + #the two args are the value and tick position + return '%1.1fM' % (x * 1e-6) + + def format_thousands(self, x, pos): + #the two args are the value and tick position + return '%1.1fK' % (x * 1e-3) def load_data(self): self.data_table = pd.read_csv(self.data_path, sep=',') @@ -42,6 +54,12 @@ def generate_plots(self): plots["alignment_summary"] = plot1 data["alignment_summary"] = data1 + # Plot 2 + plot2, data2 = self.duplication_summary() + plots["duplication_summary"] = plot2 + data["duplication_summary"] = data2 + + return (plots, data) def generate_dash_plots(self): @@ -62,7 +80,6 @@ def generate_dash_plots(self): def gen_plots_to_folder(self, output_path): # Init - sb.set_theme() abs_path = os.path.abspath(output_path) # Get plots and supporting data tables @@ -92,6 +109,8 @@ def gen_pdf(self, output_path, plots): ##### PLOTS ##### + # TODO: Add group ordering - order=['h3k27me3', 'h3k4me3', 'igg'] + # ---------- Plot 1 - Alignment Summary --------- # def alignment_summary(self): # Subset data @@ -102,22 +121,22 @@ def alignment_summary(self): fig.suptitle("Sequencing and Alignment Summary") # Seq depth - sb.boxplot(data=df_data, x='group', y='bt2_total_reads_target', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[0,0]) + sns.boxplot(data=df_data, x='group', y='bt2_total_reads_target', ax=seq_summary[0,0]) seq_summary[0,0].set_title("Sequencing Depth") seq_summary[0,0].set_ylabel("Total Reads") # Alignable fragments - sb.boxplot(data=df_data, x='group', y='bt2_total_aligned_target', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[0,1]) + sns.boxplot(data=df_data, x='group', y='bt2_total_aligned_target', ax=seq_summary[0,1]) seq_summary[0,1].set_title("Alignable Fragments") seq_summary[0,1].set_ylabel("Total Aligned Reads") # Alignment rate hg38 - sb.boxplot(data=df_data, x='group', y='target_alignment_rate', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[1,0]) + sns.boxplot(data=df_data, x='group', y='target_alignment_rate', ax=seq_summary[1,0]) seq_summary[1,0].set_title("Alignment Rate (hg38)") seq_summary[1,0].set_ylabel("Percent of Fragments Aligned") # Alignment rate e.coli - sb.boxplot(data=df_data, x='group', y='spikein_alignment_rate', order=['h3k27me3', 'h3k4me3', 'igg'], ax=seq_summary[1,1]) + sns.boxplot(data=df_data, x='group', y='spikein_alignment_rate', ax=seq_summary[1,1]) seq_summary[1,1].set_title("Alignment Rate (e.coli)") seq_summary[1,1].set_ylabel("Percent of Fragments Aligned") @@ -125,6 +144,46 @@ def alignment_summary(self): return fig, df_data + # ---------- Plot 2 - Duplication Summary --------- # + def duplication_summary(self): + # Init + k_formatter = FuncFormatter(self.format_thousands) + m_formatter = FuncFormatter(self.format_millions) + + # Subset data + df_data = self.data_table.loc[:, ('id', 'group', 'dedup_percent_duplication', 'dedup_estimated_library_size', 'dedup_read_pairs_examined')] + df_data['dedup_percent_duplication'] *= 100 + df_data['unique_frag_num'] = df_data['dedup_read_pairs_examined'] * (1-df_data['dedup_percent_duplication']/100) + + #"dedup_library,dedup_unpaired_reads_examined,dedup_read_pairs_examined,dedup_secondary_or_supplementary_rds,dedup_unmapped_reads,dedup_unpaired_read_duplicates,dedup_read_pair_duplicates,dedup_read_pair_optical_duplicates,dedup_percent_duplication,dedup_estimated_library_size" + + ## Construct quad plot + fig, seq_summary = plt.subplots(1,3) + fig.suptitle("Duplication Summary") + + # Duplication rate + sns.boxplot(data=df_data, x='group', y='dedup_percent_duplication', ax=seq_summary[0]) + seq_summary[0].set_ylabel("Duplication Rate (%)") + seq_summary[0].set(ylim=(0, 100)) + seq_summary[0].xaxis.set_tick_params(labelrotation=45) + + # Estimated library size + sns.boxplot(data=df_data, x='group', y='dedup_estimated_library_size', ax=seq_summary[1]) + seq_summary[1].set_ylabel("Estimated Library Size") + seq_summary[1].yaxis.set_major_formatter(m_formatter) + seq_summary[1].xaxis.set_tick_params(labelrotation=45) + + # No. of unique fragments + sns.boxplot(data=df_data, x='group', y='unique_frag_num', ax=seq_summary[2]) + seq_summary[2].set_ylabel("No. of Unique Fragments") + seq_summary[2].yaxis.set_major_formatter(k_formatter) + seq_summary[2].xaxis.set_tick_params(labelrotation=45) + + # Set the plot sizing + plt.subplots_adjust(top = 0.9, bottom = 0.2, right = 0.9, left = 0.1, hspace = 0.7, wspace = 0.7) + + return fig, df_data + def alignment_summary_ex(self): # Subset data df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] @@ -134,7 +193,7 @@ def alignment_summary_ex(self): return fig, df_data - + # plt.yticks(np.arange(0, 100, 10)) # import glob # # import re diff --git a/bin/r/deseq-test.ipynb b/bin/r/deseq-test.ipynb new file mode 100644 index 00000000..8b267d0f --- /dev/null +++ b/bin/r/deseq-test.ipynb @@ -0,0 +1,435 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "faced-parent", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading required package: stats4\n", + "\n", + "Loading required package: BiocGenerics\n", + "\n", + "Loading required package: parallel\n", + "\n", + "\n", + "Attaching package: 'BiocGenerics'\n", + "\n", + "\n", + "The following objects are masked from 'package:parallel':\n", + "\n", + " clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,\n", + " clusterExport, clusterMap, parApply, parCapply, parLapply,\n", + " parLapplyLB, parRapply, parSapply, parSapplyLB\n", + "\n", + "\n", + "The following objects are masked from 'package:stats':\n", + "\n", + " IQR, mad, sd, var, xtabs\n", + "\n", + "\n", + "The following objects are masked from 'package:base':\n", + "\n", + " Filter, Find, Map, Position, Reduce, anyDuplicated, append,\n", + " as.data.frame, basename, cbind, colnames, dirname, do.call,\n", + " duplicated, eval, evalq, get, grep, grepl, intersect, is.unsorted,\n", + " lapply, mapply, match, mget, order, paste, pmax, pmax.int, pmin,\n", + " pmin.int, rank, rbind, rownames, sapply, setdiff, sort, table,\n", + " tapply, union, unique, unsplit, which.max, which.min\n", + "\n", + "\n", + "Loading required package: S4Vectors\n", + "\n", + "\n", + "Attaching package: 'S4Vectors'\n", + "\n", + "\n", + "The following object is masked from 'package:base':\n", + "\n", + " expand.grid\n", + "\n", + "\n", + "Loading required package: IRanges\n", + "\n", + "Loading required package: GenomeInfoDb\n", + "\n", + "Loading required package: SummarizedExperiment\n", + "\n", + "Loading required package: MatrixGenerics\n", + "\n", + "Loading required package: matrixStats\n", + "\n", + "\n", + "Attaching package: 'MatrixGenerics'\n", + "\n", + "\n", + "The following objects are masked from 'package:matrixStats':\n", + "\n", + " colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,\n", + " colCounts, colCummaxs, colCummins, colCumprods, colCumsums,\n", + " colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,\n", + " colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,\n", + " colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,\n", + " colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,\n", + " colWeightedMeans, colWeightedMedians, colWeightedSds,\n", + " colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,\n", + " rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,\n", + " rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,\n", + " rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,\n", + " rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,\n", + " rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,\n", + " rowWeightedMads, rowWeightedMeans, rowWeightedMedians,\n", + " rowWeightedSds, rowWeightedVars\n", + "\n", + "\n", + "Loading required package: Biobase\n", + "\n", + "Welcome to Bioconductor\n", + "\n", + " Vignettes contain introductory material; view with\n", + " 'browseVignettes()'. To cite Bioconductor, see\n", + " 'citation(\"Biobase\")', and for packages 'citation(\"pkgname\")'.\n", + "\n", + "\n", + "\n", + "Attaching package: 'Biobase'\n", + "\n", + "\n", + "The following object is masked from 'package:MatrixGenerics':\n", + "\n", + " rowMedians\n", + "\n", + "\n", + "The following objects are masked from 'package:matrixStats':\n", + "\n", + " anyMissing, rowMedians\n", + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "library(magrittr)\n", + "library(GenomicRanges)\n", + "library(DESeq2)\n", + "library(chromVAR)\n", + "\n", + "# library(BiocParallel)\n", + "# register(MulticoreParam(8)) # Use 8 cores" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "multiple-shipping", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Bioconductor version 3.12 (BiocManager 1.30.10), R 4.0.3 (2020-10-10)\n", + "\n", + "Installing package(s) 'DESeq2'\n", + "\n", + "Updating HTML index of packages in '.Library'\n", + "\n", + "Making 'packages.html' ...\n", + " done\n", + "\n", + "Old packages: 'GenomeInfoDb', 'IRanges', 'S4Vectors', 'crayon'\n", + "\n" + ] + } + ], + "source": [ + "if (!requireNamespace(\"BiocManager\", quietly = TRUE))\n", + " install.packages(\"BiocManager\")\n", + "\n", + "BiocManager::install(\"DESeq2\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "social-witch", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Bioconductor version 3.12 (BiocManager 1.30.10), R 4.0.3 (2020-10-10)\n", + "\n", + "Installing package(s) 'chromVAR'\n", + "\n", + "Updating HTML index of packages in '.Library'\n", + "\n", + "Making 'packages.html' ...\n", + " done\n", + "\n", + "Old packages: 'GenomeInfoDb', 'IRanges', 'S4Vectors', 'crayon'\n", + "\n" + ] + } + ], + "source": [ + "BiocManager::install(\"chromVAR\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "lightweight-literacy", + "metadata": {}, + "outputs": [], + "source": [ + "mPeak = GRanges()\n", + "\n", + "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k4me3_R1.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", + "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", + "\n", + "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k4me3_R2.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", + "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", + "\n", + "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k27me3_R1.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", + "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", + "\n", + "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k27me3_R2.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", + "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", + "\n", + "masterPeak = reduce(mPeak)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "exact-challenge", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R1.markdup.bam\n", + "\n", + "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R2.markdup.bam\n", + "\n", + "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R1.markdup.bam\n", + "\n", + "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R2.markdup.bam\n", + "\n" + ] + } + ], + "source": [ + "countMat = matrix(NA, length(masterPeak), 4)\n", + "\n", + "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R1.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", + "countMat[, 1] = counts(fragment_counts)[,1]\n", + "\n", + "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R2.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", + "countMat[, 2] = counts(fragment_counts)[,1]\n", + "\n", + "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R1.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", + "countMat[, 3] = counts(fragment_counts)[,1]\n", + "\n", + "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R2.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", + "countMat[, 4] = counts(fragment_counts)[,1]\n", + "\n", + "histL = c(\"K27me3\", \"K4me3\")\n", + "repL = paste0(\"rep\", 1:2)\n", + "colnames(countMat) = paste(rep(histL, 2), rep(repL, each = 2), sep = \"_\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "charming-fundamental", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "converting counts to integer mode\n", + "\n", + "estimating size factors\n", + "\n", + "estimating dispersions\n", + "\n", + "gene-wise dispersion estimates\n", + "\n", + "mean-dispersion relationship\n", + "\n", + "final dispersion estimates\n", + "\n", + "fitting model and testing\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "DataFrame with 6 rows and 14 columns\n", + " K27me3_rep1 K4me3_rep1 K27me3_rep2 K4me3_rep2 K27me3_rep1_norm\n", + " \n", + "1 157 204 43 98 263.00396\n", + "2 0 1 2 3 0.00000\n", + "3 0 1 3 2 0.00000\n", + "4 0 0 3 3 0.00000\n", + "5 16 15 5 17 26.80295\n", + "6 1 2 1 3 1.67518\n", + " K4me3_rep1_norm K27me3_rep2_norm K4me3_rep2_norm baseMean log2FoldChange\n", + " \n", + "1 305.05115 26.677339 62.92038 164.413208 -2.665518\n", + "2 1.49535 1.240806 1.92613 1.165572 1.019385\n", + "3 1.49535 1.861210 1.28409 1.160162 1.010569\n", + "4 0.00000 1.861210 1.92613 0.946836 2.701407\n", + "5 22.43023 3.102016 10.91476 15.812490 -1.814016\n", + "6 2.99070 0.620403 1.92613 1.803105 -0.881734\n", + " lfcSE stat pvalue padj\n", + " \n", + "1 0.591954 -4.502917 6.70271e-06 0.000354051\n", + "2 3.061925 0.332923 7.39193e-01 0.863378683\n", + "3 3.066071 0.329597 7.41704e-01 0.863378683\n", + "4 3.485580 0.775024 4.38326e-01 0.687580977\n", + "5 0.992334 -1.828029 6.75452e-02 0.527774960\n", + "6 2.351327 -0.374994 7.07665e-01 0.863378683" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "selectR = which(rowSums(countMat) > 5) ## remove low count genes\n", + "dataS = countMat[selectR,]\n", + "condition = factor(rep(histL, each = length(repL)))\n", + "\n", + "dds = DESeqDataSetFromMatrix(countData = dataS,\n", + " colData = DataFrame(condition),\n", + " design = ~ condition)\n", + "DDS = DESeq(dds)\n", + "normDDS = counts(DDS, normalized = TRUE) ## normalization with respect to the sequencing depth\n", + "colnames(normDDS) = paste0(colnames(normDDS), \"_norm\")\n", + "res = results(DDS, independentFiltering = FALSE, altHypothesis = \"greaterAbs\")\n", + "\n", + "countMatDiff = cbind(dataS, normDDS, res)\n", + "head(countMatDiff)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "parental-broadcasting", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAYAAAD958/bAAAEGWlDQ1BrQ0dDb2xvclNwYWNl\nR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi\n6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lp\nurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZP\nC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q4\n4WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23B\naIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys\n2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y\n5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrl\nSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98\nhTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7C\nlP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmK\nPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZf\nsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJ\nxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19\nzn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNC\nUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU\n97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KT\nYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyA\ngccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/\nqwBnjX8BoJ98VQNcC+8AAAA4ZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAE\nAAAAAQAAA0igAwAEAAAAAQAAA0gAAAAA3+vLGQAAQABJREFUeAHsnQe8XEX5v3cT0htdihCC\nICigNAFRQEDEgmIDC4oiTVQUFGkCIRBpUhR+fxVUVFQsiL0hKL03QZoghA4CCQGSkH7+z3uy\nJ5y72b11d++WZz6fd0+bM+WZs/fOd9+ZOYWCQQISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCA\nBCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQ\ngAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAIS\nkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEAC\nEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhA\nAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlI\nQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJ\nSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCAB\nCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQg\nAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQk\nIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAE\nJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCA\nBCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQ\ngAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAIS\nkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEAC\nEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhA\nAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlI\nQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJ\nSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCAB\nCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQg\nAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQk\nIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAE\nJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCA\nBCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQ\ngAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAIS\nkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEAC\nEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhA\nAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlI\n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\nYXdMwARMwARMwARMoEUEvmhivp3swzaxGj1ZuUPcdKQDyjD+gH48oKf9kAmYgAmYgAmYgAmY\ngAl0nsDnnXehcQ8skBpn2IwcHiSTlTBtGtGpcDcFn4091SkHXG6uCMxNbYZhe2Njc1Wz2ioz\nlGQnY3q9wLu1PeJUJtAngRW4uyN2QJ+p8ntzUaq2P7ZnfqvomrWZwMaUtyymv9XdGNak0hti\n32ti5SWOHmpifs6qQwRWpNwfYDN3qPw0FasX6m6UJofsS6YJLI/3AdO7x7oxSCCq/gt0Y+Vd\n55YQ2Jpc32lJztnIdD3c/DIbrtrLjBA4FD/vy4ivrXBzdzJ9vhUZ5yHPbh9B0siNzMEETMAE\nTMAETMAETMAETMAECt7Fzh8CEzABEzABEzABEzABEzABEygRsEDyR8EETMAETMAETMAETMAE\nTMAESgQskPxRMAETMAETMAETMAETMAETMIESAQskfxRMwARMwARMwARMwARMwARMoETAAskf\nBRMwARMwARMwARMwARMwARMoEbBA8kfBBEzABEzABEzABEzABEzABEoELJD8UTABEzABEzAB\nEzABEzABEzCBEgELJH8UTMAETMAETMAETMAETMAETKBEwALJH4WYwBecfB5f+GgCDRLQZylg\n4xvMJ6uP6/dJwb9TPRz8s3EC3f43Wr9L8e9V4zSdgwn0/H3u5r/R3f43xb8DJlATgQVIVawp\npROZQG0EFqotWW5TdXv9c9uwHarY5JQ7X4fKTkOx+v+k/1MOJtAsAlOT0ZzNyiyD+UyJz/Nk\n0G+7bAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImkC8Ck+erOq5NgwS25Hl9Jt5pMB8/3r0E5qHqM1ax\n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\ndviPZDeSAVAGDs+TWaSUPGW6j6T9SSRtT66WZzPtt5JrYbABUptrp03bfjOyv4MLtLl2spU2\n50mbtoP3cPTWDHXttPmcGK22o3fkblmBMRTYl33lJu6YMdynu5pYAityOF8lufHPuZTkhu9Y\nMpFLL9fOIQDMJcUl80dMZBSPrbXA3rziAVLOkVxHN5B3k2bJ1+suJ3m6VNpfyfyqpN/KnXR4\nsAFSjqXNtdOmbb852d/BBdpcO9lKm/OkTdvBezg6a7pdO20+J0ar7egcuVtVQAEF+lBgKn3e\nhKzVh30fzS7n64brkJkkf5XMokAngdWozJPFZTutbNRNY3lL0o8Do8ahDLnY5tpp03bInbqy\n7wTaXDttzpM2bccjWpvPidFqOx5d7JMCCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIAC\nCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIAC\nCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKDCpBZaY1EfvwSuggAIKdBNYnwYfJR8ky5M5ZDKW7TjorciD5E0yjXyALE2eJmNdprDDvCfT\nyeNjvXP3p4ACCiiggAIKKKDAZBTYhoN+nWRAkPwbmazlCg48BstUADOr5TOr5bGerFjt/8Kx\n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\n5NLP6Y1ODLbPNu/VDmzzwWr72UeONftbq5pmALI6SbmCpM0yWaDMJFnOACElg8ssD5XT07Aq\nGzCNb/ZRXvO/zB9KmiXnwjUkA+20zTmyI8lAJIOsXkr6eysp+8r0KrI2qZcM1P6blHb5+twP\nSJ5ANcunqfglSduc33eSbO8xkkFMKbOZSZuVS0U1Xbyqv7ZRvyPLeaKV19xbrctrzyF5j1Kf\nZN9nkJxPFgUUUEABBRRQQIE+EXgX/dyUNG/w693Pus1IuRmvrxut+QyGcjP7ztHaQQ/bHQ99\nyE36WmQWmUrGuizLDvPer0kyYB6qrMDKdYdq0MO6cq51ezqWdjFZqss245enPTO6tBvO6lV4\nUfM9WZ66DPbikPPHooACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIAC\nCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKKCAAgoooIACCiiggAIKKKCAAl0F/g+/o3RkFUjLGgAAAABJRU5ErkJggg==", + "text/plain": [ + "Plot with title \"\"" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plotMA(res)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "matched-electricity", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [], + "text/latex": [], + "text/markdown": [], + "text/plain": [ + "character(0)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "resultsNames(dds)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "optional-border", + "metadata": {}, + "outputs": [], + "source": [ + "resOrdered <- res[order(res$pvalue),]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "intimate-expression", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "out of 55516 with nonzero total read count\n", + "adjusted p-value < 0.1\n", + "LFC > 0 (up) : 602, 1.1%\n", + "LFC < 0 (down) : 2361, 4.3%\n", + "outliers [1] : 0, 0%\n", + "low counts [2] : 0, 0%\n", + "(mean count < 0)\n", + "[1] see 'cooksCutoff' argument of ?results\n", + "[2] see 'independentFiltering' argument of ?results\n", + "\n" + ] + } + ], + "source": [ + "summary(res)\n", + "\n", + "write.csv(as.data.frame(resOrdered), file=\"results.csv\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.0.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/cutandrun.nf b/cutandrun.nf index 16fdcae3..fd3b5ba5 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -460,7 +460,7 @@ workflow CUTANDRUN { //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) - //GENERATE_REPORTS(EXPORT_META.out.csv) + GENERATE_REPORTS(EXPORT_META.out.csv) } } diff --git a/nextflow.config b/nextflow.config index b0179f29..304d0ba8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -23,7 +23,7 @@ params { // QC skip_qc = false skip_fastqc = false - skip_multiqc = false + skip_multiqc = true // Sample handling save_merged_fastq = false From a1aceabddca4595474e8355efadbc401945e8888 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 18 Mar 2021 10:02:25 +0000 Subject: [PATCH 049/675] Added fragment size analysis --- .gitignore | 8 + assets/awk/dt_frag_report_to_csv.awk | 28 + assets/blacklists/GRCh37-blacklist.bed | 411 +++++++++++++ assets/blacklists/GRCm38-blacklist.bed | 164 +++++ assets/blacklists/hg19-blacklist.bed | 411 +++++++++++++ assets/blacklists/hg38-blacklist.bed | 38 ++ assets/blacklists/mm10-blacklist.bed | 164 +++++ bin/python/reporting/lib/figures.py | 181 +++--- bin/python/reporting/main.py | 8 +- conf/modules.config | 8 + conf/test_hg38_chr7.config | 1 + cutandrun.nf | 43 +- dev/docker/static_reports/run.sh | 3 +- .../test_data/h3k27me3_R1_raw.csv | 470 +++++++++++++++ .../test_data/h3k27me3_R2_raw.csv | 454 ++++++++++++++ .../test_data/h3k4me3_R1_raw.csv | 454 ++++++++++++++ .../test_data/h3k4me3_R2_raw.csv | 564 ++++++++++++++++++ .../static_reports/test_data/igg_R1_raw.csv | 534 +++++++++++++++++ .../static_reports/test_data/igg_R2_raw.csv | 508 ++++++++++++++++ main.nf | 3 + modules/local/process/generate_reports.nf | 4 +- .../deeptools/bamPEFragmentSize/functions.nf | 59 ++ .../deeptools/bamPEFragmentSize/main.nf | 45 ++ nextflow.config | 1 + nextflow_schema.json | 6 + 25 files changed, 4445 insertions(+), 125 deletions(-) create mode 100644 assets/awk/dt_frag_report_to_csv.awk create mode 100755 assets/blacklists/GRCh37-blacklist.bed create mode 100755 assets/blacklists/GRCm38-blacklist.bed create mode 100755 assets/blacklists/hg19-blacklist.bed create mode 100644 assets/blacklists/hg38-blacklist.bed create mode 100755 assets/blacklists/mm10-blacklist.bed create mode 100644 dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv create mode 100644 dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv create mode 100644 dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv create mode 100644 dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv create mode 100644 dev/docker/static_reports/test_data/igg_R1_raw.csv create mode 100644 dev/docker/static_reports/test_data/igg_R2_raw.csv create mode 100644 modules/local/software/deeptools/bamPEFragmentSize/functions.nf create mode 100644 modules/local/software/deeptools/bamPEFragmentSize/main.nf diff --git a/.gitignore b/.gitignore index 2a6de161..250763f6 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,11 @@ dev/docker/static_reports/test_output/log.txt dev/docker/static_reports/test_output/duplication_summary.csv dev/docker/static_reports/test_output/duplication_summary.png + +dev/docker/static_reports/test_output/frag_hist.csv + +dev/docker/static_reports/test_output/frag_hist.png + +dev/docker/static_reports/test_output/frag_violin.csv + +dev/docker/static_reports/test_output/frag_violin.png diff --git a/assets/awk/dt_frag_report_to_csv.awk b/assets/awk/dt_frag_report_to_csv.awk new file mode 100644 index 00000000..e80d9ccc --- /dev/null +++ b/assets/awk/dt_frag_report_to_csv.awk @@ -0,0 +1,28 @@ +#!/bin/awk -f + +BEGIN { + cols="dt_frag_sampled:dt_frag_mean_len:dt_frag_min_len:dt_frag_max_len" + FS="\t" + RS="\n" + col_count=split(cols, col_arr, ":"); + for(i=1; i<=col_count; i++) printf col_arr[i] ((i==col_count) ? "\n" : ","); +} +{ + for (i=1; i<=NF; i++) { + if(index($i,"Frag. Sampled") !=0) { + data["dt_frag_sampled"]=i; + } + if(index($i,"Frag. Len. Mean") !=0) { + data["dt_frag_mean_len"]=i; + } + if(index($i,"Frag. Len. Min") !=0) { + data["dt_frag_min_len"]=i; + } + if(index($i,"Frag. Len. Max") !=0) { + data["dt_frag_max_len"]=i; + } + } +} +END { + for (j=1; j<=col_count; j++) printf $(data[col_arr[j]]) ((j==col_count) ? "\n" : ","); +} \ No newline at end of file diff --git a/assets/blacklists/GRCh37-blacklist.bed b/assets/blacklists/GRCh37-blacklist.bed new file mode 100755 index 00000000..dab19f36 --- /dev/null +++ b/assets/blacklists/GRCh37-blacklist.bed @@ -0,0 +1,411 @@ +1 564449 570371 High_Mappability_island 1000 . +1 724136 727043 Satellite_repeat 1000 . +1 825006 825115 BSR/Beta 1000 . +1 2583334 2634374 Low_mappability_island 1000 . +1 4363064 4363242 (CATTC)n 1000 . +1 5725866 5736651 Low_mappability_island 1000 . +1 16839923 16841396 Low_mappability_island 1000 . +1 38077347 38077423 Low_mappability_island 1000 . +1 91852785 91853147 LSU-rRNA_Hsa 1000 . +1 104163724 104163860 Low_mappability_island 1000 . +1 108112972 108113707 LSU-rRNA_Hsa 1000 . +1 121351474 121487059 centromeric_repeat 1000 . +1 142535434 142543081 Satellite_repeat 1000 . +1 142723256 142723968 Low_mappability_island 1000 . +1 142792613 142793303 Low_mappability_island 1000 . +1 142835822 142837333 Low_mappability_island 1000 . +1 143274490 143284340 centromeric_repeat 1000 . +1 145277108 145277572 LSU-rRNA_Hsa 1000 . +1 149033183 149035829 Satellite_repeat 1000 . +1 156186169 156186712 High_Mappability_island 1000 . +1 224199390 224204260 Satellite_repeat 1000 . +1 233318467 233318516 (CATTC)n 1000 . +1 236260366 236260821 Low_mappability_island 1000 . +1 237766308 237766764 LSU-rRNA_Hsa 1000 . +1 238105345 238105511 Low_mappability_island 1000 . +1 238108025 238108378 Low_mappability_island 1000 . +1 238108645 238109697 Low_mappability_island 1000 . +10 18841533 18862467 (CATTC)n 1000 . +10 20035661 20037171 Low_mappability_island 1000 . +10 36722282 36723650 Low_mappability_island 1000 . +10 38772277 38819357 Satellite_repeat 1000 . +10 38868892 38889025 Satellite_repeat 1000 . +10 39076515 39155771 Satellite_repeat 1000 . +10 42354835 42548642 centromeric_repeat 1000 . +10 42596676 42602082 Satellite_repeat 1000 . +10 42596700 42602110 Satellite_repeat 1000 . +10 42661264 42667623 Satellite_repeat 1000 . +10 42790522 42818398 Satellite_repeat 1000 . +10 135498649 135502716 Satellite_repeat 1000 . +11 6831669 6831838 ALR/Alpha 1000 . +11 10529403 10531969 Low_mappability_island 1000 . +11 48671444 48902406 centromeric_repeat 1000 . +11 48931242 48964015 centromeric_repeat 1000 . +11 50318471 50784078 centromeric_repeat 1000 . +11 51090700 51374066 centromeric_repeat 1000 . +11 51567242 51594226 centromeric_repeat 1000 . +11 54694046 55027975 centromeric_repeat 1000 . +11 73221660 73221946 Low_mappability_island 1000 . +11 85194913 85195322 LSU-rRNA_Hsa 1000 . +11 87524468 87525005 Low_mappability_island 1000 . +11 103275584 103281729 Low_mappability_island 1000 . +11 122874287 122874443 Low_mappability_island 1000 . +12 20704285 20704583 SSU-rRNA_Hsa 1000 . +12 34372315 34372825 LSU-rRNA_Hsa 1000 . +12 34432130 34857010 centromeric_repeat 1000 . +12 37989447 38441828 centromeric_repeat 1000 . +12 38531376 38531930 LSU-rRNA_Hsa 1000 . +12 41757383 41757545 Low_mappability_island 1000 . +12 127650407 127651075 LSU-rRNA_Hsa 1000 . +12 132061320 132062046 Low_mappability_island 1000 . +13 56545728 56545925 Low_mappability_island 1000 . +13 110076444 110076782 Low_mappability_island 1000 . +14 18999935 19056900 centromeric_repeat 1000 . +14 32953263 32954381 Low_mappability_island 1000 . +14 84637832 84639038 Low_mappability_island 1000 . +14 90341302 90341516 SSU-rRNA_Hsa 1000 . +15 19999941 20044132 centromeric_repeat 1000 . +16 32493036 32570826 ALR/Alpha 1000 . +16 32590063 32598801 ALR/Alpha 1000 . +16 33237130 33241330 Low_mappability_island 1000 . +16 33864355 34023306 centromeric_repeat 1000 . +16 34180542 34197081 Satellite_repeat 1000 . +16 34530115 34542632 BSR/Beta 1000 . +16 35193580 35285885 centromeric_repeat 1000 . +16 46385718 46456668 Satellite_repeat 1000 . +16 46497639 46500515 Satellite_repeat 1000 . +16 47538629 47539297 LSU-rRNA_Hsa 1000 . +17 19355538 19356096 LSU-rRNA_Hsa 1000 . +17 19502495 19506773 Low_mappability_island 1000 . +17 21905167 21906712 centromeric_repeat 1000 . +17 22018524 22032049 Low_mappability_island 1000 . +17 22221073 22263006 centromeric_repeat 1000 . +17 25263010 25268059 Satellite_repeat 1000 . +17 25415551 25417559 telomeric_repeat 1000 . +17 31149365 31149981 High_Mappability_island 1000 . +17 33478114 33478372 LSU-rRNA_Hsa 1000 . +17 41381502 41382591 High_Mappability_island 1000 . +17 41463538 41464075 High_Mappability_island 1000 . +17 41464478 41465015 snRNA 1000 . +17 41465562 41467288 High_Mappability_island 1000 . +17 51183038 51183763 Low_mappability_island 1000 . +17 55868618 55868752 LSU-rRNA_Hsa 1000 . +17 75158031 75158430 LSU-rRNA_Hsa 1000 . +18 96416 97552 Satellite_repeat 1000 . +18 105658 112233 Satellite_repeat 1000 . +18 2842252 2842356 Low_mappability_island 1000 . +18 15393801 15393992 centromeric_repeat 1000 . +18 18510894 18520356 centromeric_repeat 1000 . +18 44126235 44126593 (CATTC)n 1000 . +18 45379603 45379864 Low_mappability_island 1000 . +18 50319086 50319301 Low_mappability_island 1000 . +18 77772846 77773065 LSU-rRNA_Hsa 1000 . +19 246006 247844 TAR1 1000 . +19 22877614 22877696 SSU-rRNA_Hsa 1000 . +19 23235030 23235504 BSR/Beta 1000 . +19 24182398 24186210 LSU-rRNA_Hsa 1000 . +19 24385474 24633168 centromeric_repeat 1000 . +19 27730611 28262682 centromeric_repeat 1000 . +19 36066445 36066810 LSU-rRNA_Hsa 1000 . +19 36756398 36800948 centromeric_repeat 1000 . +19 37759473 37797722 centromeric_repeat 1000 . +19 44914313 44916340 ACRO1 1000 . +19 44960681 44962681 ACRO1 1000 . +2 739925 740994 Low_mappability_island 1000 . +2 49456729 49457067 Low_mappability_island 1000 . +2 88124390 88124903 Low_mappability_island 1000 . +2 89830421 89880514 Satellite_repeat 1000 . +2 90371401 90394776 Satellite_repeat 1000 . +2 90443001 90545431 Low_mappability_island 1000 . +2 91595080 91616015 Satellite_repeat 1000 . +2 92267428 92326280 centromeric_repeat 1000 . +2 115695017 115695281 LSU-rRNA_Hsa 1000 . +2 117781085 117781300 Low_mappability_island 1000 . +2 132966248 132989300 centromeric_repeat 1000 . +2 132994855 133007983 ALR/Alpha 1000 . +2 133011824 133013298 SSU-rRNA_Hsa 1000 . +2 133036250 133040042 LSU-rRNA_Hsa 1000 . +2 133044095 133045945 ACRO1 1000 . +2 143848503 143848792 Low_mappability_island 1000 . +2 148022736 148022878 Low_mappability_island 1000 . +2 149639207 149639515 Low_mappability_island 1000 . +2 156120500 156120610 Low_mappability_island 1000 . +2 162135000 162139241 Low_mappability_island 1000 . +2 230045426 230045796 LSU-rRNA_Hsa 1000 . +20 26257032 26320267 centromeric_repeat 1000 . +20 29517710 29521147 centromeric_repeat 1000 . +20 29803876 29833334 centromeric_repeat 1000 . +20 55932703 55936114 chrM 1000 . +20 62916702 62918053 telomeric_repeat 1000 . +21 9647205 9648529 Low_mappability_island 1000 . +21 9694896 9704962 centromeric_repeat 1000 . +21 9825451 9827612 High_Mappability_island 1000 . +21 9827612 9845233 Low_mappability_island 1000 . +21 9881895 9882569 TAR1 1000 . +21 10084922 10088004 Satellite_repeat 1000 . +21 10492876 10493049 Low_mappability_island 1000 . +21 10599428 10599915 TAR1 1000 . +21 10697886 10860890 centromeric_repeat 1000 . +21 11186054 11188131 Satellite_repeat 1000 . +21 14338127 14369791 centromeric_repeat 1000 . +21 18800575 18800997 (GAGTG)n 1000 . +21 27228003 27228242 SSU-rRNA_Hsa 1000 . +21 46796081 46796336 Low_mappability_island 1000 . +22 16847814 16862659 Satellite_repeat 1000 . +22 18876789 18884510 Satellite_repeat 1000 . +3 25508897 25509131 Low_mappability_island 1000 . +3 73159606 73161131 snRNA 1000 . +3 75696297 75699304 BSR/Beta 1000 . +3 75717841 75720426 Satellite_repeat 1000 . +3 80995858 81014459 ALR/Alpha 1000 . +3 90311686 90507410 centromeric_repeat 1000 . +3 93504815 93519133 centromeric_repeat 1000 . +3 96335934 96337436 Low_mappability_island 1000 . +3 160665423 160665642 Low_mappability_island 1000 . +3 196625514 196625860 Satellite_repeat 1000 . +3 197825427 197834080 Low_mappability_island 1000 . +4 9987 12694 telomeric_repeat 1000 . +4 12276463 12292424 ALR/Alpha 1000 . +4 12641862 12642305 Low_mappability_island 1000 . +4 21583630 21583719 (GAATG)n 1000 . +4 27732004 27732240 Low_mappability_island 1000 . +4 47774268 47774416 Low_mappability_island 1000 . +4 49085372 49342114 centromeric_repeat 1000 . +4 49488472 49662085 centromeric_repeat 1000 . +4 52659961 52688986 centromeric_repeat 1000 . +4 56194229 56194584 Low_mappability_island 1000 . +4 65473858 65473941 Low_mappability_island 1000 . +4 68264186 68266830 centromeric_repeat 1000 . +4 70296565 70296841 LSU-rRNA_Hsa 1000 . +4 76807083 76807320 LSU-rRNA_Hsa 1000 . +4 78929660 78929920 Low_mappability_island 1000 . +4 156374749 156377226 chrM 1000 . +4 156384860 156387314 Low_mappability_island 1000 . +4 163342479 163342744 Low_mappability_island 1000 . +4 190190746 190203442 Low_mappability_island 1000 . +4 190801869 190802909 Low_mappability_island 1000 . +4 190943802 190943962 Satellite_repeat 1000 . +4 190987268 190990949 Satellite_repeat 1000 . +4 191026302 191044344 telomeric_repeat 1000 . +5 17517177 17600940 Low_mappability_island 1000 . +5 21477365 21497415 Low_mappability_island 1000 . +5 34177882 34197574 Low_mappability_island 1000 . +5 45908253 46411114 centromeric_repeat 1000 . +5 49405493 49554574 centromeric_repeat 1000 . +5 71146650 71146996 LSU-rRNA_Hsa 1000 . +5 79945807 79948223 Low_mappability_island 1000 . +5 93903068 93906726 Low_mappability_island 1000 . +5 97746525 97746679 Low_mappability_island 1000 . +5 99381556 99390873 Low_mappability_island 1000 . +5 105889063 105889263 chrM 1000 . +5 123095972 123097432 chrM 1000 . +5 134258949 134264271 Low_mappability_island 1000 . +5 174541634 174542177 SSU-rRNA_Hsa 1000 . +6 58735349 58739031 centromeric_repeat 1000 . +6 58745955 58780547 centromeric_repeat 1000 . +6 61880095 61944008 centromeric_repeat 1000 . +6 62189892 62206612 ALR/Alpha 1000 . +6 62207809 62230644 ALR/Alpha 1000 . +6 62283966 62284581 Low_mappability_island 1000 . +6 133593944 133594201 LSU-rRNA_Hsa 1000 . +6 137059142 137059326 SSU-rRNA_Hsa 1000 . +6 150665074 150665281 SSU-rRNA_Hsa 1000 . +6 157731310 157735525 Low_mappability_island 1000 . +7 43878355 43878530 TAR1 1000 . +7 45291517 45291740 Low_mappability_island 1000 . +7 56437808 56442977 Low_mappability_island 1000 . +7 57253980 57254183 Low_mappability_island 1000 . +7 57255310 57255444 Low_mappability_island 1000 . +7 57261829 57261998 Low_mappability_island 1000 . +7 57544726 57556913 Satellite_repeat 1000 . +7 57811488 57836990 centromeric_repeat 1000 . +7 57939184 58055539 centromeric_repeat 1000 . +7 61054285 62454680 centromeric_repeat 1000 . +7 64059157 64066183 BSR/Beta 1000 . +7 64951348 64956223 centromeric_repeat 1000 . +7 68201468 68201673 Low_mappability_island 1000 . +7 68527370 68527788 LSU-rRNA_Hsa 1000 . +7 80962907 80963147 SSU-rRNA_Hsa 1000 . +7 100550640 100551321 Low_mappability_island 1000 . +7 142372972 142375638 Low_mappability_island 1000 . +7 145694403 145694561 Low_mappability_island 1000 . +8 155512 157639 TAR1 1000 . +8 21455971 21456306 LSU-rRNA_Hsa 1000 . +8 32868966 32873279 Low_mappability_island 1000 . +8 43092737 43097573 Satellite_repeat 1000 . +8 43399486 43843604 centromeric_repeat 1000 . +8 46838215 47457541 centromeric_repeat 1000 . +8 47739043 47742797 Low_mappability_island 1000 . +8 47750844 47776101 BSR/Beta 1000 . +8 56754955 56755418 LSU-rRNA_Hsa 1000 . +8 69218401 69218922 LSU-rRNA_Hsa 1000 . +8 70602248 70602620 LSU-rRNA_Hsa 1000 . +8 77114154 77114389 Low_mappability_island 1000 . +8 100508010 100508287 Low_mappability_island 1000 . +9 10435 11574 TAR1 1000 . +9 4799734 4800000 SSU-rRNA_Hsa 1000 . +9 33656606 33659249 Low_mappability_island 1000 . +9 42819021 42832395 centromeric_repeat 1000 . +9 44070617 44070871 Low_mappability_island 1000 . +9 44873123 44902307 centromeric_repeat 1000 . +9 45355954 45357644 telomeric_repeat 1000 . +9 45435109 45443517 centromeric_repeat 1000 . +9 66494170 66494805 TAR1 1000 . +9 66767710 66864329 centromeric_repeat 1000 . +9 66970914 67005594 centromeric_repeat 1000 . +9 67315122 67321036 centromeric_repeat 1000 . +9 67789868 67792893 centromeric_repeat 1000 . +9 68410775 68435115 Low_mappability_island 1000 . +9 69677073 69687998 centromeric_repeat 1000 . +9 69689770 69711497 centromeric_repeat 1000 . +9 69947961 70011196 centromeric_repeat 1000 . +9 70076144 70076855 centromeric_repeat 1000 . +9 70318723 70327683 centromeric_repeat 1000 . +9 72653073 72653572 Satellite_repeat 1000 . +9 78790077 78790255 (GAATG)n 1000 . +9 79186574 79187026 LSU-rRNA_Hsa 1000 . +9 141019938 141021783 TAR1 1000 . +MT 1 16569 chrM 1000 . +X 55206111 55206740 Low_mappability_island 1000 . +X 55207753 55208152 Low_mappability_island 1000 . +X 55208300 55208643 Low_mappability_island 1000 . +X 55208980 55209208 Low_mappability_island 1000 . +X 55209655 55210006 Low_mappability_island 1000 . +X 58330488 58330843 centromeric_repeat 1000 . +X 58373806 58373962 centromeric_repeat 1000 . +X 58377680 58377864 centromeric_repeat 1000 . +X 58415350 58416387 centromeric_repeat 1000 . +X 58432411 58432680 centromeric_repeat 1000 . +X 58485887 58486241 centromeric_repeat 1000 . +X 58488898 58494528 centromeric_repeat 1000 . +X 58499466 58504235 centromeric_repeat 1000 . +X 58506076 58528214 centromeric_repeat 1000 . +X 58528184 58536883 centromeric_repeat 1000 . +X 58544061 58582415 centromeric_repeat 1000 . +X 61681834 61919683 centromeric_repeat 1000 . +X 62003205 62041580 centromeric_repeat 1000 . +X 83658929 83659019 Low_mappability_island 1000 . +X 108297348 108297886 LSU-rRNA_Hsa 1000 . +X 114959057 115006437 Low_mappability_island 1000 . +X 125605623 125607351 Low_mappability_island 1000 . +X 125714985 125715338 Low_mappability_island 1000 . +X 125864844 125864980 Low_mappability_island 1000 . +X 125865719 125865874 Low_mappability_island 1000 . +Y 313470 313613 ALR/Alpha 1000 . +Y 3004989 3005175 LSU-rRNA_Hsa 1000 . +Y 4212807 4212910 Low_mappability_island 1000 . +Y 7671817 7694928 BSR/Beta 1000 . +Y 7726064 7730229 BSR/Beta 1000 . +Y 7730734 7731598 BSR/Beta 1000 . +Y 7735811 7752887 BSR/Beta 1000 . +Y 7785067 7806311 BSR/Beta 1000 . +Y 7806856 7814704 BSR/Beta 1000 . +Y 7815230 7820478 BSR/Beta 1000 . +Y 7829937 7832032 BSR/Beta 1000 . +Y 7832744 7848695 BSR/Beta 1000 . +Y 7870343 7873582 BSR/Beta 1000 . +Y 7874115 7874584 BSR/Beta 1000 . +Y 7875409 7885257 BSR/Beta 1000 . +Y 7886545 7894591 BSR/Beta 1000 . +Y 7898927 7916812 BSR/Beta 1000 . +Y 7918790 7921352 BSR/Beta 1000 . +Y 7926344 7936705 BSR/Beta 1000 . +Y 7941130 7947438 BSR/Beta 1000 . +Y 7948790 7964448 BSR/Beta 1000 . +Y 8179010 8181143 BSR/Beta 1000 . +Y 8181757 8213330 BSR/Beta 1000 . +Y 8214629 8215637 BSR/Beta 1000 . +Y 8220421 8230061 BSR/Beta 1000 . +Y 8230686 8231546 BSR/Beta 1000 . +Y 8240772 8265916 BSR/Beta 1000 . +Y 8291535 8292942 BSR/Beta 1000 . +Y 8294002 8295175 BSR/Beta 1000 . +Y 8296944 8321375 BSR/Beta 1000 . +Y 8325813 8325929 BSR/Beta 1000 . +Y 8326678 8333466 BSR/Beta 1000 . +Y 8334027 8342387 BSR/Beta 1000 . +Y 8356544 8369346 BSR/Beta 1000 . +Y 8909560 8909925 TAR1 1000 . +Y 8979478 8979585 Low_mappability_island 1000 . +Y 9072781 9072993 TAR1 1000 . +Y 9908430 9925608 centromeric_repeat 1000 . +Y 9981952 9982126 BSR/Beta 1000 . +Y 10034864 10036712 SSU-rRNA_Hsa 1000 . +Y 10040627 10045657 ALR/Alpha 1000 . +Y 10047773 10052533 ALR/Alpha 1000 . +Y 10053695 10057722 ALR/Alpha 1000 . +Y 10059394 10073694 ALR/Alpha 1000 . +Y 10075082 10075781 ALR/Alpha 1000 . +Y 10080736 10104539 ALR/Alpha 1000 . +Y 13104530 13144368 centromeric_repeat 1000 . +Y 13193966 13196535 Low_mappability_island 1000 . +Y 13252193 13259484 centromeric_repeat 1000 . +Y 13290177 13290667 chrM 1000 . +Y 13445957 13490591 Satellite_repeat 1000 . +Y 13642186 13749784 Satellite_repeat 1000 . +Y 13798522 13870984 Satellite_repeat 1000 . +Y 19691913 19692524 LSU-rRNA_Hsa 1000 . +Y 19764063 19776198 ALR/Alpha 1000 . +Y 19780600 19781704 ALR/Alpha 1000 . +Y 19783669 19796396 ALR/Alpha 1000 . +Y 19800068 19801419 ALR/Alpha 1000 . +Y 19808085 19817100 ALR/Alpha 1000 . +Y 19944298 19944581 TAR1 1000 . +Y 20235195 20235478 TAR1 1000 . +Y 20362679 20371694 ALR/Alpha 1000 . +Y 20378360 20379711 ALR/Alpha 1000 . +Y 20383383 20396110 ALR/Alpha 1000 . +Y 20398075 20399179 ALR/Alpha 1000 . +Y 20403581 20415713 ALR/Alpha 1000 . +Y 20487248 20487859 LSU-rRNA_Hsa 1000 . +Y 23124788 23125577 BSR/Beta 1000 . +Y 23149027 23151205 BSR/Beta 1000 . +Y 23157969 23158245 BSR/Beta 1000 . +Y 23159001 23167737 BSR/Beta 1000 . +Y 23178886 23181770 BSR/Beta 1000 . +Y 23220740 23223625 BSR/Beta 1000 . +Y 23234125 23235822 BSR/Beta 1000 . +Y 23236898 23248080 BSR/Beta 1000 . +Y 23248729 23248851 BSR/Beta 1000 . +Y 23899295 23899388 TAR1 1000 . +Y 23956449 23956628 TAR1 1000 . +Y 24247659 24247700 TAR1 1000 . +Y 24630999 24631040 TAR1 1000 . +Y 24953159 24975657 BSR/Beta 1000 . +Y 24980997 24991235 BSR/Beta 1000 . +Y 25022753 25039185 BSR/Beta 1000 . +Y 25040153 25042421 BSR/Beta 1000 . +Y 25048332 25059258 BSR/Beta 1000 . +Y 25060235 25064798 BSR/Beta 1000 . +Y 25099139 25121882 BSR/Beta 1000 . +Y 25122419 25160800 BSR/Beta 1000 . +Y 25182404 25192372 BSR/Beta 1000 . +Y 25217722 25219409 BSR/Beta 1000 . +Y 25493588 25495275 BSR/Beta 1000 . +Y 26148315 26148450 TAR1 1000 . +Y 26586905 26609405 BSR/Beta 1000 . +Y 26614745 26624983 BSR/Beta 1000 . +Y 26656502 26672934 BSR/Beta 1000 . +Y 26673902 26676170 BSR/Beta 1000 . +Y 26682081 26693007 BSR/Beta 1000 . +Y 26693984 26698547 BSR/Beta 1000 . +Y 26732883 26755623 BSR/Beta 1000 . +Y 26756160 26794538 BSR/Beta 1000 . +Y 26816148 26826116 BSR/Beta 1000 . +Y 26851466 26853153 BSR/Beta 1000 . +Y 27109247 27110934 BSR/Beta 1000 . +Y 27136281 27146249 BSR/Beta 1000 . +Y 27167859 27206241 BSR/Beta 1000 . +Y 27206778 27229502 BSR/Beta 1000 . +Y 27263848 27268411 BSR/Beta 1000 . +Y 27269388 27280315 BSR/Beta 1000 . +Y 27286226 27288494 BSR/Beta 1000 . +Y 27289462 27305895 BSR/Beta 1000 . +Y 27337415 27347656 BSR/Beta 1000 . +Y 27352996 27375497 BSR/Beta 1000 . +Y 27813984 27814119 TAR1 1000 . +Y 28555026 28555353 TAR1 1000 . +Y 28784129 28819695 Satellite_repeat 1000 . +Y 58819367 58917648 (CATTC)n 1000 . +Y 58971913 58997782 (CATTC)n 1000 . +Y 59361267 59362785 TAR1 1000 . diff --git a/assets/blacklists/GRCm38-blacklist.bed b/assets/blacklists/GRCm38-blacklist.bed new file mode 100755 index 00000000..3699d020 --- /dev/null +++ b/assets/blacklists/GRCm38-blacklist.bed @@ -0,0 +1,164 @@ +10 3110060 3110270 +10 22142530 22142880 +10 22142830 22143070 +10 58223870 58224100 +10 58225260 58225500 +10 58228320 58228520 +11 3148660 3148860 +11 3154960 3155170 +11 3158530 3158750 +11 3161780 3161990 +11 3167020 3167250 +11 3169390 3169620 +11 3172450 3172670 +11 3172950 3173190 +11 3184190 3185750 +11 3185700 3186360 +11 3186330 3189230 +11 3189190 3190740 +11 3190750 3191000 +11 3190960 3194430 +11 3194400 3195310 +11 3195240 3197220 +11 3197340 3197950 +11 3197890 3198700 +11 3198630 3199440 +11 3199350 3200120 +11 54139940 54140230 +11 54140470 54140740 +11 88967720 88969600 +11 88969850 88970350 +11 109011550 109012090 +12 3109920 3110150 +12 105436040 105436270 +13 3372960 3373380 +13 3373410 3373630 +13 77438870 77439090 +13 97190460 97190690 +13 99790830 99791090 +13 119488570 119489320 +13 119597600 119598320 +13 119599860 119600050 +13 119601360 119601600 +13 119601800 119602210 +13 119602360 119602580 +13 119609430 119611430 +13 119612760 119613370 +13 119613360 119617690 +14 19415650 19417330 +14 19417240 19417660 +14 19417570 19418920 +14 19418830 19419720 +14 47454330 47454510 +15 75085430 75085920 +15 75085990 75086240 +15 75086150 75086550 +15 75086540 75087110 +16 11143960 11144170 +16 57391420 57391740 +17 13305860 13306280 +17 13590820 13591650 +17 13654880 13655120 +17 36231170 36231390 +17 39842910 39846780 +17 39846920 39847160 +17 39847090 39847310 +17 39847400 39847720 +17 39847630 39848880 +18 3005550 3005770 +18 3005700 3006050 +18 12949190 12949400 +18 40307970 40308340 +18 68691990 68692230 +19 45650030 45650310 +19 61199640 61199880 +19 61224310 61224530 +19 61266550 61266760 +19 61266920 61267210 +1 24612620 24612850 +1 48881430 48881690 +1 58613870 58614090 +1 78573920 78574140 +1 88217960 88221950 +1 88223300 88224760 +1 133595120 133595340 +1 183299040 183299660 +1 195241610 195241820 +2 3050030 3050410 +2 5379200 5379420 +2 22743580 22743780 +2 22744760 22744980 +2 90395030 90395240 +2 98662130 98663060 +2 98663540 98664150 +2 98664780 98665020 +2 98664970 98665250 +2 98666140 98667390 +2 181917260 181917590 +2 181917550 181917990 +2 181918970 181919260 +2 181928340 181928570 +2 181928950 181929170 +2 181929220 181929430 +2 181930800 181931020 +3 5860530 5860830 +3 8245690 8245930 +3 8246280 8246640 +4 34935690 34935910 +4 70378040 70378320 +4 118548460 118548700 +5 14914900 14915120 +5 15006590 15006820 +5 15462500 15462730 +5 15463060 15463290 +5 15486990 15487190 +5 134378920 134379160 +5 137152130 137152510 +5 146260900 146261410 +6 3201380 3201610 +6 103648970 103649310 +7 12010340 12010870 +8 14306800 14307040 +8 15519790 15520030 +8 19711890 19712070 +9 2999900 3000320 +9 3000270 3000570 +9 3000900 3001100 +9 3001300 3001520 +9 3004390 3004680 +9 3004690 3004900 +9 3005000 3005220 +9 3005800 3006030 +9 3006960 3007180 +9 3008880 3009040 +9 3015170 3015420 +9 3015590 3015830 +9 3016770 3016980 +9 3017410 3017650 +9 3018240 3018540 +9 3018650 3018870 +9 3019220 3019450 +9 3021160 3021370 +9 3021990 3022300 +9 3024660 3024880 +9 3025350 3025690 +9 3026530 3026860 +9 3027010 3027250 +9 3027660 3027880 +9 3028670 3028880 +9 3030040 3030330 +9 3031910 3032130 +9 3032250 3032560 +9 3032570 3032790 +9 3034090 3034300 +9 3034950 3035160 +9 3035610 3036180 +9 3036200 3036480 +9 3036420 3036660 +9 3037250 3037460 +9 3037910 3038120 +9 3038050 3038300 +9 24541940 24542200 +9 35305120 35305620 +9 110281190 110281400 +9 123872950 123873160 diff --git a/assets/blacklists/hg19-blacklist.bed b/assets/blacklists/hg19-blacklist.bed new file mode 100755 index 00000000..a37f0483 --- /dev/null +++ b/assets/blacklists/hg19-blacklist.bed @@ -0,0 +1,411 @@ +chr1 564449 570371 High_Mappability_island 1000 . +chr1 724136 727043 Satellite_repeat 1000 . +chr1 825006 825115 BSR/Beta 1000 . +chr1 2583334 2634374 Low_mappability_island 1000 . +chr1 4363064 4363242 (CATTC)n 1000 . +chr1 5725866 5736651 Low_mappability_island 1000 . +chr1 16839923 16841396 Low_mappability_island 1000 . +chr1 38077347 38077423 Low_mappability_island 1000 . +chr1 91852785 91853147 LSU-rRNA_Hsa 1000 . +chr1 104163724 104163860 Low_mappability_island 1000 . +chr1 108112972 108113707 LSU-rRNA_Hsa 1000 . +chr1 121351474 121487059 centromeric_repeat 1000 . +chr1 142535434 142543081 Satellite_repeat 1000 . +chr1 142723256 142723968 Low_mappability_island 1000 . +chr1 142792613 142793303 Low_mappability_island 1000 . +chr1 142835822 142837333 Low_mappability_island 1000 . +chr1 143274490 143284340 centromeric_repeat 1000 . +chr1 145277108 145277572 LSU-rRNA_Hsa 1000 . +chr1 149033183 149035829 Satellite_repeat 1000 . +chr1 156186169 156186712 High_Mappability_island 1000 . +chr1 224199390 224204260 Satellite_repeat 1000 . +chr1 233318467 233318516 (CATTC)n 1000 . +chr1 236260366 236260821 Low_mappability_island 1000 . +chr1 237766308 237766764 LSU-rRNA_Hsa 1000 . +chr1 238105345 238105511 Low_mappability_island 1000 . +chr1 238108025 238108378 Low_mappability_island 1000 . +chr1 238108645 238109697 Low_mappability_island 1000 . +chr10 18841533 18862467 (CATTC)n 1000 . +chr10 20035661 20037171 Low_mappability_island 1000 . +chr10 36722282 36723650 Low_mappability_island 1000 . +chr10 38772277 38819357 Satellite_repeat 1000 . +chr10 38868892 38889025 Satellite_repeat 1000 . +chr10 39076515 39155771 Satellite_repeat 1000 . +chr10 42354835 42548642 centromeric_repeat 1000 . +chr10 42596676 42602082 Satellite_repeat 1000 . +chr10 42596700 42602110 Satellite_repeat 1000 . +chr10 42661264 42667623 Satellite_repeat 1000 . +chr10 42790522 42818398 Satellite_repeat 1000 . +chr10 135498649 135502716 Satellite_repeat 1000 . +chr11 6831669 6831838 ALR/Alpha 1000 . +chr11 10529403 10531969 Low_mappability_island 1000 . +chr11 48671444 48902406 centromeric_repeat 1000 . +chr11 48931242 48964015 centromeric_repeat 1000 . +chr11 50318471 50784078 centromeric_repeat 1000 . +chr11 51090700 51374066 centromeric_repeat 1000 . +chr11 51567242 51594226 centromeric_repeat 1000 . +chr11 54694046 55027975 centromeric_repeat 1000 . +chr11 73221660 73221946 Low_mappability_island 1000 . +chr11 85194913 85195322 LSU-rRNA_Hsa 1000 . +chr11 87524468 87525005 Low_mappability_island 1000 . +chr11 103275584 103281729 Low_mappability_island 1000 . +chr11 122874287 122874443 Low_mappability_island 1000 . +chr12 20704285 20704583 SSU-rRNA_Hsa 1000 . +chr12 34372315 34372825 LSU-rRNA_Hsa 1000 . +chr12 34432130 34857010 centromeric_repeat 1000 . +chr12 37989447 38441828 centromeric_repeat 1000 . +chr12 38531376 38531930 LSU-rRNA_Hsa 1000 . +chr12 41757383 41757545 Low_mappability_island 1000 . +chr12 127650407 127651075 LSU-rRNA_Hsa 1000 . +chr12 132061320 132062046 Low_mappability_island 1000 . +chr13 56545728 56545925 Low_mappability_island 1000 . +chr13 110076444 110076782 Low_mappability_island 1000 . +chr14 18999935 19056900 centromeric_repeat 1000 . +chr14 32953263 32954381 Low_mappability_island 1000 . +chr14 84637832 84639038 Low_mappability_island 1000 . +chr14 90341302 90341516 SSU-rRNA_Hsa 1000 . +chr15 19999941 20044132 centromeric_repeat 1000 . +chr16 32493036 32570826 ALR/Alpha 1000 . +chr16 32590063 32598801 ALR/Alpha 1000 . +chr16 33237130 33241330 Low_mappability_island 1000 . +chr16 33864355 34023306 centromeric_repeat 1000 . +chr16 34180542 34197081 Satellite_repeat 1000 . +chr16 34530115 34542632 BSR/Beta 1000 . +chr16 35193580 35285885 centromeric_repeat 1000 . +chr16 46385718 46456668 Satellite_repeat 1000 . +chr16 46497639 46500515 Satellite_repeat 1000 . +chr16 47538629 47539297 LSU-rRNA_Hsa 1000 . +chr17 19355538 19356096 LSU-rRNA_Hsa 1000 . +chr17 19502495 19506773 Low_mappability_island 1000 . +chr17 21905167 21906712 centromeric_repeat 1000 . +chr17 22018524 22032049 Low_mappability_island 1000 . +chr17 22221073 22263006 centromeric_repeat 1000 . +chr17 25263010 25268059 Satellite_repeat 1000 . +chr17 25415551 25417559 telomeric_repeat 1000 . +chr17 31149365 31149981 High_Mappability_island 1000 . +chr17 33478114 33478372 LSU-rRNA_Hsa 1000 . +chr17 41381502 41382591 High_Mappability_island 1000 . +chr17 41463538 41464075 High_Mappability_island 1000 . +chr17 41464478 41465015 snRNA 1000 . +chr17 41465562 41467288 High_Mappability_island 1000 . +chr17 51183038 51183763 Low_mappability_island 1000 . +chr17 55868618 55868752 LSU-rRNA_Hsa 1000 . +chr17 75158031 75158430 LSU-rRNA_Hsa 1000 . +chr18 96416 97552 Satellite_repeat 1000 . +chr18 105658 112233 Satellite_repeat 1000 . +chr18 2842252 2842356 Low_mappability_island 1000 . +chr18 15393801 15393992 centromeric_repeat 1000 . +chr18 18510894 18520356 centromeric_repeat 1000 . +chr18 44126235 44126593 (CATTC)n 1000 . +chr18 45379603 45379864 Low_mappability_island 1000 . +chr18 50319086 50319301 Low_mappability_island 1000 . +chr18 77772846 77773065 LSU-rRNA_Hsa 1000 . +chr19 246006 247844 TAR1 1000 . +chr19 22877614 22877696 SSU-rRNA_Hsa 1000 . +chr19 23235030 23235504 BSR/Beta 1000 . +chr19 24182398 24186210 LSU-rRNA_Hsa 1000 . +chr19 24385474 24633168 centromeric_repeat 1000 . +chr19 27730611 28262682 centromeric_repeat 1000 . +chr19 36066445 36066810 LSU-rRNA_Hsa 1000 . +chr19 36756398 36800948 centromeric_repeat 1000 . +chr19 37759473 37797722 centromeric_repeat 1000 . +chr19 44914313 44916340 ACRO1 1000 . +chr19 44960681 44962681 ACRO1 1000 . +chr2 739925 740994 Low_mappability_island 1000 . +chr2 49456729 49457067 Low_mappability_island 1000 . +chr2 88124390 88124903 Low_mappability_island 1000 . +chr2 89830421 89880514 Satellite_repeat 1000 . +chr2 90371401 90394776 Satellite_repeat 1000 . +chr2 90443001 90545431 Low_mappability_island 1000 . +chr2 91595080 91616015 Satellite_repeat 1000 . +chr2 92267428 92326280 centromeric_repeat 1000 . +chr2 115695017 115695281 LSU-rRNA_Hsa 1000 . +chr2 117781085 117781300 Low_mappability_island 1000 . +chr2 132966248 132989300 centromeric_repeat 1000 . +chr2 132994855 133007983 ALR/Alpha 1000 . +chr2 133011824 133013298 SSU-rRNA_Hsa 1000 . +chr2 133036250 133040042 LSU-rRNA_Hsa 1000 . +chr2 133044095 133045945 ACRO1 1000 . +chr2 143848503 143848792 Low_mappability_island 1000 . +chr2 148022736 148022878 Low_mappability_island 1000 . +chr2 149639207 149639515 Low_mappability_island 1000 . +chr2 156120500 156120610 Low_mappability_island 1000 . +chr2 162135000 162139241 Low_mappability_island 1000 . +chr2 230045426 230045796 LSU-rRNA_Hsa 1000 . +chr20 26257032 26320267 centromeric_repeat 1000 . +chr20 29517710 29521147 centromeric_repeat 1000 . +chr20 29803876 29833334 centromeric_repeat 1000 . +chr20 55932703 55936114 chrM 1000 . +chr20 62916702 62918053 telomeric_repeat 1000 . +chr21 9647205 9648529 Low_mappability_island 1000 . +chr21 9694896 9704962 centromeric_repeat 1000 . +chr21 9825451 9827612 High_Mappability_island 1000 . +chr21 9827612 9845233 Low_mappability_island 1000 . +chr21 9881895 9882569 TAR1 1000 . +chr21 10084922 10088004 Satellite_repeat 1000 . +chr21 10492876 10493049 Low_mappability_island 1000 . +chr21 10599428 10599915 TAR1 1000 . +chr21 10697886 10860890 centromeric_repeat 1000 . +chr21 11186054 11188131 Satellite_repeat 1000 . +chr21 14338127 14369791 centromeric_repeat 1000 . +chr21 18800575 18800997 (GAGTG)n 1000 . +chr21 27228003 27228242 SSU-rRNA_Hsa 1000 . +chr21 46796081 46796336 Low_mappability_island 1000 . +chr22 16847814 16862659 Satellite_repeat 1000 . +chr22 18876789 18884510 Satellite_repeat 1000 . +chr3 25508897 25509131 Low_mappability_island 1000 . +chr3 73159606 73161131 snRNA 1000 . +chr3 75696297 75699304 BSR/Beta 1000 . +chr3 75717841 75720426 Satellite_repeat 1000 . +chr3 80995858 81014459 ALR/Alpha 1000 . +chr3 90311686 90507410 centromeric_repeat 1000 . +chr3 93504815 93519133 centromeric_repeat 1000 . +chr3 96335934 96337436 Low_mappability_island 1000 . +chr3 160665423 160665642 Low_mappability_island 1000 . +chr3 196625514 196625860 Satellite_repeat 1000 . +chr3 197825427 197834080 Low_mappability_island 1000 . +chr4 9987 12694 telomeric_repeat 1000 . +chr4 12276463 12292424 ALR/Alpha 1000 . +chr4 12641862 12642305 Low_mappability_island 1000 . +chr4 21583630 21583719 (GAATG)n 1000 . +chr4 27732004 27732240 Low_mappability_island 1000 . +chr4 47774268 47774416 Low_mappability_island 1000 . +chr4 49085372 49342114 centromeric_repeat 1000 . +chr4 49488472 49662085 centromeric_repeat 1000 . +chr4 52659961 52688986 centromeric_repeat 1000 . +chr4 56194229 56194584 Low_mappability_island 1000 . +chr4 65473858 65473941 Low_mappability_island 1000 . +chr4 68264186 68266830 centromeric_repeat 1000 . +chr4 70296565 70296841 LSU-rRNA_Hsa 1000 . +chr4 76807083 76807320 LSU-rRNA_Hsa 1000 . +chr4 78929660 78929920 Low_mappability_island 1000 . +chr4 156374749 156377226 chrM 1000 . +chr4 156384860 156387314 Low_mappability_island 1000 . +chr4 163342479 163342744 Low_mappability_island 1000 . +chr4 190190746 190203442 Low_mappability_island 1000 . +chr4 190801869 190802909 Low_mappability_island 1000 . +chr4 190943802 190943962 Satellite_repeat 1000 . +chr4 190987268 190990949 Satellite_repeat 1000 . +chr4 191026302 191044344 telomeric_repeat 1000 . +chr5 17517177 17600940 Low_mappability_island 1000 . +chr5 21477365 21497415 Low_mappability_island 1000 . +chr5 34177882 34197574 Low_mappability_island 1000 . +chr5 45908253 46411114 centromeric_repeat 1000 . +chr5 49405493 49554574 centromeric_repeat 1000 . +chr5 71146650 71146996 LSU-rRNA_Hsa 1000 . +chr5 79945807 79948223 Low_mappability_island 1000 . +chr5 93903068 93906726 Low_mappability_island 1000 . +chr5 97746525 97746679 Low_mappability_island 1000 . +chr5 99381556 99390873 Low_mappability_island 1000 . +chr5 105889063 105889263 chrM 1000 . +chr5 123095972 123097432 chrM 1000 . +chr5 134258949 134264271 Low_mappability_island 1000 . +chr5 174541634 174542177 SSU-rRNA_Hsa 1000 . +chr6 58735349 58739031 centromeric_repeat 1000 . +chr6 58745955 58780547 centromeric_repeat 1000 . +chr6 61880095 61944008 centromeric_repeat 1000 . +chr6 62189892 62206612 ALR/Alpha 1000 . +chr6 62207809 62230644 ALR/Alpha 1000 . +chr6 62283966 62284581 Low_mappability_island 1000 . +chr6 133593944 133594201 LSU-rRNA_Hsa 1000 . +chr6 137059142 137059326 SSU-rRNA_Hsa 1000 . +chr6 150665074 150665281 SSU-rRNA_Hsa 1000 . +chr6 157731310 157735525 Low_mappability_island 1000 . +chr7 43878355 43878530 TAR1 1000 . +chr7 45291517 45291740 Low_mappability_island 1000 . +chr7 56437808 56442977 Low_mappability_island 1000 . +chr7 57253980 57254183 Low_mappability_island 1000 . +chr7 57255310 57255444 Low_mappability_island 1000 . +chr7 57261829 57261998 Low_mappability_island 1000 . +chr7 57544726 57556913 Satellite_repeat 1000 . +chr7 57811488 57836990 centromeric_repeat 1000 . +chr7 57939184 58055539 centromeric_repeat 1000 . +chr7 61054285 62454680 centromeric_repeat 1000 . +chr7 64059157 64066183 BSR/Beta 1000 . +chr7 64951348 64956223 centromeric_repeat 1000 . +chr7 68201468 68201673 Low_mappability_island 1000 . +chr7 68527370 68527788 LSU-rRNA_Hsa 1000 . +chr7 80962907 80963147 SSU-rRNA_Hsa 1000 . +chr7 100550640 100551321 Low_mappability_island 1000 . +chr7 142372972 142375638 Low_mappability_island 1000 . +chr7 145694403 145694561 Low_mappability_island 1000 . +chr8 155512 157639 TAR1 1000 . +chr8 21455971 21456306 LSU-rRNA_Hsa 1000 . +chr8 32868966 32873279 Low_mappability_island 1000 . +chr8 43092737 43097573 Satellite_repeat 1000 . +chr8 43399486 43843604 centromeric_repeat 1000 . +chr8 46838215 47457541 centromeric_repeat 1000 . +chr8 47739043 47742797 Low_mappability_island 1000 . +chr8 47750844 47776101 BSR/Beta 1000 . +chr8 56754955 56755418 LSU-rRNA_Hsa 1000 . +chr8 69218401 69218922 LSU-rRNA_Hsa 1000 . +chr8 70602248 70602620 LSU-rRNA_Hsa 1000 . +chr8 77114154 77114389 Low_mappability_island 1000 . +chr8 100508010 100508287 Low_mappability_island 1000 . +chr9 10435 11574 TAR1 1000 . +chr9 4799734 4800000 SSU-rRNA_Hsa 1000 . +chr9 33656606 33659249 Low_mappability_island 1000 . +chr9 42819021 42832395 centromeric_repeat 1000 . +chr9 44070617 44070871 Low_mappability_island 1000 . +chr9 44873123 44902307 centromeric_repeat 1000 . +chr9 45355954 45357644 telomeric_repeat 1000 . +chr9 45435109 45443517 centromeric_repeat 1000 . +chr9 66494170 66494805 TAR1 1000 . +chr9 66767710 66864329 centromeric_repeat 1000 . +chr9 66970914 67005594 centromeric_repeat 1000 . +chr9 67315122 67321036 centromeric_repeat 1000 . +chr9 67789868 67792893 centromeric_repeat 1000 . +chr9 68410775 68435115 Low_mappability_island 1000 . +chr9 69677073 69687998 centromeric_repeat 1000 . +chr9 69689770 69711497 centromeric_repeat 1000 . +chr9 69947961 70011196 centromeric_repeat 1000 . +chr9 70076144 70076855 centromeric_repeat 1000 . +chr9 70318723 70327683 centromeric_repeat 1000 . +chr9 72653073 72653572 Satellite_repeat 1000 . +chr9 78790077 78790255 (GAATG)n 1000 . +chr9 79186574 79187026 LSU-rRNA_Hsa 1000 . +chr9 141019938 141021783 TAR1 1000 . +chrM 1 16571 chrM 1000 . +chrX 55206111 55206740 Low_mappability_island 1000 . +chrX 55207753 55208152 Low_mappability_island 1000 . +chrX 55208300 55208643 Low_mappability_island 1000 . +chrX 55208980 55209208 Low_mappability_island 1000 . +chrX 55209655 55210006 Low_mappability_island 1000 . +chrX 58330488 58330843 centromeric_repeat 1000 . +chrX 58373806 58373962 centromeric_repeat 1000 . +chrX 58377680 58377864 centromeric_repeat 1000 . +chrX 58415350 58416387 centromeric_repeat 1000 . +chrX 58432411 58432680 centromeric_repeat 1000 . +chrX 58485887 58486241 centromeric_repeat 1000 . +chrX 58488898 58494528 centromeric_repeat 1000 . +chrX 58499466 58504235 centromeric_repeat 1000 . +chrX 58506076 58528214 centromeric_repeat 1000 . +chrX 58528184 58536883 centromeric_repeat 1000 . +chrX 58544061 58582415 centromeric_repeat 1000 . +chrX 61681834 61919683 centromeric_repeat 1000 . +chrX 62003205 62041580 centromeric_repeat 1000 . +chrX 83658929 83659019 Low_mappability_island 1000 . +chrX 108297348 108297886 LSU-rRNA_Hsa 1000 . +chrX 114959057 115006437 Low_mappability_island 1000 . +chrX 125605623 125607351 Low_mappability_island 1000 . +chrX 125714985 125715338 Low_mappability_island 1000 . +chrX 125864844 125864980 Low_mappability_island 1000 . +chrX 125865719 125865874 Low_mappability_island 1000 . +chrY 313470 313613 ALR/Alpha 1000 . +chrY 3004989 3005175 LSU-rRNA_Hsa 1000 . +chrY 4212807 4212910 Low_mappability_island 1000 . +chrY 7671817 7694928 BSR/Beta 1000 . +chrY 7726064 7730229 BSR/Beta 1000 . +chrY 7730734 7731598 BSR/Beta 1000 . +chrY 7735811 7752887 BSR/Beta 1000 . +chrY 7785067 7806311 BSR/Beta 1000 . +chrY 7806856 7814704 BSR/Beta 1000 . +chrY 7815230 7820478 BSR/Beta 1000 . +chrY 7829937 7832032 BSR/Beta 1000 . +chrY 7832744 7848695 BSR/Beta 1000 . +chrY 7870343 7873582 BSR/Beta 1000 . +chrY 7874115 7874584 BSR/Beta 1000 . +chrY 7875409 7885257 BSR/Beta 1000 . +chrY 7886545 7894591 BSR/Beta 1000 . +chrY 7898927 7916812 BSR/Beta 1000 . +chrY 7918790 7921352 BSR/Beta 1000 . +chrY 7926344 7936705 BSR/Beta 1000 . +chrY 7941130 7947438 BSR/Beta 1000 . +chrY 7948790 7964448 BSR/Beta 1000 . +chrY 8179010 8181143 BSR/Beta 1000 . +chrY 8181757 8213330 BSR/Beta 1000 . +chrY 8214629 8215637 BSR/Beta 1000 . +chrY 8220421 8230061 BSR/Beta 1000 . +chrY 8230686 8231546 BSR/Beta 1000 . +chrY 8240772 8265916 BSR/Beta 1000 . +chrY 8291535 8292942 BSR/Beta 1000 . +chrY 8294002 8295175 BSR/Beta 1000 . +chrY 8296944 8321375 BSR/Beta 1000 . +chrY 8325813 8325929 BSR/Beta 1000 . +chrY 8326678 8333466 BSR/Beta 1000 . +chrY 8334027 8342387 BSR/Beta 1000 . +chrY 8356544 8369346 BSR/Beta 1000 . +chrY 8909560 8909925 TAR1 1000 . +chrY 8979478 8979585 Low_mappability_island 1000 . +chrY 9072781 9072993 TAR1 1000 . +chrY 9908430 9925608 centromeric_repeat 1000 . +chrY 9981952 9982126 BSR/Beta 1000 . +chrY 10034864 10036712 SSU-rRNA_Hsa 1000 . +chrY 10040627 10045657 ALR/Alpha 1000 . +chrY 10047773 10052533 ALR/Alpha 1000 . +chrY 10053695 10057722 ALR/Alpha 1000 . +chrY 10059394 10073694 ALR/Alpha 1000 . +chrY 10075082 10075781 ALR/Alpha 1000 . +chrY 10080736 10104539 ALR/Alpha 1000 . +chrY 13104530 13144368 centromeric_repeat 1000 . +chrY 13193966 13196535 Low_mappability_island 1000 . +chrY 13252193 13259484 centromeric_repeat 1000 . +chrY 13290177 13290667 chrM 1000 . +chrY 13445957 13490591 Satellite_repeat 1000 . +chrY 13642186 13749784 Satellite_repeat 1000 . +chrY 13798522 13870984 Satellite_repeat 1000 . +chrY 19691913 19692524 LSU-rRNA_Hsa 1000 . +chrY 19764063 19776198 ALR/Alpha 1000 . +chrY 19780600 19781704 ALR/Alpha 1000 . +chrY 19783669 19796396 ALR/Alpha 1000 . +chrY 19800068 19801419 ALR/Alpha 1000 . +chrY 19808085 19817100 ALR/Alpha 1000 . +chrY 19944298 19944581 TAR1 1000 . +chrY 20235195 20235478 TAR1 1000 . +chrY 20362679 20371694 ALR/Alpha 1000 . +chrY 20378360 20379711 ALR/Alpha 1000 . +chrY 20383383 20396110 ALR/Alpha 1000 . +chrY 20398075 20399179 ALR/Alpha 1000 . +chrY 20403581 20415713 ALR/Alpha 1000 . +chrY 20487248 20487859 LSU-rRNA_Hsa 1000 . +chrY 23124788 23125577 BSR/Beta 1000 . +chrY 23149027 23151205 BSR/Beta 1000 . +chrY 23157969 23158245 BSR/Beta 1000 . +chrY 23159001 23167737 BSR/Beta 1000 . +chrY 23178886 23181770 BSR/Beta 1000 . +chrY 23220740 23223625 BSR/Beta 1000 . +chrY 23234125 23235822 BSR/Beta 1000 . +chrY 23236898 23248080 BSR/Beta 1000 . +chrY 23248729 23248851 BSR/Beta 1000 . +chrY 23899295 23899388 TAR1 1000 . +chrY 23956449 23956628 TAR1 1000 . +chrY 24247659 24247700 TAR1 1000 . +chrY 24630999 24631040 TAR1 1000 . +chrY 24953159 24975657 BSR/Beta 1000 . +chrY 24980997 24991235 BSR/Beta 1000 . +chrY 25022753 25039185 BSR/Beta 1000 . +chrY 25040153 25042421 BSR/Beta 1000 . +chrY 25048332 25059258 BSR/Beta 1000 . +chrY 25060235 25064798 BSR/Beta 1000 . +chrY 25099139 25121882 BSR/Beta 1000 . +chrY 25122419 25160800 BSR/Beta 1000 . +chrY 25182404 25192372 BSR/Beta 1000 . +chrY 25217722 25219409 BSR/Beta 1000 . +chrY 25493588 25495275 BSR/Beta 1000 . +chrY 26148315 26148450 TAR1 1000 . +chrY 26586905 26609405 BSR/Beta 1000 . +chrY 26614745 26624983 BSR/Beta 1000 . +chrY 26656502 26672934 BSR/Beta 1000 . +chrY 26673902 26676170 BSR/Beta 1000 . +chrY 26682081 26693007 BSR/Beta 1000 . +chrY 26693984 26698547 BSR/Beta 1000 . +chrY 26732883 26755623 BSR/Beta 1000 . +chrY 26756160 26794538 BSR/Beta 1000 . +chrY 26816148 26826116 BSR/Beta 1000 . +chrY 26851466 26853153 BSR/Beta 1000 . +chrY 27109247 27110934 BSR/Beta 1000 . +chrY 27136281 27146249 BSR/Beta 1000 . +chrY 27167859 27206241 BSR/Beta 1000 . +chrY 27206778 27229502 BSR/Beta 1000 . +chrY 27263848 27268411 BSR/Beta 1000 . +chrY 27269388 27280315 BSR/Beta 1000 . +chrY 27286226 27288494 BSR/Beta 1000 . +chrY 27289462 27305895 BSR/Beta 1000 . +chrY 27337415 27347656 BSR/Beta 1000 . +chrY 27352996 27375497 BSR/Beta 1000 . +chrY 27813984 27814119 TAR1 1000 . +chrY 28555026 28555353 TAR1 1000 . +chrY 28784129 28819695 Satellite_repeat 1000 . +chrY 58819367 58917648 (CATTC)n 1000 . +chrY 58971913 58997782 (CATTC)n 1000 . +chrY 59361267 59362785 TAR1 1000 . diff --git a/assets/blacklists/hg38-blacklist.bed b/assets/blacklists/hg38-blacklist.bed new file mode 100644 index 00000000..c3e00911 --- /dev/null +++ b/assets/blacklists/hg38-blacklist.bed @@ -0,0 +1,38 @@ +chr10 38528030 38529790 +chr10 42070420 42070660 +chr16 34571420 34571640 +chr16 34572700 34572930 +chr16 34584530 34584840 +chr16 34585000 34585220 +chr16 34585700 34586380 +chr16 34586660 34587100 +chr16 34587060 34587660 +chr16 34587900 34588170 +chr16 34593000 34593590 +chr16 34594490 34594720 +chr16 34594900 34595150 +chr16 34595320 34595570 +chr16 46380910 46381140 +chr16 46386270 46386530 +chr16 46390180 46390930 +chr16 46394370 46395100 +chr16 46395670 46395910 +chr16 46398780 46399020 +chr16 46400700 46400970 +chr1 124450730 124450960 +chr20 28513520 28513770 +chr20 31060210 31060770 +chr20 31061050 31061560 +chr20 31063990 31064490 +chr20 31067930 31069060 +chr20 31069000 31069280 +chr21 8219780 8220120 +chr21 8234330 8234620 +chr2 90397520 90397900 +chr2 90398120 90398760 +chr3 93470260 93470870 +chr4 49118760 49119010 +chr4 49120790 49121130 +chr5 49601430 49602300 +chr5 49657080 49657690 +chr5 49661330 49661570 diff --git a/assets/blacklists/mm10-blacklist.bed b/assets/blacklists/mm10-blacklist.bed new file mode 100755 index 00000000..8c71cd3b --- /dev/null +++ b/assets/blacklists/mm10-blacklist.bed @@ -0,0 +1,164 @@ +chr10 3110060 3110270 +chr10 22142530 22142880 +chr10 22142830 22143070 +chr10 58223870 58224100 +chr10 58225260 58225500 +chr10 58228320 58228520 +chr11 3148660 3148860 +chr11 3154960 3155170 +chr11 3158530 3158750 +chr11 3161780 3161990 +chr11 3167020 3167250 +chr11 3169390 3169620 +chr11 3172450 3172670 +chr11 3172950 3173190 +chr11 3184190 3185750 +chr11 3185700 3186360 +chr11 3186330 3189230 +chr11 3189190 3190740 +chr11 3190750 3191000 +chr11 3190960 3194430 +chr11 3194400 3195310 +chr11 3195240 3197220 +chr11 3197340 3197950 +chr11 3197890 3198700 +chr11 3198630 3199440 +chr11 3199350 3200120 +chr11 54139940 54140230 +chr11 54140470 54140740 +chr11 88967720 88969600 +chr11 88969850 88970350 +chr11 109011550 109012090 +chr12 3109920 3110150 +chr12 105436040 105436270 +chr13 3372960 3373380 +chr13 3373410 3373630 +chr13 77438870 77439090 +chr13 97190460 97190690 +chr13 99790830 99791090 +chr13 119488570 119489320 +chr13 119597600 119598320 +chr13 119599860 119600050 +chr13 119601360 119601600 +chr13 119601800 119602210 +chr13 119602360 119602580 +chr13 119609430 119611430 +chr13 119612760 119613370 +chr13 119613360 119617690 +chr14 19415650 19417330 +chr14 19417240 19417660 +chr14 19417570 19418920 +chr14 19418830 19419720 +chr14 47454330 47454510 +chr15 75085430 75085920 +chr15 75085990 75086240 +chr15 75086150 75086550 +chr15 75086540 75087110 +chr16 11143960 11144170 +chr16 57391420 57391740 +chr17 13305860 13306280 +chr17 13590820 13591650 +chr17 13654880 13655120 +chr17 36231170 36231390 +chr17 39842910 39846780 +chr17 39846920 39847160 +chr17 39847090 39847310 +chr17 39847400 39847720 +chr17 39847630 39848880 +chr18 3005550 3005770 +chr18 3005700 3006050 +chr18 12949190 12949400 +chr18 40307970 40308340 +chr18 68691990 68692230 +chr19 45650030 45650310 +chr19 61199640 61199880 +chr19 61224310 61224530 +chr19 61266550 61266760 +chr19 61266920 61267210 +chr1 24612620 24612850 +chr1 48881430 48881690 +chr1 58613870 58614090 +chr1 78573920 78574140 +chr1 88217960 88221950 +chr1 88223300 88224760 +chr1 133595120 133595340 +chr1 183299040 183299660 +chr1 195241610 195241820 +chr2 3050030 3050410 +chr2 5379200 5379420 +chr2 22743580 22743780 +chr2 22744760 22744980 +chr2 90395030 90395240 +chr2 98662130 98663060 +chr2 98663540 98664150 +chr2 98664780 98665020 +chr2 98664970 98665250 +chr2 98666140 98667390 +chr2 181917260 181917590 +chr2 181917550 181917990 +chr2 181918970 181919260 +chr2 181928340 181928570 +chr2 181928950 181929170 +chr2 181929220 181929430 +chr2 181930800 181931020 +chr3 5860530 5860830 +chr3 8245690 8245930 +chr3 8246280 8246640 +chr4 34935690 34935910 +chr4 70378040 70378320 +chr4 118548460 118548700 +chr5 14914900 14915120 +chr5 15006590 15006820 +chr5 15462500 15462730 +chr5 15463060 15463290 +chr5 15486990 15487190 +chr5 134378920 134379160 +chr5 137152130 137152510 +chr5 146260900 146261410 +chr6 3201380 3201610 +chr6 103648970 103649310 +chr7 12010340 12010870 +chr8 14306800 14307040 +chr8 15519790 15520030 +chr8 19711890 19712070 +chr9 2999900 3000320 +chr9 3000270 3000570 +chr9 3000900 3001100 +chr9 3001300 3001520 +chr9 3004390 3004680 +chr9 3004690 3004900 +chr9 3005000 3005220 +chr9 3005800 3006030 +chr9 3006960 3007180 +chr9 3008880 3009040 +chr9 3015170 3015420 +chr9 3015590 3015830 +chr9 3016770 3016980 +chr9 3017410 3017650 +chr9 3018240 3018540 +chr9 3018650 3018870 +chr9 3019220 3019450 +chr9 3021160 3021370 +chr9 3021990 3022300 +chr9 3024660 3024880 +chr9 3025350 3025690 +chr9 3026530 3026860 +chr9 3027010 3027250 +chr9 3027660 3027880 +chr9 3028670 3028880 +chr9 3030040 3030330 +chr9 3031910 3032130 +chr9 3032250 3032560 +chr9 3032570 3032790 +chr9 3034090 3034300 +chr9 3034950 3035160 +chr9 3035610 3036180 +chr9 3036200 3036480 +chr9 3036420 3036660 +chr9 3037250 3037460 +chr9 3037910 3038120 +chr9 3038050 3038300 +chr9 24541940 24542200 +chr9 35305120 35305620 +chr9 110281190 110281400 +chr9 123872950 123873160 diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 6425c8b9..42c417ef 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -2,6 +2,8 @@ # coding: utf-8 import os +import glob +import re import numpy as np import pandas as pd import matplotlib.pyplot as plt @@ -12,10 +14,14 @@ class Figures: data_table = None + frag_hist = None + frag_violin = None - def __init__(self, logger, data): + def __init__(self, logger, meta, frags): self.logger = logger - self.data_path = data + self.meta_path = meta + self.frag_path = frags + sns.set() sns.set_theme() sns.set_context("paper") @@ -29,8 +35,39 @@ def format_thousands(self, x, pos): return '%1.1fK' % (x * 1e-3) def load_data(self): - self.data_table = pd.read_csv(self.data_path, sep=',') + self.data_table = pd.read_csv(self.meta_path, sep=',') + + # Create list of deeptools raw fragment files + dt_frag_list = glob.glob(self.frag_path) + + for i in list(range(len(dt_frag_list))): + # create dataframe from csv file for each file and save to a list + dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', skiprows=[0], header=0) + + # create long forms of fragment histograms + dt_frag_i_long = np.repeat(dt_frag_i['Size'].values, dt_frag_i['Occurrences'].values) + dt_sample_i_long = np.repeat(dt_frag_i['Sample'][0], len(dt_frag_i_long)) + + if i==0: + frags_arr = dt_frag_i_long + sample_arr = dt_sample_i_long + self.frag_hist = dt_frag_i + else: + frags_arr = np.append(frags_arr, dt_frag_i_long) + sample_arr = np.append(sample_arr, dt_sample_i_long) + self.frag_hist = self.frag_hist.append(dt_frag_i) + # create hue array using regex pattern matching + for i in list(range(0,len(sample_arr))): + sample_i = sample_arr[i] + sample_exp = re.findall("^[^_]*", sample_i) + + if i==0: + sample_exp_arr = np.array(sample_exp[0]) + else: + sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) + + self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) def annotate_data(self): # Make new perctenage alignment columns @@ -58,8 +95,17 @@ def generate_plots(self): plot2, data2 = self.duplication_summary() plots["duplication_summary"] = plot2 data["duplication_summary"] = data2 - + # Plot 3 + plot3, data3 = self.fraglen_summary_violin() + plots["frag_violin"] = plot3 + data["frag_violin"] = data3 + + # Plot 4 + plot4, data4 = self.fraglen_summary_histogram() + plots["frag_hist"] = plot4 + data["frag_hist"] = data4 + return (plots, data) def generate_dash_plots(self): @@ -144,7 +190,7 @@ def alignment_summary(self): return fig, df_data - # ---------- Plot 2 - Duplication Summary --------- # + # ---------- Plot 2 - Duplication Summary --------- # def duplication_summary(self): # Init k_formatter = FuncFormatter(self.format_thousands) @@ -155,8 +201,6 @@ def duplication_summary(self): df_data['dedup_percent_duplication'] *= 100 df_data['unique_frag_num'] = df_data['dedup_read_pairs_examined'] * (1-df_data['dedup_percent_duplication']/100) - #"dedup_library,dedup_unpaired_reads_examined,dedup_read_pairs_examined,dedup_secondary_or_supplementary_rds,dedup_unmapped_reads,dedup_unpaired_read_duplicates,dedup_read_pair_duplicates,dedup_read_pair_optical_duplicates,dedup_percent_duplication,dedup_estimated_library_size" - ## Construct quad plot fig, seq_summary = plt.subplots(1,3) fig.suptitle("Duplication Summary") @@ -184,113 +228,24 @@ def duplication_summary(self): return fig, df_data - def alignment_summary_ex(self): - # Subset data - df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] + + # ---------- Plot 3 - Fragment Distribution Violin --------- # + def fraglen_summary_violin(self): + fig, ax = plt.subplots() + ax = sns.violinplot(data=self.frag_violin, x="sample", y="fragment_size", hue="histone_mark") - fig = px.box(df_data, x="group", y="bt2_total_reads_target") + return fig, self.frag_violin - return fig, df_data + # ---------- Plot 4 - Fragment Distribution Histogram --------- # + def fraglen_summary_histogram(self): + fig, ax = plt.subplots() + ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="Sample") + + return fig, self.frag_hist + + def alignment_summary_ex(self): + df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] + ax = px.box(df_data, x="group", y="bt2_total_reads_target") - # plt.yticks(np.arange(0, 100, 10)) -# import glob -# -# import re - - -# # ---------- Plots 2&3 - Mapped Fragment Distribution --------- # - -# # Parse './' to fragments argument as we expect all data to be in the same directory. -# fragments = args.exp_fragments - -# # Create list of deeptools raw fragment files -# dt_frag_list = glob.glob(fragments + '*raw.csv') - -# df_list = list() -# for i in list(range(0,len(dt_frag_list))): -# # create dataframe from csv file for each file and save to a list -# dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', skiprows=[0], header=0) -# df_list.append( dt_frag_i ) - -# # create long forms of fragment histograms -# dt_frag_i_long = np.repeat(dt_frag_i['Size'].values, dt_frag_i['Occurrences'].values) -# dt_sample_i_long = np.repeat(dt_frag_i['Sample'][0], len(dt_frag_i_long)) - -# if i==0: -# frags_arr = dt_frag_i_long -# sample_arr = dt_sample_i_long -# og_frag_df = dt_frag_i -# else: -# frags_arr = np.append(frags_arr, dt_frag_i_long) -# sample_arr = np.append(sample_arr, dt_sample_i_long) -# og_frag_df = og_frag_df.append(dt_frag_i) - -# # create hue array using regex pattern matching -# for i in list(range(0,len(sample_arr))): -# sample_i = sample_arr[i] -# sample_exp = re.findall("^[^_]*", sample_i) - -# if i==0: -# sample_exp_arr = np.array(sample_exp[0]) -# else: -# sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) - -# df_long = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) -# df_long.to_csv('./fragmanet_distribution_violin.csv', index=False) -# og_frag_df.to_csv('./fragmanet_distribution_line.csv', index=False) -# # print(df_long) - -# plt.clf() -# ax1 = sns.violinplot(data=df_long, x="sample", y="fragment_size", hue="histone_mark") -# # plt.show() -# fig1 = ax1.get_figure() -# fig1.savefig('fragmanet_distribution_violin.png') - -# plt.clf() -# ax2 = sns.lineplot(data=og_frag_df, x="Size", y="Occurrences", hue="Sample") -# # plt.show() -# fig2 = ax2.get_figure() -# fig2.savefig('fragmanet_distribution_line.png') - -# import datetime -# import numpy as np -# from matplotlib.backends.backend_pdf import PdfPages -# import matplotlib.pyplot as plt - -# # Create the PdfPages object to which we will save the pages: -# # The with statement makes sure that the PdfPages object is closed properly at -# # the end of the block, even if an Exception occurs. -# with PdfPages('multipage_pdf.pdf') as pdf: -# plt.figure(figsize=(3, 3)) -# plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o') -# plt.title('Page One') -# pdf.savefig() # saves the current figure into a pdf page -# plt.close() - -# # if LaTeX is not installed or error caught, change to `usetex=False` -# plt.rc('text', usetex=True) -# plt.figure(figsize=(8, 6)) -# x = np.arange(0, 5, 0.1) -# plt.plot(x, np.sin(x), 'b-') -# plt.title('Page Two') -# pdf.attach_note("plot of sin(x)") # you can add a pdf note to -# # attach metadata to a page -# pdf.savefig() -# plt.close() - -# plt.rc('text', usetex=False) -# fig = plt.figure(figsize=(4, 5)) -# plt.plot(x, x ** 2, 'ko') -# plt.title('Page Three') -# pdf.savefig(fig) # or you can pass a Figure object to pdf.savefig -# plt.close() - -# # We can also set the file's metadata via the PdfPages object: -# d = pdf.infodict() -# d['Title'] = 'Multipage PDF Example' -# d['Author'] = 'Jouni K. Sepp\xe4nen' -# d['Subject'] = 'How to create a multipage pdf file and set its metadata' -# d['Keywords'] = 'PdfPages multipage keywords author title subject' -# d['CreationDate'] = datetime.datetime(2009, 11, 13) -# d['ModDate'] = datetime.datetime.today() \ No newline at end of file + return ax, df_data \ No newline at end of file diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index c5007eb9..45ffdf0d 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -31,12 +31,13 @@ def init_logger(app_name, log_file = None): return logger def gen_png(parsed_args): - input_path = parsed_args.input + meta_path = parsed_args.meta + frag_path = parsed_args.raw_frag output_path = parsed_args.output logger = init_logger('gen_img', parsed_args.log) logger.info('Generating plots to output folder') - fig = Figures(logger, input_path) + fig = Figures(logger, meta_path, frag_path) fig.gen_plots_to_folder(output_path) logger.info('Completed') @@ -49,7 +50,8 @@ def gen_png(parsed_args): # Functions parser_genimg = subparsers.add_parser('genimg', help='generate images help') parser_genimg.set_defaults(func=gen_png) - parser_genimg.add_argument('--input', required=True) + parser_genimg.add_argument('--meta', required=True) + parser_genimg.add_argument('--raw_frag', required=True) parser_genimg.add_argument('--output', required=True) parser_genimg.add_argument('--log', required=False) diff --git a/conf/modules.config b/conf/modules.config index 578b6cce..755639b5 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -123,6 +123,9 @@ params { 'ucsc_bedgraphtobigwig' { publish_dir = "${params.aligner}/bigwig" } + 'deeptools_fragmentsize' { + publish_dir = "deeptools" + } 'igv' { publish_dir = "igv" @@ -138,6 +141,11 @@ params { command = "'/^[^#]/{print}'" command2 = "| head -2 | sed 's/\\t/,/g' - | sed 's/.*/\\L&/g' -" } + 'awk_dt_frag' { + args = "" + suffix = ".dt.frag" + publish_dir = "awk/dt" + } 'export_meta' { publish_dir = "meta" } diff --git a/conf/test_hg38_chr7.config b/conf/test_hg38_chr7.config index b2380af5..97e935d0 100644 --- a/conf/test_hg38_chr7.config +++ b/conf/test_hg38_chr7.config @@ -13,5 +13,6 @@ params { input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" genome = 'GRCh38' } diff --git a/cutandrun.nf b/cutandrun.nf index fd3b5ba5..d15aaf9b 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -13,6 +13,7 @@ checkPathParamList = [ params.input, params.fasta, params.gtf, + params.blacklist, params.bowtie2_index, params.spikein_fasta, params.spikein_bowtie2_index @@ -23,6 +24,7 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } if (params.gtf) { ch_gtf = file(params.gtf) } else { exit 1, 'Genome GTF file not specified!' } +if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, 'Genome blacklist file not specified!' } // Resolve spike-in genome def spikein_fasta = params.spikein_fasta @@ -58,6 +60,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi ch_dummy_file = file("dummy/file", checkIfExists: false) ch_bt2_to_csv_awk = file("$projectDir/assets/awk/bt2_report_to_csv.awk", checkIfExists: true) +ch_dt_frag_to_csv_awk = file("$projectDir/assets/awk/dt_frag_report_to_csv.awk", checkIfExists: true) //////////////////////////////////////////////////// /* -- INIALISE PARAMETERS AND OPTIONS -- */ @@ -127,6 +130,7 @@ if(params.dedup_target_reads) { dedup_control_only = false } def awk_bt2_options = modules['awk_bt2'] def awk_bt2_spikein_options = modules['awk_bt2_spikein'] def awk_dedup_options = modules['awk_dedup'] +def awk_dt_frag_options = modules['awk_dt_frag'] //////////////////////////////////////////////////// /* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ @@ -145,6 +149,7 @@ include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_ include { MULTIQC } from './modules/local/process/multiqc' addParams( options: multiqc_options ) include { EXPORT_META } from './modules/local/process/export_meta' addParams( options: modules['export_meta'] ) include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) +include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -161,7 +166,8 @@ include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' add include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) +include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -354,6 +360,11 @@ workflow CUTANDRUN { [ row[0], row[1], row[2] ] } .set { ch_samtools_bam_scale } + //Create channel without scale as seperate value + ch_samtools_bam_scale + .map { row -> [ row[0], row[1] ] } + .set { ch_samtools_bam_meta } + if(!params.skip_coverage) { /* * MODULE: Convert to bedgraph @@ -419,9 +430,9 @@ workflow CUTANDRUN { /* * MODULE: Collect software versions used in pipeline */ - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() - ) + // GET_SOFTWARE_VERSIONS ( + // ch_software_versions.map { it }.collect() + // ) /* * MODULE: Multiqc @@ -452,15 +463,35 @@ workflow CUTANDRUN { * MODULE: Reporting */ if (!params.skip_reporting) { - ANNOTATE_DEDUP_META(ch_samtools_bam_scale, ch_markduplicates_multiqc, ch_dummy_file.collect()) + ANNOTATE_DEDUP_META(ch_samtools_bam_meta, ch_markduplicates_multiqc, ch_dummy_file.collect()) //ANNOTATE_DEDUP_META.out.output | view + ch_samtools_bam + .map { row -> [row[0].id, row[0], row[1] ] } + .set { ch_samtools_bam_id } + + ch_samtools_bai + .map { row -> [row[0].id, row[0], row[1] ] } + .set { ch_samtools_bai_id } + + ch_samtools_bam_id + .join( ch_samtools_bai_id ) + .map { row -> [row[1], row[2], row[4] ] } + .set { ch_samtools_bam_bai } + //ch_samtools_bam_bai | view + + DEEPTOOLS_BAMPEFRAGMENTSIZE(ch_samtools_bam_bai, ch_blacklist) + //DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv | view + + ANNOTATE_DT_FRAG_META( ANNOTATE_DEDUP_META.out.output, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv, ch_dt_frag_to_csv_awk) + //ANNOTATE_DT_FRAG_META.out.output | view + EXPORT_META ( ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) - GENERATE_REPORTS(EXPORT_META.out.csv) + GENERATE_REPORTS(EXPORT_META.out.csv, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}) } } diff --git a/dev/docker/static_reports/run.sh b/dev/docker/static_reports/run.sh index 82f97bba..4851fde8 100755 --- a/dev/docker/static_reports/run.sh +++ b/dev/docker/static_reports/run.sh @@ -1,6 +1,7 @@ #!/bin/bash docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/python/reporting/main.py genimg \ ---input /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ +--meta /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ +--raw_frag /home/repo/dev/docker/static_reports/test_data/*_raw.csv \ --output /home/repo/dev/docker/static_reports/test_output \ --log /home/repo/dev/docker/static_reports/test_output/log.txt \ No newline at end of file diff --git a/dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv b/dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv new file mode 100644 index 00000000..9ff4db98 --- /dev/null +++ b/dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv @@ -0,0 +1,470 @@ +#bamPEFragmentSize +Size Occurrences Sample +28 1 h3k27me3_R1.markdup.bam +31 1 h3k27me3_R1.markdup.bam +33 2 h3k27me3_R1.markdup.bam +34 1 h3k27me3_R1.markdup.bam +35 1 h3k27me3_R1.markdup.bam +37 1 h3k27me3_R1.markdup.bam +39 2 h3k27me3_R1.markdup.bam +40 2 h3k27me3_R1.markdup.bam +41 5 h3k27me3_R1.markdup.bam +42 1 h3k27me3_R1.markdup.bam +43 2 h3k27me3_R1.markdup.bam +44 1 h3k27me3_R1.markdup.bam +45 3 h3k27me3_R1.markdup.bam +46 3 h3k27me3_R1.markdup.bam +47 1 h3k27me3_R1.markdup.bam +50 2 h3k27me3_R1.markdup.bam +51 2 h3k27me3_R1.markdup.bam +52 6 h3k27me3_R1.markdup.bam +53 4 h3k27me3_R1.markdup.bam +54 5 h3k27me3_R1.markdup.bam +55 3 h3k27me3_R1.markdup.bam +56 2 h3k27me3_R1.markdup.bam +57 3 h3k27me3_R1.markdup.bam +58 4 h3k27me3_R1.markdup.bam +59 5 h3k27me3_R1.markdup.bam +60 1 h3k27me3_R1.markdup.bam +61 3 h3k27me3_R1.markdup.bam +62 4 h3k27me3_R1.markdup.bam +63 4 h3k27me3_R1.markdup.bam +64 3 h3k27me3_R1.markdup.bam +65 3 h3k27me3_R1.markdup.bam +67 3 h3k27me3_R1.markdup.bam +68 3 h3k27me3_R1.markdup.bam +70 2 h3k27me3_R1.markdup.bam +71 1 h3k27me3_R1.markdup.bam +72 2 h3k27me3_R1.markdup.bam +73 3 h3k27me3_R1.markdup.bam +74 2 h3k27me3_R1.markdup.bam +75 3 h3k27me3_R1.markdup.bam +76 1 h3k27me3_R1.markdup.bam +77 2 h3k27me3_R1.markdup.bam +78 1 h3k27me3_R1.markdup.bam +79 1 h3k27me3_R1.markdup.bam +80 1 h3k27me3_R1.markdup.bam +81 4 h3k27me3_R1.markdup.bam +82 1 h3k27me3_R1.markdup.bam +83 3 h3k27me3_R1.markdup.bam +86 2 h3k27me3_R1.markdup.bam +88 2 h3k27me3_R1.markdup.bam +91 1 h3k27me3_R1.markdup.bam +92 2 h3k27me3_R1.markdup.bam +94 2 h3k27me3_R1.markdup.bam +96 3 h3k27me3_R1.markdup.bam +97 1 h3k27me3_R1.markdup.bam +98 2 h3k27me3_R1.markdup.bam +99 1 h3k27me3_R1.markdup.bam +100 1 h3k27me3_R1.markdup.bam +101 1 h3k27me3_R1.markdup.bam +103 1 h3k27me3_R1.markdup.bam +106 1 h3k27me3_R1.markdup.bam +110 1 h3k27me3_R1.markdup.bam +114 1 h3k27me3_R1.markdup.bam +115 1 h3k27me3_R1.markdup.bam +117 2 h3k27me3_R1.markdup.bam +122 3 h3k27me3_R1.markdup.bam +124 1 h3k27me3_R1.markdup.bam +128 1 h3k27me3_R1.markdup.bam +132 2 h3k27me3_R1.markdup.bam +133 1 h3k27me3_R1.markdup.bam +137 1 h3k27me3_R1.markdup.bam +138 1 h3k27me3_R1.markdup.bam +139 1 h3k27me3_R1.markdup.bam +140 1 h3k27me3_R1.markdup.bam +141 3 h3k27me3_R1.markdup.bam +142 2 h3k27me3_R1.markdup.bam +143 3 h3k27me3_R1.markdup.bam +144 1 h3k27me3_R1.markdup.bam +145 1 h3k27me3_R1.markdup.bam +146 2 h3k27me3_R1.markdup.bam +147 4 h3k27me3_R1.markdup.bam +149 1 h3k27me3_R1.markdup.bam +150 3 h3k27me3_R1.markdup.bam +151 2 h3k27me3_R1.markdup.bam +152 1 h3k27me3_R1.markdup.bam +153 1 h3k27me3_R1.markdup.bam +154 2 h3k27me3_R1.markdup.bam +155 3 h3k27me3_R1.markdup.bam +156 6 h3k27me3_R1.markdup.bam +157 5 h3k27me3_R1.markdup.bam +158 3 h3k27me3_R1.markdup.bam +159 2 h3k27me3_R1.markdup.bam +160 1 h3k27me3_R1.markdup.bam +161 4 h3k27me3_R1.markdup.bam +162 3 h3k27me3_R1.markdup.bam +163 6 h3k27me3_R1.markdup.bam +164 9 h3k27me3_R1.markdup.bam +165 7 h3k27me3_R1.markdup.bam +166 9 h3k27me3_R1.markdup.bam +167 8 h3k27me3_R1.markdup.bam +168 6 h3k27me3_R1.markdup.bam +169 7 h3k27me3_R1.markdup.bam +170 6 h3k27me3_R1.markdup.bam +171 1 h3k27me3_R1.markdup.bam +172 4 h3k27me3_R1.markdup.bam +173 2 h3k27me3_R1.markdup.bam +174 9 h3k27me3_R1.markdup.bam +175 8 h3k27me3_R1.markdup.bam +176 17 h3k27me3_R1.markdup.bam +177 5 h3k27me3_R1.markdup.bam +178 3 h3k27me3_R1.markdup.bam +179 10 h3k27me3_R1.markdup.bam +180 9 h3k27me3_R1.markdup.bam +181 11 h3k27me3_R1.markdup.bam +182 4 h3k27me3_R1.markdup.bam +183 10 h3k27me3_R1.markdup.bam +184 6 h3k27me3_R1.markdup.bam +185 14 h3k27me3_R1.markdup.bam +186 1 h3k27me3_R1.markdup.bam +187 4 h3k27me3_R1.markdup.bam +188 11 h3k27me3_R1.markdup.bam +189 14 h3k27me3_R1.markdup.bam +190 11 h3k27me3_R1.markdup.bam +191 13 h3k27me3_R1.markdup.bam +192 11 h3k27me3_R1.markdup.bam +193 14 h3k27me3_R1.markdup.bam +194 13 h3k27me3_R1.markdup.bam +195 7 h3k27me3_R1.markdup.bam +196 10 h3k27me3_R1.markdup.bam +197 10 h3k27me3_R1.markdup.bam +198 14 h3k27me3_R1.markdup.bam +199 8 h3k27me3_R1.markdup.bam +200 6 h3k27me3_R1.markdup.bam +201 8 h3k27me3_R1.markdup.bam +202 11 h3k27me3_R1.markdup.bam +203 11 h3k27me3_R1.markdup.bam +204 12 h3k27me3_R1.markdup.bam +205 6 h3k27me3_R1.markdup.bam +206 13 h3k27me3_R1.markdup.bam +207 9 h3k27me3_R1.markdup.bam +208 13 h3k27me3_R1.markdup.bam +209 9 h3k27me3_R1.markdup.bam +210 16 h3k27me3_R1.markdup.bam +211 5 h3k27me3_R1.markdup.bam +212 7 h3k27me3_R1.markdup.bam +213 4 h3k27me3_R1.markdup.bam +214 12 h3k27me3_R1.markdup.bam +215 9 h3k27me3_R1.markdup.bam +216 10 h3k27me3_R1.markdup.bam +217 11 h3k27me3_R1.markdup.bam +218 14 h3k27me3_R1.markdup.bam +219 7 h3k27me3_R1.markdup.bam +220 13 h3k27me3_R1.markdup.bam +221 8 h3k27me3_R1.markdup.bam +222 11 h3k27me3_R1.markdup.bam +223 13 h3k27me3_R1.markdup.bam +224 9 h3k27me3_R1.markdup.bam +225 15 h3k27me3_R1.markdup.bam +226 8 h3k27me3_R1.markdup.bam +227 6 h3k27me3_R1.markdup.bam +228 4 h3k27me3_R1.markdup.bam +229 3 h3k27me3_R1.markdup.bam +230 7 h3k27me3_R1.markdup.bam +231 8 h3k27me3_R1.markdup.bam +232 3 h3k27me3_R1.markdup.bam +233 11 h3k27me3_R1.markdup.bam +234 8 h3k27me3_R1.markdup.bam +235 3 h3k27me3_R1.markdup.bam +236 4 h3k27me3_R1.markdup.bam +237 5 h3k27me3_R1.markdup.bam +238 6 h3k27me3_R1.markdup.bam +239 5 h3k27me3_R1.markdup.bam +240 4 h3k27me3_R1.markdup.bam +241 3 h3k27me3_R1.markdup.bam +242 2 h3k27me3_R1.markdup.bam +243 5 h3k27me3_R1.markdup.bam +244 7 h3k27me3_R1.markdup.bam +245 3 h3k27me3_R1.markdup.bam +246 6 h3k27me3_R1.markdup.bam +247 5 h3k27me3_R1.markdup.bam +248 5 h3k27me3_R1.markdup.bam +249 3 h3k27me3_R1.markdup.bam +250 3 h3k27me3_R1.markdup.bam +251 4 h3k27me3_R1.markdup.bam +252 5 h3k27me3_R1.markdup.bam +253 3 h3k27me3_R1.markdup.bam +254 2 h3k27me3_R1.markdup.bam +255 3 h3k27me3_R1.markdup.bam +256 1 h3k27me3_R1.markdup.bam +257 5 h3k27me3_R1.markdup.bam +258 3 h3k27me3_R1.markdup.bam +259 6 h3k27me3_R1.markdup.bam +260 2 h3k27me3_R1.markdup.bam +261 1 h3k27me3_R1.markdup.bam +262 4 h3k27me3_R1.markdup.bam +263 2 h3k27me3_R1.markdup.bam +264 1 h3k27me3_R1.markdup.bam +265 2 h3k27me3_R1.markdup.bam +266 1 h3k27me3_R1.markdup.bam +267 2 h3k27me3_R1.markdup.bam +268 1 h3k27me3_R1.markdup.bam +269 1 h3k27me3_R1.markdup.bam +271 3 h3k27me3_R1.markdup.bam +272 2 h3k27me3_R1.markdup.bam +274 1 h3k27me3_R1.markdup.bam +275 2 h3k27me3_R1.markdup.bam +276 1 h3k27me3_R1.markdup.bam +278 1 h3k27me3_R1.markdup.bam +279 2 h3k27me3_R1.markdup.bam +280 2 h3k27me3_R1.markdup.bam +283 1 h3k27me3_R1.markdup.bam +284 1 h3k27me3_R1.markdup.bam +285 1 h3k27me3_R1.markdup.bam +286 1 h3k27me3_R1.markdup.bam +288 1 h3k27me3_R1.markdup.bam +292 1 h3k27me3_R1.markdup.bam +295 1 h3k27me3_R1.markdup.bam +296 1 h3k27me3_R1.markdup.bam +298 2 h3k27me3_R1.markdup.bam +299 3 h3k27me3_R1.markdup.bam +300 1 h3k27me3_R1.markdup.bam +301 1 h3k27me3_R1.markdup.bam +303 1 h3k27me3_R1.markdup.bam +312 1 h3k27me3_R1.markdup.bam +313 2 h3k27me3_R1.markdup.bam +315 1 h3k27me3_R1.markdup.bam +319 1 h3k27me3_R1.markdup.bam +321 2 h3k27me3_R1.markdup.bam +322 2 h3k27me3_R1.markdup.bam +323 1 h3k27me3_R1.markdup.bam +325 2 h3k27me3_R1.markdup.bam +326 1 h3k27me3_R1.markdup.bam +327 1 h3k27me3_R1.markdup.bam +329 2 h3k27me3_R1.markdup.bam +330 1 h3k27me3_R1.markdup.bam +331 1 h3k27me3_R1.markdup.bam +332 2 h3k27me3_R1.markdup.bam +333 1 h3k27me3_R1.markdup.bam +334 3 h3k27me3_R1.markdup.bam +335 1 h3k27me3_R1.markdup.bam +336 2 h3k27me3_R1.markdup.bam +337 2 h3k27me3_R1.markdup.bam +338 1 h3k27me3_R1.markdup.bam +340 1 h3k27me3_R1.markdup.bam +341 3 h3k27me3_R1.markdup.bam +342 1 h3k27me3_R1.markdup.bam +343 1 h3k27me3_R1.markdup.bam +344 2 h3k27me3_R1.markdup.bam +345 2 h3k27me3_R1.markdup.bam +346 1 h3k27me3_R1.markdup.bam +347 1 h3k27me3_R1.markdup.bam +348 7 h3k27me3_R1.markdup.bam +349 3 h3k27me3_R1.markdup.bam +350 2 h3k27me3_R1.markdup.bam +351 2 h3k27me3_R1.markdup.bam +352 1 h3k27me3_R1.markdup.bam +353 2 h3k27me3_R1.markdup.bam +354 4 h3k27me3_R1.markdup.bam +355 3 h3k27me3_R1.markdup.bam +356 2 h3k27me3_R1.markdup.bam +357 3 h3k27me3_R1.markdup.bam +358 2 h3k27me3_R1.markdup.bam +359 1 h3k27me3_R1.markdup.bam +360 3 h3k27me3_R1.markdup.bam +362 6 h3k27me3_R1.markdup.bam +364 3 h3k27me3_R1.markdup.bam +365 4 h3k27me3_R1.markdup.bam +367 4 h3k27me3_R1.markdup.bam +368 3 h3k27me3_R1.markdup.bam +369 1 h3k27me3_R1.markdup.bam +370 1 h3k27me3_R1.markdup.bam +371 3 h3k27me3_R1.markdup.bam +372 2 h3k27me3_R1.markdup.bam +373 1 h3k27me3_R1.markdup.bam +374 4 h3k27me3_R1.markdup.bam +375 4 h3k27me3_R1.markdup.bam +377 2 h3k27me3_R1.markdup.bam +378 3 h3k27me3_R1.markdup.bam +379 2 h3k27me3_R1.markdup.bam +380 4 h3k27me3_R1.markdup.bam +381 3 h3k27me3_R1.markdup.bam +382 3 h3k27me3_R1.markdup.bam +383 2 h3k27me3_R1.markdup.bam +384 5 h3k27me3_R1.markdup.bam +385 5 h3k27me3_R1.markdup.bam +386 1 h3k27me3_R1.markdup.bam +387 4 h3k27me3_R1.markdup.bam +388 4 h3k27me3_R1.markdup.bam +389 5 h3k27me3_R1.markdup.bam +390 7 h3k27me3_R1.markdup.bam +391 3 h3k27me3_R1.markdup.bam +392 5 h3k27me3_R1.markdup.bam +393 5 h3k27me3_R1.markdup.bam +394 2 h3k27me3_R1.markdup.bam +395 4 h3k27me3_R1.markdup.bam +396 5 h3k27me3_R1.markdup.bam +397 2 h3k27me3_R1.markdup.bam +398 2 h3k27me3_R1.markdup.bam +399 3 h3k27me3_R1.markdup.bam +400 4 h3k27me3_R1.markdup.bam +401 5 h3k27me3_R1.markdup.bam +402 2 h3k27me3_R1.markdup.bam +403 4 h3k27me3_R1.markdup.bam +404 5 h3k27me3_R1.markdup.bam +405 1 h3k27me3_R1.markdup.bam +406 3 h3k27me3_R1.markdup.bam +407 3 h3k27me3_R1.markdup.bam +408 1 h3k27me3_R1.markdup.bam +409 2 h3k27me3_R1.markdup.bam +410 3 h3k27me3_R1.markdup.bam +411 1 h3k27me3_R1.markdup.bam +412 2 h3k27me3_R1.markdup.bam +413 7 h3k27me3_R1.markdup.bam +414 2 h3k27me3_R1.markdup.bam +415 1 h3k27me3_R1.markdup.bam +416 1 h3k27me3_R1.markdup.bam +417 2 h3k27me3_R1.markdup.bam +418 4 h3k27me3_R1.markdup.bam +419 3 h3k27me3_R1.markdup.bam +420 5 h3k27me3_R1.markdup.bam +421 3 h3k27me3_R1.markdup.bam +422 2 h3k27me3_R1.markdup.bam +423 2 h3k27me3_R1.markdup.bam +424 1 h3k27me3_R1.markdup.bam +425 4 h3k27me3_R1.markdup.bam +426 1 h3k27me3_R1.markdup.bam +427 2 h3k27me3_R1.markdup.bam +428 4 h3k27me3_R1.markdup.bam +430 1 h3k27me3_R1.markdup.bam +431 1 h3k27me3_R1.markdup.bam +432 1 h3k27me3_R1.markdup.bam +433 1 h3k27me3_R1.markdup.bam +434 2 h3k27me3_R1.markdup.bam +435 4 h3k27me3_R1.markdup.bam +436 1 h3k27me3_R1.markdup.bam +437 3 h3k27me3_R1.markdup.bam +438 1 h3k27me3_R1.markdup.bam +439 3 h3k27me3_R1.markdup.bam +440 3 h3k27me3_R1.markdup.bam +442 1 h3k27me3_R1.markdup.bam +443 1 h3k27me3_R1.markdup.bam +444 1 h3k27me3_R1.markdup.bam +445 2 h3k27me3_R1.markdup.bam +446 2 h3k27me3_R1.markdup.bam +448 1 h3k27me3_R1.markdup.bam +450 1 h3k27me3_R1.markdup.bam +458 1 h3k27me3_R1.markdup.bam +459 1 h3k27me3_R1.markdup.bam +460 3 h3k27me3_R1.markdup.bam +461 2 h3k27me3_R1.markdup.bam +462 2 h3k27me3_R1.markdup.bam +464 1 h3k27me3_R1.markdup.bam +465 1 h3k27me3_R1.markdup.bam +466 1 h3k27me3_R1.markdup.bam +467 1 h3k27me3_R1.markdup.bam +468 1 h3k27me3_R1.markdup.bam +473 1 h3k27me3_R1.markdup.bam +475 1 h3k27me3_R1.markdup.bam +476 1 h3k27me3_R1.markdup.bam +477 1 h3k27me3_R1.markdup.bam +479 1 h3k27me3_R1.markdup.bam +480 1 h3k27me3_R1.markdup.bam +485 1 h3k27me3_R1.markdup.bam +487 1 h3k27me3_R1.markdup.bam +488 1 h3k27me3_R1.markdup.bam +491 1 h3k27me3_R1.markdup.bam +492 1 h3k27me3_R1.markdup.bam +495 1 h3k27me3_R1.markdup.bam +497 1 h3k27me3_R1.markdup.bam +499 1 h3k27me3_R1.markdup.bam +500 1 h3k27me3_R1.markdup.bam +501 2 h3k27me3_R1.markdup.bam +502 2 h3k27me3_R1.markdup.bam +503 3 h3k27me3_R1.markdup.bam +504 2 h3k27me3_R1.markdup.bam +506 1 h3k27me3_R1.markdup.bam +508 2 h3k27me3_R1.markdup.bam +513 1 h3k27me3_R1.markdup.bam +516 1 h3k27me3_R1.markdup.bam +517 1 h3k27me3_R1.markdup.bam +519 1 h3k27me3_R1.markdup.bam +525 1 h3k27me3_R1.markdup.bam +527 1 h3k27me3_R1.markdup.bam +528 1 h3k27me3_R1.markdup.bam +529 2 h3k27me3_R1.markdup.bam +532 1 h3k27me3_R1.markdup.bam +533 2 h3k27me3_R1.markdup.bam +534 2 h3k27me3_R1.markdup.bam +535 1 h3k27me3_R1.markdup.bam +536 1 h3k27me3_R1.markdup.bam +537 2 h3k27me3_R1.markdup.bam +538 1 h3k27me3_R1.markdup.bam +539 1 h3k27me3_R1.markdup.bam +541 2 h3k27me3_R1.markdup.bam +544 1 h3k27me3_R1.markdup.bam +545 1 h3k27me3_R1.markdup.bam +548 2 h3k27me3_R1.markdup.bam +550 1 h3k27me3_R1.markdup.bam +551 1 h3k27me3_R1.markdup.bam +552 1 h3k27me3_R1.markdup.bam +555 1 h3k27me3_R1.markdup.bam +557 1 h3k27me3_R1.markdup.bam +560 2 h3k27me3_R1.markdup.bam +561 1 h3k27me3_R1.markdup.bam +562 2 h3k27me3_R1.markdup.bam +563 1 h3k27me3_R1.markdup.bam +565 2 h3k27me3_R1.markdup.bam +566 1 h3k27me3_R1.markdup.bam +570 3 h3k27me3_R1.markdup.bam +571 2 h3k27me3_R1.markdup.bam +572 1 h3k27me3_R1.markdup.bam +573 2 h3k27me3_R1.markdup.bam +577 1 h3k27me3_R1.markdup.bam +579 2 h3k27me3_R1.markdup.bam +580 1 h3k27me3_R1.markdup.bam +581 1 h3k27me3_R1.markdup.bam +582 1 h3k27me3_R1.markdup.bam +584 1 h3k27me3_R1.markdup.bam +585 1 h3k27me3_R1.markdup.bam +588 1 h3k27me3_R1.markdup.bam +589 1 h3k27me3_R1.markdup.bam +590 4 h3k27me3_R1.markdup.bam +593 1 h3k27me3_R1.markdup.bam +594 2 h3k27me3_R1.markdup.bam +595 1 h3k27me3_R1.markdup.bam +596 3 h3k27me3_R1.markdup.bam +597 2 h3k27me3_R1.markdup.bam +598 2 h3k27me3_R1.markdup.bam +599 1 h3k27me3_R1.markdup.bam +601 4 h3k27me3_R1.markdup.bam +605 1 h3k27me3_R1.markdup.bam +606 2 h3k27me3_R1.markdup.bam +608 2 h3k27me3_R1.markdup.bam +610 1 h3k27me3_R1.markdup.bam +615 1 h3k27me3_R1.markdup.bam +618 2 h3k27me3_R1.markdup.bam +622 2 h3k27me3_R1.markdup.bam +625 2 h3k27me3_R1.markdup.bam +626 1 h3k27me3_R1.markdup.bam +628 1 h3k27me3_R1.markdup.bam +629 1 h3k27me3_R1.markdup.bam +630 1 h3k27me3_R1.markdup.bam +631 1 h3k27me3_R1.markdup.bam +636 1 h3k27me3_R1.markdup.bam +637 1 h3k27me3_R1.markdup.bam +639 1 h3k27me3_R1.markdup.bam +641 1 h3k27me3_R1.markdup.bam +645 1 h3k27me3_R1.markdup.bam +647 1 h3k27me3_R1.markdup.bam +649 1 h3k27me3_R1.markdup.bam +651 2 h3k27me3_R1.markdup.bam +653 1 h3k27me3_R1.markdup.bam +658 1 h3k27me3_R1.markdup.bam +660 1 h3k27me3_R1.markdup.bam +662 1 h3k27me3_R1.markdup.bam +665 1 h3k27me3_R1.markdup.bam +668 3 h3k27me3_R1.markdup.bam +670 1 h3k27me3_R1.markdup.bam +671 1 h3k27me3_R1.markdup.bam +675 1 h3k27me3_R1.markdup.bam +677 2 h3k27me3_R1.markdup.bam +679 2 h3k27me3_R1.markdup.bam +681 1 h3k27me3_R1.markdup.bam +682 1 h3k27me3_R1.markdup.bam +684 1 h3k27me3_R1.markdup.bam +688 2 h3k27me3_R1.markdup.bam +689 1 h3k27me3_R1.markdup.bam +692 1 h3k27me3_R1.markdup.bam +700 2 h3k27me3_R1.markdup.bam diff --git a/dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv b/dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv new file mode 100644 index 00000000..783311cb --- /dev/null +++ b/dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv @@ -0,0 +1,454 @@ +#bamPEFragmentSize +Size Occurrences Sample +27 2 h3k27me3_R2.markdup.bam +28 3 h3k27me3_R2.markdup.bam +34 1 h3k27me3_R2.markdup.bam +38 2 h3k27me3_R2.markdup.bam +39 2 h3k27me3_R2.markdup.bam +40 2 h3k27me3_R2.markdup.bam +41 5 h3k27me3_R2.markdup.bam +42 2 h3k27me3_R2.markdup.bam +43 3 h3k27me3_R2.markdup.bam +44 2 h3k27me3_R2.markdup.bam +45 8 h3k27me3_R2.markdup.bam +46 5 h3k27me3_R2.markdup.bam +47 3 h3k27me3_R2.markdup.bam +48 6 h3k27me3_R2.markdup.bam +49 2 h3k27me3_R2.markdup.bam +50 7 h3k27me3_R2.markdup.bam +51 5 h3k27me3_R2.markdup.bam +52 6 h3k27me3_R2.markdup.bam +53 2 h3k27me3_R2.markdup.bam +54 5 h3k27me3_R2.markdup.bam +55 6 h3k27me3_R2.markdup.bam +56 1 h3k27me3_R2.markdup.bam +57 3 h3k27me3_R2.markdup.bam +58 3 h3k27me3_R2.markdup.bam +59 1 h3k27me3_R2.markdup.bam +60 3 h3k27me3_R2.markdup.bam +61 1 h3k27me3_R2.markdup.bam +62 5 h3k27me3_R2.markdup.bam +63 9 h3k27me3_R2.markdup.bam +64 5 h3k27me3_R2.markdup.bam +65 4 h3k27me3_R2.markdup.bam +66 3 h3k27me3_R2.markdup.bam +69 4 h3k27me3_R2.markdup.bam +70 3 h3k27me3_R2.markdup.bam +71 3 h3k27me3_R2.markdup.bam +72 2 h3k27me3_R2.markdup.bam +73 4 h3k27me3_R2.markdup.bam +74 3 h3k27me3_R2.markdup.bam +75 4 h3k27me3_R2.markdup.bam +76 4 h3k27me3_R2.markdup.bam +77 3 h3k27me3_R2.markdup.bam +78 5 h3k27me3_R2.markdup.bam +80 3 h3k27me3_R2.markdup.bam +81 1 h3k27me3_R2.markdup.bam +82 2 h3k27me3_R2.markdup.bam +83 3 h3k27me3_R2.markdup.bam +84 5 h3k27me3_R2.markdup.bam +85 2 h3k27me3_R2.markdup.bam +86 4 h3k27me3_R2.markdup.bam +87 3 h3k27me3_R2.markdup.bam +88 1 h3k27me3_R2.markdup.bam +89 2 h3k27me3_R2.markdup.bam +90 1 h3k27me3_R2.markdup.bam +91 4 h3k27me3_R2.markdup.bam +93 2 h3k27me3_R2.markdup.bam +94 2 h3k27me3_R2.markdup.bam +96 2 h3k27me3_R2.markdup.bam +97 2 h3k27me3_R2.markdup.bam +98 1 h3k27me3_R2.markdup.bam +99 1 h3k27me3_R2.markdup.bam +100 3 h3k27me3_R2.markdup.bam +101 2 h3k27me3_R2.markdup.bam +102 2 h3k27me3_R2.markdup.bam +103 2 h3k27me3_R2.markdup.bam +104 2 h3k27me3_R2.markdup.bam +107 2 h3k27me3_R2.markdup.bam +110 1 h3k27me3_R2.markdup.bam +111 1 h3k27me3_R2.markdup.bam +112 1 h3k27me3_R2.markdup.bam +113 1 h3k27me3_R2.markdup.bam +114 2 h3k27me3_R2.markdup.bam +115 1 h3k27me3_R2.markdup.bam +116 1 h3k27me3_R2.markdup.bam +119 2 h3k27me3_R2.markdup.bam +120 1 h3k27me3_R2.markdup.bam +122 1 h3k27me3_R2.markdup.bam +123 1 h3k27me3_R2.markdup.bam +124 2 h3k27me3_R2.markdup.bam +125 1 h3k27me3_R2.markdup.bam +126 2 h3k27me3_R2.markdup.bam +127 2 h3k27me3_R2.markdup.bam +128 1 h3k27me3_R2.markdup.bam +130 1 h3k27me3_R2.markdup.bam +131 3 h3k27me3_R2.markdup.bam +133 2 h3k27me3_R2.markdup.bam +134 2 h3k27me3_R2.markdup.bam +135 3 h3k27me3_R2.markdup.bam +138 1 h3k27me3_R2.markdup.bam +139 2 h3k27me3_R2.markdup.bam +140 2 h3k27me3_R2.markdup.bam +141 1 h3k27me3_R2.markdup.bam +142 4 h3k27me3_R2.markdup.bam +143 1 h3k27me3_R2.markdup.bam +144 2 h3k27me3_R2.markdup.bam +145 2 h3k27me3_R2.markdup.bam +146 3 h3k27me3_R2.markdup.bam +147 1 h3k27me3_R2.markdup.bam +148 2 h3k27me3_R2.markdup.bam +149 3 h3k27me3_R2.markdup.bam +150 4 h3k27me3_R2.markdup.bam +151 3 h3k27me3_R2.markdup.bam +152 1 h3k27me3_R2.markdup.bam +153 3 h3k27me3_R2.markdup.bam +154 3 h3k27me3_R2.markdup.bam +155 3 h3k27me3_R2.markdup.bam +156 4 h3k27me3_R2.markdup.bam +157 2 h3k27me3_R2.markdup.bam +158 2 h3k27me3_R2.markdup.bam +159 3 h3k27me3_R2.markdup.bam +160 6 h3k27me3_R2.markdup.bam +161 7 h3k27me3_R2.markdup.bam +162 9 h3k27me3_R2.markdup.bam +163 3 h3k27me3_R2.markdup.bam +164 10 h3k27me3_R2.markdup.bam +165 3 h3k27me3_R2.markdup.bam +166 5 h3k27me3_R2.markdup.bam +167 8 h3k27me3_R2.markdup.bam +168 6 h3k27me3_R2.markdup.bam +169 5 h3k27me3_R2.markdup.bam +170 6 h3k27me3_R2.markdup.bam +171 3 h3k27me3_R2.markdup.bam +172 6 h3k27me3_R2.markdup.bam +173 2 h3k27me3_R2.markdup.bam +174 10 h3k27me3_R2.markdup.bam +175 8 h3k27me3_R2.markdup.bam +176 8 h3k27me3_R2.markdup.bam +177 10 h3k27me3_R2.markdup.bam +178 6 h3k27me3_R2.markdup.bam +179 8 h3k27me3_R2.markdup.bam +180 2 h3k27me3_R2.markdup.bam +181 7 h3k27me3_R2.markdup.bam +182 3 h3k27me3_R2.markdup.bam +183 7 h3k27me3_R2.markdup.bam +184 11 h3k27me3_R2.markdup.bam +185 14 h3k27me3_R2.markdup.bam +186 12 h3k27me3_R2.markdup.bam +187 10 h3k27me3_R2.markdup.bam +188 10 h3k27me3_R2.markdup.bam +189 8 h3k27me3_R2.markdup.bam +190 13 h3k27me3_R2.markdup.bam +191 9 h3k27me3_R2.markdup.bam +192 10 h3k27me3_R2.markdup.bam +193 9 h3k27me3_R2.markdup.bam +194 9 h3k27me3_R2.markdup.bam +195 12 h3k27me3_R2.markdup.bam +196 13 h3k27me3_R2.markdup.bam +197 11 h3k27me3_R2.markdup.bam +198 7 h3k27me3_R2.markdup.bam +199 10 h3k27me3_R2.markdup.bam +200 7 h3k27me3_R2.markdup.bam +201 11 h3k27me3_R2.markdup.bam +202 14 h3k27me3_R2.markdup.bam +203 11 h3k27me3_R2.markdup.bam +204 7 h3k27me3_R2.markdup.bam +205 8 h3k27me3_R2.markdup.bam +206 11 h3k27me3_R2.markdup.bam +207 12 h3k27me3_R2.markdup.bam +208 13 h3k27me3_R2.markdup.bam +209 4 h3k27me3_R2.markdup.bam +210 6 h3k27me3_R2.markdup.bam +211 11 h3k27me3_R2.markdup.bam +212 14 h3k27me3_R2.markdup.bam +213 10 h3k27me3_R2.markdup.bam +214 7 h3k27me3_R2.markdup.bam +215 3 h3k27me3_R2.markdup.bam +216 9 h3k27me3_R2.markdup.bam +217 11 h3k27me3_R2.markdup.bam +218 6 h3k27me3_R2.markdup.bam +219 8 h3k27me3_R2.markdup.bam +220 6 h3k27me3_R2.markdup.bam +221 7 h3k27me3_R2.markdup.bam +222 6 h3k27me3_R2.markdup.bam +223 5 h3k27me3_R2.markdup.bam +224 6 h3k27me3_R2.markdup.bam +225 6 h3k27me3_R2.markdup.bam +226 7 h3k27me3_R2.markdup.bam +227 8 h3k27me3_R2.markdup.bam +228 8 h3k27me3_R2.markdup.bam +229 9 h3k27me3_R2.markdup.bam +230 8 h3k27me3_R2.markdup.bam +231 5 h3k27me3_R2.markdup.bam +232 8 h3k27me3_R2.markdup.bam +233 5 h3k27me3_R2.markdup.bam +234 9 h3k27me3_R2.markdup.bam +235 9 h3k27me3_R2.markdup.bam +236 8 h3k27me3_R2.markdup.bam +237 10 h3k27me3_R2.markdup.bam +238 5 h3k27me3_R2.markdup.bam +239 4 h3k27me3_R2.markdup.bam +240 6 h3k27me3_R2.markdup.bam +241 7 h3k27me3_R2.markdup.bam +242 7 h3k27me3_R2.markdup.bam +243 6 h3k27me3_R2.markdup.bam +244 7 h3k27me3_R2.markdup.bam +245 4 h3k27me3_R2.markdup.bam +246 5 h3k27me3_R2.markdup.bam +247 4 h3k27me3_R2.markdup.bam +248 2 h3k27me3_R2.markdup.bam +249 4 h3k27me3_R2.markdup.bam +250 3 h3k27me3_R2.markdup.bam +251 7 h3k27me3_R2.markdup.bam +253 4 h3k27me3_R2.markdup.bam +254 3 h3k27me3_R2.markdup.bam +257 2 h3k27me3_R2.markdup.bam +258 2 h3k27me3_R2.markdup.bam +259 2 h3k27me3_R2.markdup.bam +260 3 h3k27me3_R2.markdup.bam +261 1 h3k27me3_R2.markdup.bam +262 2 h3k27me3_R2.markdup.bam +263 1 h3k27me3_R2.markdup.bam +264 1 h3k27me3_R2.markdup.bam +265 2 h3k27me3_R2.markdup.bam +266 2 h3k27me3_R2.markdup.bam +267 2 h3k27me3_R2.markdup.bam +268 4 h3k27me3_R2.markdup.bam +269 1 h3k27me3_R2.markdup.bam +271 2 h3k27me3_R2.markdup.bam +272 2 h3k27me3_R2.markdup.bam +273 1 h3k27me3_R2.markdup.bam +274 1 h3k27me3_R2.markdup.bam +275 1 h3k27me3_R2.markdup.bam +276 1 h3k27me3_R2.markdup.bam +277 1 h3k27me3_R2.markdup.bam +278 1 h3k27me3_R2.markdup.bam +279 4 h3k27me3_R2.markdup.bam +280 1 h3k27me3_R2.markdup.bam +281 1 h3k27me3_R2.markdup.bam +283 1 h3k27me3_R2.markdup.bam +284 2 h3k27me3_R2.markdup.bam +286 3 h3k27me3_R2.markdup.bam +287 2 h3k27me3_R2.markdup.bam +288 1 h3k27me3_R2.markdup.bam +289 1 h3k27me3_R2.markdup.bam +292 1 h3k27me3_R2.markdup.bam +293 2 h3k27me3_R2.markdup.bam +294 2 h3k27me3_R2.markdup.bam +295 1 h3k27me3_R2.markdup.bam +296 1 h3k27me3_R2.markdup.bam +297 3 h3k27me3_R2.markdup.bam +300 2 h3k27me3_R2.markdup.bam +303 3 h3k27me3_R2.markdup.bam +304 1 h3k27me3_R2.markdup.bam +305 2 h3k27me3_R2.markdup.bam +306 3 h3k27me3_R2.markdup.bam +309 2 h3k27me3_R2.markdup.bam +311 2 h3k27me3_R2.markdup.bam +312 1 h3k27me3_R2.markdup.bam +313 1 h3k27me3_R2.markdup.bam +314 2 h3k27me3_R2.markdup.bam +319 1 h3k27me3_R2.markdup.bam +320 2 h3k27me3_R2.markdup.bam +321 1 h3k27me3_R2.markdup.bam +323 1 h3k27me3_R2.markdup.bam +326 2 h3k27me3_R2.markdup.bam +327 1 h3k27me3_R2.markdup.bam +328 1 h3k27me3_R2.markdup.bam +331 2 h3k27me3_R2.markdup.bam +333 1 h3k27me3_R2.markdup.bam +334 1 h3k27me3_R2.markdup.bam +337 3 h3k27me3_R2.markdup.bam +338 1 h3k27me3_R2.markdup.bam +339 1 h3k27me3_R2.markdup.bam +341 3 h3k27me3_R2.markdup.bam +342 2 h3k27me3_R2.markdup.bam +343 4 h3k27me3_R2.markdup.bam +344 2 h3k27me3_R2.markdup.bam +348 1 h3k27me3_R2.markdup.bam +349 1 h3k27me3_R2.markdup.bam +350 1 h3k27me3_R2.markdup.bam +351 1 h3k27me3_R2.markdup.bam +352 1 h3k27me3_R2.markdup.bam +353 4 h3k27me3_R2.markdup.bam +354 1 h3k27me3_R2.markdup.bam +356 3 h3k27me3_R2.markdup.bam +357 3 h3k27me3_R2.markdup.bam +358 2 h3k27me3_R2.markdup.bam +360 1 h3k27me3_R2.markdup.bam +361 3 h3k27me3_R2.markdup.bam +363 1 h3k27me3_R2.markdup.bam +364 2 h3k27me3_R2.markdup.bam +365 3 h3k27me3_R2.markdup.bam +366 1 h3k27me3_R2.markdup.bam +367 3 h3k27me3_R2.markdup.bam +368 1 h3k27me3_R2.markdup.bam +370 1 h3k27me3_R2.markdup.bam +371 4 h3k27me3_R2.markdup.bam +372 3 h3k27me3_R2.markdup.bam +373 2 h3k27me3_R2.markdup.bam +374 2 h3k27me3_R2.markdup.bam +375 2 h3k27me3_R2.markdup.bam +376 2 h3k27me3_R2.markdup.bam +377 2 h3k27me3_R2.markdup.bam +378 5 h3k27me3_R2.markdup.bam +379 4 h3k27me3_R2.markdup.bam +380 2 h3k27me3_R2.markdup.bam +382 1 h3k27me3_R2.markdup.bam +383 1 h3k27me3_R2.markdup.bam +384 1 h3k27me3_R2.markdup.bam +385 3 h3k27me3_R2.markdup.bam +386 6 h3k27me3_R2.markdup.bam +387 1 h3k27me3_R2.markdup.bam +388 3 h3k27me3_R2.markdup.bam +389 2 h3k27me3_R2.markdup.bam +390 6 h3k27me3_R2.markdup.bam +391 5 h3k27me3_R2.markdup.bam +393 3 h3k27me3_R2.markdup.bam +394 4 h3k27me3_R2.markdup.bam +395 7 h3k27me3_R2.markdup.bam +396 2 h3k27me3_R2.markdup.bam +397 2 h3k27me3_R2.markdup.bam +398 2 h3k27me3_R2.markdup.bam +399 3 h3k27me3_R2.markdup.bam +403 3 h3k27me3_R2.markdup.bam +404 1 h3k27me3_R2.markdup.bam +405 2 h3k27me3_R2.markdup.bam +406 1 h3k27me3_R2.markdup.bam +408 1 h3k27me3_R2.markdup.bam +409 3 h3k27me3_R2.markdup.bam +411 2 h3k27me3_R2.markdup.bam +412 2 h3k27me3_R2.markdup.bam +413 1 h3k27me3_R2.markdup.bam +414 3 h3k27me3_R2.markdup.bam +415 1 h3k27me3_R2.markdup.bam +416 1 h3k27me3_R2.markdup.bam +418 1 h3k27me3_R2.markdup.bam +419 1 h3k27me3_R2.markdup.bam +420 3 h3k27me3_R2.markdup.bam +421 2 h3k27me3_R2.markdup.bam +422 1 h3k27me3_R2.markdup.bam +423 2 h3k27me3_R2.markdup.bam +424 2 h3k27me3_R2.markdup.bam +425 2 h3k27me3_R2.markdup.bam +427 1 h3k27me3_R2.markdup.bam +428 2 h3k27me3_R2.markdup.bam +429 1 h3k27me3_R2.markdup.bam +430 1 h3k27me3_R2.markdup.bam +431 1 h3k27me3_R2.markdup.bam +433 2 h3k27me3_R2.markdup.bam +434 1 h3k27me3_R2.markdup.bam +435 1 h3k27me3_R2.markdup.bam +436 2 h3k27me3_R2.markdup.bam +438 2 h3k27me3_R2.markdup.bam +439 2 h3k27me3_R2.markdup.bam +440 2 h3k27me3_R2.markdup.bam +441 1 h3k27me3_R2.markdup.bam +442 3 h3k27me3_R2.markdup.bam +443 1 h3k27me3_R2.markdup.bam +444 1 h3k27me3_R2.markdup.bam +447 1 h3k27me3_R2.markdup.bam +448 1 h3k27me3_R2.markdup.bam +449 1 h3k27me3_R2.markdup.bam +450 1 h3k27me3_R2.markdup.bam +451 2 h3k27me3_R2.markdup.bam +453 2 h3k27me3_R2.markdup.bam +454 1 h3k27me3_R2.markdup.bam +456 1 h3k27me3_R2.markdup.bam +457 1 h3k27me3_R2.markdup.bam +459 2 h3k27me3_R2.markdup.bam +460 1 h3k27me3_R2.markdup.bam +461 1 h3k27me3_R2.markdup.bam +462 1 h3k27me3_R2.markdup.bam +466 3 h3k27me3_R2.markdup.bam +469 1 h3k27me3_R2.markdup.bam +471 1 h3k27me3_R2.markdup.bam +473 1 h3k27me3_R2.markdup.bam +481 1 h3k27me3_R2.markdup.bam +483 1 h3k27me3_R2.markdup.bam +485 1 h3k27me3_R2.markdup.bam +486 2 h3k27me3_R2.markdup.bam +493 1 h3k27me3_R2.markdup.bam +501 1 h3k27me3_R2.markdup.bam +507 4 h3k27me3_R2.markdup.bam +510 1 h3k27me3_R2.markdup.bam +513 2 h3k27me3_R2.markdup.bam +519 1 h3k27me3_R2.markdup.bam +524 1 h3k27me3_R2.markdup.bam +525 3 h3k27me3_R2.markdup.bam +526 1 h3k27me3_R2.markdup.bam +534 1 h3k27me3_R2.markdup.bam +535 1 h3k27me3_R2.markdup.bam +537 2 h3k27me3_R2.markdup.bam +538 1 h3k27me3_R2.markdup.bam +541 1 h3k27me3_R2.markdup.bam +542 1 h3k27me3_R2.markdup.bam +543 1 h3k27me3_R2.markdup.bam +544 1 h3k27me3_R2.markdup.bam +548 1 h3k27me3_R2.markdup.bam +549 1 h3k27me3_R2.markdup.bam +550 1 h3k27me3_R2.markdup.bam +552 1 h3k27me3_R2.markdup.bam +553 2 h3k27me3_R2.markdup.bam +554 1 h3k27me3_R2.markdup.bam +557 1 h3k27me3_R2.markdup.bam +558 1 h3k27me3_R2.markdup.bam +561 2 h3k27me3_R2.markdup.bam +562 1 h3k27me3_R2.markdup.bam +563 1 h3k27me3_R2.markdup.bam +565 1 h3k27me3_R2.markdup.bam +566 1 h3k27me3_R2.markdup.bam +567 1 h3k27me3_R2.markdup.bam +568 1 h3k27me3_R2.markdup.bam +569 1 h3k27me3_R2.markdup.bam +575 1 h3k27me3_R2.markdup.bam +576 2 h3k27me3_R2.markdup.bam +578 2 h3k27me3_R2.markdup.bam +581 1 h3k27me3_R2.markdup.bam +584 1 h3k27me3_R2.markdup.bam +587 1 h3k27me3_R2.markdup.bam +589 1 h3k27me3_R2.markdup.bam +590 1 h3k27me3_R2.markdup.bam +591 1 h3k27me3_R2.markdup.bam +592 1 h3k27me3_R2.markdup.bam +595 2 h3k27me3_R2.markdup.bam +596 4 h3k27me3_R2.markdup.bam +597 2 h3k27me3_R2.markdup.bam +598 2 h3k27me3_R2.markdup.bam +599 1 h3k27me3_R2.markdup.bam +600 1 h3k27me3_R2.markdup.bam +601 1 h3k27me3_R2.markdup.bam +602 2 h3k27me3_R2.markdup.bam +603 2 h3k27me3_R2.markdup.bam +605 1 h3k27me3_R2.markdup.bam +606 1 h3k27me3_R2.markdup.bam +609 1 h3k27me3_R2.markdup.bam +619 2 h3k27me3_R2.markdup.bam +621 1 h3k27me3_R2.markdup.bam +624 1 h3k27me3_R2.markdup.bam +625 2 h3k27me3_R2.markdup.bam +626 1 h3k27me3_R2.markdup.bam +631 2 h3k27me3_R2.markdup.bam +633 1 h3k27me3_R2.markdup.bam +635 1 h3k27me3_R2.markdup.bam +638 2 h3k27me3_R2.markdup.bam +643 2 h3k27me3_R2.markdup.bam +645 1 h3k27me3_R2.markdup.bam +646 1 h3k27me3_R2.markdup.bam +647 1 h3k27me3_R2.markdup.bam +649 1 h3k27me3_R2.markdup.bam +655 2 h3k27me3_R2.markdup.bam +661 2 h3k27me3_R2.markdup.bam +662 2 h3k27me3_R2.markdup.bam +664 1 h3k27me3_R2.markdup.bam +668 1 h3k27me3_R2.markdup.bam +669 1 h3k27me3_R2.markdup.bam +670 1 h3k27me3_R2.markdup.bam +673 1 h3k27me3_R2.markdup.bam +676 1 h3k27me3_R2.markdup.bam +683 1 h3k27me3_R2.markdup.bam +684 1 h3k27me3_R2.markdup.bam +685 4 h3k27me3_R2.markdup.bam +695 2 h3k27me3_R2.markdup.bam +696 1 h3k27me3_R2.markdup.bam diff --git a/dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv b/dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv new file mode 100644 index 00000000..c0c5d155 --- /dev/null +++ b/dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv @@ -0,0 +1,454 @@ +#bamPEFragmentSize +Size Occurrences Sample +28 1 h3k4me3_R1.markdup.bam +38 1 h3k4me3_R1.markdup.bam +40 1 h3k4me3_R1.markdup.bam +41 2 h3k4me3_R1.markdup.bam +42 3 h3k4me3_R1.markdup.bam +43 5 h3k4me3_R1.markdup.bam +44 3 h3k4me3_R1.markdup.bam +45 3 h3k4me3_R1.markdup.bam +46 2 h3k4me3_R1.markdup.bam +47 5 h3k4me3_R1.markdup.bam +49 1 h3k4me3_R1.markdup.bam +50 1 h3k4me3_R1.markdup.bam +51 5 h3k4me3_R1.markdup.bam +52 2 h3k4me3_R1.markdup.bam +53 7 h3k4me3_R1.markdup.bam +54 5 h3k4me3_R1.markdup.bam +55 3 h3k4me3_R1.markdup.bam +56 4 h3k4me3_R1.markdup.bam +57 3 h3k4me3_R1.markdup.bam +58 2 h3k4me3_R1.markdup.bam +59 3 h3k4me3_R1.markdup.bam +60 2 h3k4me3_R1.markdup.bam +61 2 h3k4me3_R1.markdup.bam +62 5 h3k4me3_R1.markdup.bam +63 3 h3k4me3_R1.markdup.bam +64 6 h3k4me3_R1.markdup.bam +65 2 h3k4me3_R1.markdup.bam +66 3 h3k4me3_R1.markdup.bam +67 1 h3k4me3_R1.markdup.bam +68 2 h3k4me3_R1.markdup.bam +69 2 h3k4me3_R1.markdup.bam +70 2 h3k4me3_R1.markdup.bam +71 3 h3k4me3_R1.markdup.bam +72 2 h3k4me3_R1.markdup.bam +73 1 h3k4me3_R1.markdup.bam +74 3 h3k4me3_R1.markdup.bam +75 3 h3k4me3_R1.markdup.bam +76 4 h3k4me3_R1.markdup.bam +77 2 h3k4me3_R1.markdup.bam +78 4 h3k4me3_R1.markdup.bam +81 2 h3k4me3_R1.markdup.bam +82 1 h3k4me3_R1.markdup.bam +84 4 h3k4me3_R1.markdup.bam +86 2 h3k4me3_R1.markdup.bam +87 4 h3k4me3_R1.markdup.bam +88 2 h3k4me3_R1.markdup.bam +89 2 h3k4me3_R1.markdup.bam +90 1 h3k4me3_R1.markdup.bam +91 3 h3k4me3_R1.markdup.bam +92 3 h3k4me3_R1.markdup.bam +93 2 h3k4me3_R1.markdup.bam +95 2 h3k4me3_R1.markdup.bam +96 1 h3k4me3_R1.markdup.bam +97 3 h3k4me3_R1.markdup.bam +98 2 h3k4me3_R1.markdup.bam +99 3 h3k4me3_R1.markdup.bam +101 1 h3k4me3_R1.markdup.bam +102 1 h3k4me3_R1.markdup.bam +104 1 h3k4me3_R1.markdup.bam +105 1 h3k4me3_R1.markdup.bam +106 1 h3k4me3_R1.markdup.bam +107 1 h3k4me3_R1.markdup.bam +110 2 h3k4me3_R1.markdup.bam +111 1 h3k4me3_R1.markdup.bam +112 1 h3k4me3_R1.markdup.bam +119 1 h3k4me3_R1.markdup.bam +120 2 h3k4me3_R1.markdup.bam +122 1 h3k4me3_R1.markdup.bam +123 2 h3k4me3_R1.markdup.bam +124 2 h3k4me3_R1.markdup.bam +125 1 h3k4me3_R1.markdup.bam +126 2 h3k4me3_R1.markdup.bam +127 1 h3k4me3_R1.markdup.bam +130 1 h3k4me3_R1.markdup.bam +131 3 h3k4me3_R1.markdup.bam +133 1 h3k4me3_R1.markdup.bam +136 1 h3k4me3_R1.markdup.bam +138 1 h3k4me3_R1.markdup.bam +140 1 h3k4me3_R1.markdup.bam +141 4 h3k4me3_R1.markdup.bam +143 1 h3k4me3_R1.markdup.bam +144 1 h3k4me3_R1.markdup.bam +146 1 h3k4me3_R1.markdup.bam +148 2 h3k4me3_R1.markdup.bam +150 3 h3k4me3_R1.markdup.bam +151 3 h3k4me3_R1.markdup.bam +153 2 h3k4me3_R1.markdup.bam +154 3 h3k4me3_R1.markdup.bam +155 2 h3k4me3_R1.markdup.bam +156 2 h3k4me3_R1.markdup.bam +157 5 h3k4me3_R1.markdup.bam +158 2 h3k4me3_R1.markdup.bam +159 3 h3k4me3_R1.markdup.bam +160 3 h3k4me3_R1.markdup.bam +161 1 h3k4me3_R1.markdup.bam +162 2 h3k4me3_R1.markdup.bam +163 1 h3k4me3_R1.markdup.bam +164 2 h3k4me3_R1.markdup.bam +165 2 h3k4me3_R1.markdup.bam +166 7 h3k4me3_R1.markdup.bam +167 1 h3k4me3_R1.markdup.bam +168 2 h3k4me3_R1.markdup.bam +169 4 h3k4me3_R1.markdup.bam +170 3 h3k4me3_R1.markdup.bam +171 3 h3k4me3_R1.markdup.bam +172 2 h3k4me3_R1.markdup.bam +173 3 h3k4me3_R1.markdup.bam +175 3 h3k4me3_R1.markdup.bam +176 5 h3k4me3_R1.markdup.bam +177 6 h3k4me3_R1.markdup.bam +178 3 h3k4me3_R1.markdup.bam +179 9 h3k4me3_R1.markdup.bam +180 1 h3k4me3_R1.markdup.bam +181 8 h3k4me3_R1.markdup.bam +182 2 h3k4me3_R1.markdup.bam +183 2 h3k4me3_R1.markdup.bam +184 5 h3k4me3_R1.markdup.bam +185 9 h3k4me3_R1.markdup.bam +186 4 h3k4me3_R1.markdup.bam +187 7 h3k4me3_R1.markdup.bam +188 9 h3k4me3_R1.markdup.bam +189 3 h3k4me3_R1.markdup.bam +190 4 h3k4me3_R1.markdup.bam +191 2 h3k4me3_R1.markdup.bam +192 1 h3k4me3_R1.markdup.bam +193 3 h3k4me3_R1.markdup.bam +195 6 h3k4me3_R1.markdup.bam +196 1 h3k4me3_R1.markdup.bam +197 8 h3k4me3_R1.markdup.bam +198 6 h3k4me3_R1.markdup.bam +199 9 h3k4me3_R1.markdup.bam +200 4 h3k4me3_R1.markdup.bam +201 5 h3k4me3_R1.markdup.bam +202 7 h3k4me3_R1.markdup.bam +203 7 h3k4me3_R1.markdup.bam +204 2 h3k4me3_R1.markdup.bam +205 4 h3k4me3_R1.markdup.bam +206 5 h3k4me3_R1.markdup.bam +207 8 h3k4me3_R1.markdup.bam +208 8 h3k4me3_R1.markdup.bam +209 5 h3k4me3_R1.markdup.bam +210 3 h3k4me3_R1.markdup.bam +211 9 h3k4me3_R1.markdup.bam +212 7 h3k4me3_R1.markdup.bam +213 11 h3k4me3_R1.markdup.bam +214 6 h3k4me3_R1.markdup.bam +215 6 h3k4me3_R1.markdup.bam +216 3 h3k4me3_R1.markdup.bam +217 2 h3k4me3_R1.markdup.bam +218 4 h3k4me3_R1.markdup.bam +219 6 h3k4me3_R1.markdup.bam +220 5 h3k4me3_R1.markdup.bam +221 3 h3k4me3_R1.markdup.bam +222 2 h3k4me3_R1.markdup.bam +223 4 h3k4me3_R1.markdup.bam +224 3 h3k4me3_R1.markdup.bam +225 4 h3k4me3_R1.markdup.bam +226 1 h3k4me3_R1.markdup.bam +227 11 h3k4me3_R1.markdup.bam +228 7 h3k4me3_R1.markdup.bam +229 1 h3k4me3_R1.markdup.bam +230 7 h3k4me3_R1.markdup.bam +231 8 h3k4me3_R1.markdup.bam +232 4 h3k4me3_R1.markdup.bam +233 8 h3k4me3_R1.markdup.bam +234 1 h3k4me3_R1.markdup.bam +235 6 h3k4me3_R1.markdup.bam +236 4 h3k4me3_R1.markdup.bam +237 5 h3k4me3_R1.markdup.bam +238 2 h3k4me3_R1.markdup.bam +239 3 h3k4me3_R1.markdup.bam +240 3 h3k4me3_R1.markdup.bam +241 3 h3k4me3_R1.markdup.bam +242 6 h3k4me3_R1.markdup.bam +243 8 h3k4me3_R1.markdup.bam +244 1 h3k4me3_R1.markdup.bam +245 3 h3k4me3_R1.markdup.bam +246 3 h3k4me3_R1.markdup.bam +247 4 h3k4me3_R1.markdup.bam +248 3 h3k4me3_R1.markdup.bam +249 2 h3k4me3_R1.markdup.bam +250 4 h3k4me3_R1.markdup.bam +251 2 h3k4me3_R1.markdup.bam +253 2 h3k4me3_R1.markdup.bam +254 3 h3k4me3_R1.markdup.bam +255 5 h3k4me3_R1.markdup.bam +256 5 h3k4me3_R1.markdup.bam +257 5 h3k4me3_R1.markdup.bam +258 8 h3k4me3_R1.markdup.bam +259 3 h3k4me3_R1.markdup.bam +260 5 h3k4me3_R1.markdup.bam +261 1 h3k4me3_R1.markdup.bam +262 5 h3k4me3_R1.markdup.bam +263 4 h3k4me3_R1.markdup.bam +264 2 h3k4me3_R1.markdup.bam +265 3 h3k4me3_R1.markdup.bam +267 1 h3k4me3_R1.markdup.bam +268 3 h3k4me3_R1.markdup.bam +269 1 h3k4me3_R1.markdup.bam +270 3 h3k4me3_R1.markdup.bam +271 1 h3k4me3_R1.markdup.bam +273 3 h3k4me3_R1.markdup.bam +274 5 h3k4me3_R1.markdup.bam +275 4 h3k4me3_R1.markdup.bam +276 2 h3k4me3_R1.markdup.bam +277 1 h3k4me3_R1.markdup.bam +278 4 h3k4me3_R1.markdup.bam +279 3 h3k4me3_R1.markdup.bam +281 1 h3k4me3_R1.markdup.bam +282 3 h3k4me3_R1.markdup.bam +284 1 h3k4me3_R1.markdup.bam +285 2 h3k4me3_R1.markdup.bam +286 1 h3k4me3_R1.markdup.bam +288 1 h3k4me3_R1.markdup.bam +290 3 h3k4me3_R1.markdup.bam +293 2 h3k4me3_R1.markdup.bam +295 2 h3k4me3_R1.markdup.bam +297 1 h3k4me3_R1.markdup.bam +298 4 h3k4me3_R1.markdup.bam +299 1 h3k4me3_R1.markdup.bam +300 1 h3k4me3_R1.markdup.bam +301 1 h3k4me3_R1.markdup.bam +302 2 h3k4me3_R1.markdup.bam +304 2 h3k4me3_R1.markdup.bam +308 1 h3k4me3_R1.markdup.bam +309 1 h3k4me3_R1.markdup.bam +311 1 h3k4me3_R1.markdup.bam +312 1 h3k4me3_R1.markdup.bam +313 1 h3k4me3_R1.markdup.bam +314 4 h3k4me3_R1.markdup.bam +315 1 h3k4me3_R1.markdup.bam +316 1 h3k4me3_R1.markdup.bam +317 5 h3k4me3_R1.markdup.bam +318 2 h3k4me3_R1.markdup.bam +319 3 h3k4me3_R1.markdup.bam +320 1 h3k4me3_R1.markdup.bam +321 1 h3k4me3_R1.markdup.bam +322 2 h3k4me3_R1.markdup.bam +323 2 h3k4me3_R1.markdup.bam +324 3 h3k4me3_R1.markdup.bam +325 4 h3k4me3_R1.markdup.bam +329 1 h3k4me3_R1.markdup.bam +330 2 h3k4me3_R1.markdup.bam +331 1 h3k4me3_R1.markdup.bam +332 5 h3k4me3_R1.markdup.bam +335 1 h3k4me3_R1.markdup.bam +336 1 h3k4me3_R1.markdup.bam +337 2 h3k4me3_R1.markdup.bam +338 2 h3k4me3_R1.markdup.bam +339 3 h3k4me3_R1.markdup.bam +340 2 h3k4me3_R1.markdup.bam +341 3 h3k4me3_R1.markdup.bam +342 2 h3k4me3_R1.markdup.bam +343 2 h3k4me3_R1.markdup.bam +344 1 h3k4me3_R1.markdup.bam +345 1 h3k4me3_R1.markdup.bam +346 1 h3k4me3_R1.markdup.bam +347 1 h3k4me3_R1.markdup.bam +349 1 h3k4me3_R1.markdup.bam +351 2 h3k4me3_R1.markdup.bam +352 4 h3k4me3_R1.markdup.bam +353 1 h3k4me3_R1.markdup.bam +354 3 h3k4me3_R1.markdup.bam +357 2 h3k4me3_R1.markdup.bam +358 5 h3k4me3_R1.markdup.bam +359 1 h3k4me3_R1.markdup.bam +360 3 h3k4me3_R1.markdup.bam +361 3 h3k4me3_R1.markdup.bam +362 4 h3k4me3_R1.markdup.bam +363 3 h3k4me3_R1.markdup.bam +364 1 h3k4me3_R1.markdup.bam +365 2 h3k4me3_R1.markdup.bam +366 1 h3k4me3_R1.markdup.bam +367 3 h3k4me3_R1.markdup.bam +368 7 h3k4me3_R1.markdup.bam +369 2 h3k4me3_R1.markdup.bam +370 3 h3k4me3_R1.markdup.bam +371 7 h3k4me3_R1.markdup.bam +372 2 h3k4me3_R1.markdup.bam +373 3 h3k4me3_R1.markdup.bam +374 1 h3k4me3_R1.markdup.bam +375 5 h3k4me3_R1.markdup.bam +376 1 h3k4me3_R1.markdup.bam +377 2 h3k4me3_R1.markdup.bam +378 3 h3k4me3_R1.markdup.bam +379 2 h3k4me3_R1.markdup.bam +380 3 h3k4me3_R1.markdup.bam +381 4 h3k4me3_R1.markdup.bam +382 2 h3k4me3_R1.markdup.bam +383 5 h3k4me3_R1.markdup.bam +384 4 h3k4me3_R1.markdup.bam +386 4 h3k4me3_R1.markdup.bam +387 2 h3k4me3_R1.markdup.bam +388 1 h3k4me3_R1.markdup.bam +389 4 h3k4me3_R1.markdup.bam +390 5 h3k4me3_R1.markdup.bam +392 2 h3k4me3_R1.markdup.bam +393 4 h3k4me3_R1.markdup.bam +394 3 h3k4me3_R1.markdup.bam +395 2 h3k4me3_R1.markdup.bam +396 3 h3k4me3_R1.markdup.bam +397 1 h3k4me3_R1.markdup.bam +398 1 h3k4me3_R1.markdup.bam +399 3 h3k4me3_R1.markdup.bam +400 1 h3k4me3_R1.markdup.bam +401 2 h3k4me3_R1.markdup.bam +402 3 h3k4me3_R1.markdup.bam +405 3 h3k4me3_R1.markdup.bam +406 4 h3k4me3_R1.markdup.bam +407 1 h3k4me3_R1.markdup.bam +408 3 h3k4me3_R1.markdup.bam +410 2 h3k4me3_R1.markdup.bam +411 2 h3k4me3_R1.markdup.bam +413 1 h3k4me3_R1.markdup.bam +414 3 h3k4me3_R1.markdup.bam +415 3 h3k4me3_R1.markdup.bam +416 7 h3k4me3_R1.markdup.bam +417 2 h3k4me3_R1.markdup.bam +418 1 h3k4me3_R1.markdup.bam +419 1 h3k4me3_R1.markdup.bam +421 5 h3k4me3_R1.markdup.bam +422 3 h3k4me3_R1.markdup.bam +423 2 h3k4me3_R1.markdup.bam +424 2 h3k4me3_R1.markdup.bam +425 1 h3k4me3_R1.markdup.bam +426 3 h3k4me3_R1.markdup.bam +428 3 h3k4me3_R1.markdup.bam +429 2 h3k4me3_R1.markdup.bam +431 1 h3k4me3_R1.markdup.bam +432 4 h3k4me3_R1.markdup.bam +433 1 h3k4me3_R1.markdup.bam +434 1 h3k4me3_R1.markdup.bam +435 1 h3k4me3_R1.markdup.bam +436 2 h3k4me3_R1.markdup.bam +437 3 h3k4me3_R1.markdup.bam +439 1 h3k4me3_R1.markdup.bam +442 3 h3k4me3_R1.markdup.bam +443 2 h3k4me3_R1.markdup.bam +444 2 h3k4me3_R1.markdup.bam +446 2 h3k4me3_R1.markdup.bam +448 3 h3k4me3_R1.markdup.bam +449 1 h3k4me3_R1.markdup.bam +450 1 h3k4me3_R1.markdup.bam +451 2 h3k4me3_R1.markdup.bam +452 2 h3k4me3_R1.markdup.bam +453 2 h3k4me3_R1.markdup.bam +455 1 h3k4me3_R1.markdup.bam +456 1 h3k4me3_R1.markdup.bam +460 2 h3k4me3_R1.markdup.bam +461 1 h3k4me3_R1.markdup.bam +462 2 h3k4me3_R1.markdup.bam +465 1 h3k4me3_R1.markdup.bam +466 1 h3k4me3_R1.markdup.bam +469 1 h3k4me3_R1.markdup.bam +471 2 h3k4me3_R1.markdup.bam +474 1 h3k4me3_R1.markdup.bam +475 1 h3k4me3_R1.markdup.bam +478 1 h3k4me3_R1.markdup.bam +479 1 h3k4me3_R1.markdup.bam +484 1 h3k4me3_R1.markdup.bam +485 1 h3k4me3_R1.markdup.bam +490 1 h3k4me3_R1.markdup.bam +493 1 h3k4me3_R1.markdup.bam +495 1 h3k4me3_R1.markdup.bam +496 2 h3k4me3_R1.markdup.bam +497 1 h3k4me3_R1.markdup.bam +498 1 h3k4me3_R1.markdup.bam +500 1 h3k4me3_R1.markdup.bam +501 2 h3k4me3_R1.markdup.bam +502 3 h3k4me3_R1.markdup.bam +505 1 h3k4me3_R1.markdup.bam +508 1 h3k4me3_R1.markdup.bam +510 1 h3k4me3_R1.markdup.bam +513 1 h3k4me3_R1.markdup.bam +514 1 h3k4me3_R1.markdup.bam +523 1 h3k4me3_R1.markdup.bam +524 1 h3k4me3_R1.markdup.bam +525 1 h3k4me3_R1.markdup.bam +526 1 h3k4me3_R1.markdup.bam +529 1 h3k4me3_R1.markdup.bam +532 1 h3k4me3_R1.markdup.bam +539 1 h3k4me3_R1.markdup.bam +545 3 h3k4me3_R1.markdup.bam +549 1 h3k4me3_R1.markdup.bam +550 1 h3k4me3_R1.markdup.bam +551 1 h3k4me3_R1.markdup.bam +552 1 h3k4me3_R1.markdup.bam +554 1 h3k4me3_R1.markdup.bam +556 1 h3k4me3_R1.markdup.bam +558 1 h3k4me3_R1.markdup.bam +559 3 h3k4me3_R1.markdup.bam +560 2 h3k4me3_R1.markdup.bam +561 1 h3k4me3_R1.markdup.bam +563 2 h3k4me3_R1.markdup.bam +565 2 h3k4me3_R1.markdup.bam +566 1 h3k4me3_R1.markdup.bam +569 1 h3k4me3_R1.markdup.bam +570 2 h3k4me3_R1.markdup.bam +571 1 h3k4me3_R1.markdup.bam +572 1 h3k4me3_R1.markdup.bam +576 2 h3k4me3_R1.markdup.bam +579 1 h3k4me3_R1.markdup.bam +581 2 h3k4me3_R1.markdup.bam +582 2 h3k4me3_R1.markdup.bam +583 1 h3k4me3_R1.markdup.bam +585 2 h3k4me3_R1.markdup.bam +586 1 h3k4me3_R1.markdup.bam +588 2 h3k4me3_R1.markdup.bam +589 2 h3k4me3_R1.markdup.bam +590 1 h3k4me3_R1.markdup.bam +591 3 h3k4me3_R1.markdup.bam +597 1 h3k4me3_R1.markdup.bam +598 1 h3k4me3_R1.markdup.bam +601 1 h3k4me3_R1.markdup.bam +603 1 h3k4me3_R1.markdup.bam +606 1 h3k4me3_R1.markdup.bam +611 1 h3k4me3_R1.markdup.bam +613 1 h3k4me3_R1.markdup.bam +617 1 h3k4me3_R1.markdup.bam +621 2 h3k4me3_R1.markdup.bam +625 2 h3k4me3_R1.markdup.bam +627 1 h3k4me3_R1.markdup.bam +628 1 h3k4me3_R1.markdup.bam +629 1 h3k4me3_R1.markdup.bam +630 1 h3k4me3_R1.markdup.bam +631 1 h3k4me3_R1.markdup.bam +632 1 h3k4me3_R1.markdup.bam +633 2 h3k4me3_R1.markdup.bam +636 1 h3k4me3_R1.markdup.bam +637 1 h3k4me3_R1.markdup.bam +638 1 h3k4me3_R1.markdup.bam +639 1 h3k4me3_R1.markdup.bam +640 1 h3k4me3_R1.markdup.bam +642 1 h3k4me3_R1.markdup.bam +643 1 h3k4me3_R1.markdup.bam +646 1 h3k4me3_R1.markdup.bam +648 1 h3k4me3_R1.markdup.bam +650 1 h3k4me3_R1.markdup.bam +652 1 h3k4me3_R1.markdup.bam +659 1 h3k4me3_R1.markdup.bam +660 1 h3k4me3_R1.markdup.bam +661 1 h3k4me3_R1.markdup.bam +662 1 h3k4me3_R1.markdup.bam +669 1 h3k4me3_R1.markdup.bam +675 1 h3k4me3_R1.markdup.bam +679 1 h3k4me3_R1.markdup.bam +680 1 h3k4me3_R1.markdup.bam +684 1 h3k4me3_R1.markdup.bam +687 1 h3k4me3_R1.markdup.bam +688 1 h3k4me3_R1.markdup.bam +692 1 h3k4me3_R1.markdup.bam +700 1 h3k4me3_R1.markdup.bam diff --git a/dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv b/dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv new file mode 100644 index 00000000..f0b1ddb0 --- /dev/null +++ b/dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv @@ -0,0 +1,564 @@ +#bamPEFragmentSize +Size Occurrences Sample +28 1 h3k4me3_R2.markdup.bam +30 1 h3k4me3_R2.markdup.bam +31 2 h3k4me3_R2.markdup.bam +32 1 h3k4me3_R2.markdup.bam +35 1 h3k4me3_R2.markdup.bam +36 3 h3k4me3_R2.markdup.bam +37 2 h3k4me3_R2.markdup.bam +38 2 h3k4me3_R2.markdup.bam +39 3 h3k4me3_R2.markdup.bam +40 4 h3k4me3_R2.markdup.bam +41 4 h3k4me3_R2.markdup.bam +42 6 h3k4me3_R2.markdup.bam +43 2 h3k4me3_R2.markdup.bam +44 1 h3k4me3_R2.markdup.bam +45 2 h3k4me3_R2.markdup.bam +46 4 h3k4me3_R2.markdup.bam +47 5 h3k4me3_R2.markdup.bam +48 1 h3k4me3_R2.markdup.bam +49 2 h3k4me3_R2.markdup.bam +51 6 h3k4me3_R2.markdup.bam +52 4 h3k4me3_R2.markdup.bam +53 5 h3k4me3_R2.markdup.bam +54 2 h3k4me3_R2.markdup.bam +55 6 h3k4me3_R2.markdup.bam +56 3 h3k4me3_R2.markdup.bam +57 1 h3k4me3_R2.markdup.bam +59 1 h3k4me3_R2.markdup.bam +60 3 h3k4me3_R2.markdup.bam +61 1 h3k4me3_R2.markdup.bam +62 4 h3k4me3_R2.markdup.bam +63 3 h3k4me3_R2.markdup.bam +64 11 h3k4me3_R2.markdup.bam +65 3 h3k4me3_R2.markdup.bam +66 2 h3k4me3_R2.markdup.bam +67 5 h3k4me3_R2.markdup.bam +68 1 h3k4me3_R2.markdup.bam +69 2 h3k4me3_R2.markdup.bam +70 1 h3k4me3_R2.markdup.bam +73 7 h3k4me3_R2.markdup.bam +74 5 h3k4me3_R2.markdup.bam +75 2 h3k4me3_R2.markdup.bam +76 3 h3k4me3_R2.markdup.bam +77 2 h3k4me3_R2.markdup.bam +78 2 h3k4me3_R2.markdup.bam +79 2 h3k4me3_R2.markdup.bam +80 1 h3k4me3_R2.markdup.bam +81 4 h3k4me3_R2.markdup.bam +82 3 h3k4me3_R2.markdup.bam +83 6 h3k4me3_R2.markdup.bam +84 8 h3k4me3_R2.markdup.bam +85 5 h3k4me3_R2.markdup.bam +86 1 h3k4me3_R2.markdup.bam +87 5 h3k4me3_R2.markdup.bam +88 2 h3k4me3_R2.markdup.bam +89 1 h3k4me3_R2.markdup.bam +91 2 h3k4me3_R2.markdup.bam +92 2 h3k4me3_R2.markdup.bam +93 1 h3k4me3_R2.markdup.bam +94 4 h3k4me3_R2.markdup.bam +95 2 h3k4me3_R2.markdup.bam +96 2 h3k4me3_R2.markdup.bam +97 1 h3k4me3_R2.markdup.bam +98 2 h3k4me3_R2.markdup.bam +99 2 h3k4me3_R2.markdup.bam +100 2 h3k4me3_R2.markdup.bam +103 5 h3k4me3_R2.markdup.bam +104 2 h3k4me3_R2.markdup.bam +105 5 h3k4me3_R2.markdup.bam +106 2 h3k4me3_R2.markdup.bam +107 4 h3k4me3_R2.markdup.bam +109 2 h3k4me3_R2.markdup.bam +110 2 h3k4me3_R2.markdup.bam +112 2 h3k4me3_R2.markdup.bam +113 1 h3k4me3_R2.markdup.bam +114 2 h3k4me3_R2.markdup.bam +115 5 h3k4me3_R2.markdup.bam +116 1 h3k4me3_R2.markdup.bam +117 1 h3k4me3_R2.markdup.bam +119 3 h3k4me3_R2.markdup.bam +120 1 h3k4me3_R2.markdup.bam +121 3 h3k4me3_R2.markdup.bam +123 2 h3k4me3_R2.markdup.bam +124 2 h3k4me3_R2.markdup.bam +125 1 h3k4me3_R2.markdup.bam +126 4 h3k4me3_R2.markdup.bam +127 1 h3k4me3_R2.markdup.bam +128 2 h3k4me3_R2.markdup.bam +129 2 h3k4me3_R2.markdup.bam +130 2 h3k4me3_R2.markdup.bam +131 1 h3k4me3_R2.markdup.bam +132 4 h3k4me3_R2.markdup.bam +133 2 h3k4me3_R2.markdup.bam +134 3 h3k4me3_R2.markdup.bam +135 4 h3k4me3_R2.markdup.bam +136 4 h3k4me3_R2.markdup.bam +137 3 h3k4me3_R2.markdup.bam +138 1 h3k4me3_R2.markdup.bam +139 1 h3k4me3_R2.markdup.bam +140 3 h3k4me3_R2.markdup.bam +141 2 h3k4me3_R2.markdup.bam +142 3 h3k4me3_R2.markdup.bam +143 2 h3k4me3_R2.markdup.bam +144 2 h3k4me3_R2.markdup.bam +145 2 h3k4me3_R2.markdup.bam +146 3 h3k4me3_R2.markdup.bam +147 1 h3k4me3_R2.markdup.bam +149 3 h3k4me3_R2.markdup.bam +150 6 h3k4me3_R2.markdup.bam +151 4 h3k4me3_R2.markdup.bam +152 3 h3k4me3_R2.markdup.bam +153 1 h3k4me3_R2.markdup.bam +154 4 h3k4me3_R2.markdup.bam +155 2 h3k4me3_R2.markdup.bam +156 3 h3k4me3_R2.markdup.bam +157 8 h3k4me3_R2.markdup.bam +158 2 h3k4me3_R2.markdup.bam +159 1 h3k4me3_R2.markdup.bam +160 1 h3k4me3_R2.markdup.bam +161 2 h3k4me3_R2.markdup.bam +162 3 h3k4me3_R2.markdup.bam +163 8 h3k4me3_R2.markdup.bam +164 9 h3k4me3_R2.markdup.bam +165 4 h3k4me3_R2.markdup.bam +166 6 h3k4me3_R2.markdup.bam +167 7 h3k4me3_R2.markdup.bam +168 2 h3k4me3_R2.markdup.bam +169 5 h3k4me3_R2.markdup.bam +170 4 h3k4me3_R2.markdup.bam +171 4 h3k4me3_R2.markdup.bam +172 5 h3k4me3_R2.markdup.bam +173 5 h3k4me3_R2.markdup.bam +174 6 h3k4me3_R2.markdup.bam +175 3 h3k4me3_R2.markdup.bam +176 7 h3k4me3_R2.markdup.bam +177 5 h3k4me3_R2.markdup.bam +178 7 h3k4me3_R2.markdup.bam +179 5 h3k4me3_R2.markdup.bam +180 5 h3k4me3_R2.markdup.bam +181 2 h3k4me3_R2.markdup.bam +182 6 h3k4me3_R2.markdup.bam +183 3 h3k4me3_R2.markdup.bam +184 6 h3k4me3_R2.markdup.bam +185 10 h3k4me3_R2.markdup.bam +186 8 h3k4me3_R2.markdup.bam +187 3 h3k4me3_R2.markdup.bam +188 8 h3k4me3_R2.markdup.bam +189 6 h3k4me3_R2.markdup.bam +190 13 h3k4me3_R2.markdup.bam +191 2 h3k4me3_R2.markdup.bam +192 5 h3k4me3_R2.markdup.bam +193 3 h3k4me3_R2.markdup.bam +194 3 h3k4me3_R2.markdup.bam +195 6 h3k4me3_R2.markdup.bam +196 10 h3k4me3_R2.markdup.bam +197 3 h3k4me3_R2.markdup.bam +198 4 h3k4me3_R2.markdup.bam +199 7 h3k4me3_R2.markdup.bam +200 6 h3k4me3_R2.markdup.bam +201 3 h3k4me3_R2.markdup.bam +202 12 h3k4me3_R2.markdup.bam +203 6 h3k4me3_R2.markdup.bam +204 3 h3k4me3_R2.markdup.bam +205 6 h3k4me3_R2.markdup.bam +206 7 h3k4me3_R2.markdup.bam +207 4 h3k4me3_R2.markdup.bam +208 8 h3k4me3_R2.markdup.bam +209 5 h3k4me3_R2.markdup.bam +210 6 h3k4me3_R2.markdup.bam +211 9 h3k4me3_R2.markdup.bam +212 2 h3k4me3_R2.markdup.bam +213 5 h3k4me3_R2.markdup.bam +214 2 h3k4me3_R2.markdup.bam +215 8 h3k4me3_R2.markdup.bam +216 2 h3k4me3_R2.markdup.bam +217 11 h3k4me3_R2.markdup.bam +218 7 h3k4me3_R2.markdup.bam +219 5 h3k4me3_R2.markdup.bam +220 4 h3k4me3_R2.markdup.bam +221 7 h3k4me3_R2.markdup.bam +222 5 h3k4me3_R2.markdup.bam +223 8 h3k4me3_R2.markdup.bam +224 3 h3k4me3_R2.markdup.bam +225 5 h3k4me3_R2.markdup.bam +226 7 h3k4me3_R2.markdup.bam +227 7 h3k4me3_R2.markdup.bam +228 8 h3k4me3_R2.markdup.bam +229 9 h3k4me3_R2.markdup.bam +230 3 h3k4me3_R2.markdup.bam +231 2 h3k4me3_R2.markdup.bam +232 5 h3k4me3_R2.markdup.bam +233 3 h3k4me3_R2.markdup.bam +234 7 h3k4me3_R2.markdup.bam +235 6 h3k4me3_R2.markdup.bam +236 7 h3k4me3_R2.markdup.bam +237 3 h3k4me3_R2.markdup.bam +238 5 h3k4me3_R2.markdup.bam +239 7 h3k4me3_R2.markdup.bam +240 7 h3k4me3_R2.markdup.bam +241 4 h3k4me3_R2.markdup.bam +242 4 h3k4me3_R2.markdup.bam +243 2 h3k4me3_R2.markdup.bam +244 2 h3k4me3_R2.markdup.bam +245 10 h3k4me3_R2.markdup.bam +246 4 h3k4me3_R2.markdup.bam +247 2 h3k4me3_R2.markdup.bam +248 4 h3k4me3_R2.markdup.bam +249 4 h3k4me3_R2.markdup.bam +250 3 h3k4me3_R2.markdup.bam +251 6 h3k4me3_R2.markdup.bam +253 8 h3k4me3_R2.markdup.bam +254 5 h3k4me3_R2.markdup.bam +255 2 h3k4me3_R2.markdup.bam +256 5 h3k4me3_R2.markdup.bam +257 5 h3k4me3_R2.markdup.bam +258 4 h3k4me3_R2.markdup.bam +259 1 h3k4me3_R2.markdup.bam +260 4 h3k4me3_R2.markdup.bam +261 1 h3k4me3_R2.markdup.bam +262 4 h3k4me3_R2.markdup.bam +263 2 h3k4me3_R2.markdup.bam +265 5 h3k4me3_R2.markdup.bam +266 3 h3k4me3_R2.markdup.bam +267 1 h3k4me3_R2.markdup.bam +268 6 h3k4me3_R2.markdup.bam +269 4 h3k4me3_R2.markdup.bam +270 4 h3k4me3_R2.markdup.bam +272 1 h3k4me3_R2.markdup.bam +273 3 h3k4me3_R2.markdup.bam +274 2 h3k4me3_R2.markdup.bam +275 3 h3k4me3_R2.markdup.bam +276 1 h3k4me3_R2.markdup.bam +277 1 h3k4me3_R2.markdup.bam +278 1 h3k4me3_R2.markdup.bam +279 7 h3k4me3_R2.markdup.bam +280 2 h3k4me3_R2.markdup.bam +281 2 h3k4me3_R2.markdup.bam +282 3 h3k4me3_R2.markdup.bam +283 2 h3k4me3_R2.markdup.bam +284 4 h3k4me3_R2.markdup.bam +285 1 h3k4me3_R2.markdup.bam +286 1 h3k4me3_R2.markdup.bam +287 1 h3k4me3_R2.markdup.bam +288 3 h3k4me3_R2.markdup.bam +289 3 h3k4me3_R2.markdup.bam +290 2 h3k4me3_R2.markdup.bam +291 3 h3k4me3_R2.markdup.bam +292 2 h3k4me3_R2.markdup.bam +293 2 h3k4me3_R2.markdup.bam +294 1 h3k4me3_R2.markdup.bam +295 4 h3k4me3_R2.markdup.bam +296 3 h3k4me3_R2.markdup.bam +297 1 h3k4me3_R2.markdup.bam +298 2 h3k4me3_R2.markdup.bam +299 5 h3k4me3_R2.markdup.bam +300 1 h3k4me3_R2.markdup.bam +301 2 h3k4me3_R2.markdup.bam +302 4 h3k4me3_R2.markdup.bam +303 1 h3k4me3_R2.markdup.bam +304 2 h3k4me3_R2.markdup.bam +305 5 h3k4me3_R2.markdup.bam +306 3 h3k4me3_R2.markdup.bam +307 2 h3k4me3_R2.markdup.bam +309 3 h3k4me3_R2.markdup.bam +310 2 h3k4me3_R2.markdup.bam +311 1 h3k4me3_R2.markdup.bam +312 2 h3k4me3_R2.markdup.bam +313 1 h3k4me3_R2.markdup.bam +314 2 h3k4me3_R2.markdup.bam +315 5 h3k4me3_R2.markdup.bam +317 1 h3k4me3_R2.markdup.bam +318 1 h3k4me3_R2.markdup.bam +319 2 h3k4me3_R2.markdup.bam +320 3 h3k4me3_R2.markdup.bam +321 2 h3k4me3_R2.markdup.bam +322 4 h3k4me3_R2.markdup.bam +323 2 h3k4me3_R2.markdup.bam +324 4 h3k4me3_R2.markdup.bam +325 2 h3k4me3_R2.markdup.bam +326 1 h3k4me3_R2.markdup.bam +327 1 h3k4me3_R2.markdup.bam +328 1 h3k4me3_R2.markdup.bam +329 1 h3k4me3_R2.markdup.bam +330 4 h3k4me3_R2.markdup.bam +331 2 h3k4me3_R2.markdup.bam +332 4 h3k4me3_R2.markdup.bam +333 5 h3k4me3_R2.markdup.bam +334 3 h3k4me3_R2.markdup.bam +336 3 h3k4me3_R2.markdup.bam +337 1 h3k4me3_R2.markdup.bam +338 2 h3k4me3_R2.markdup.bam +339 1 h3k4me3_R2.markdup.bam +341 1 h3k4me3_R2.markdup.bam +342 2 h3k4me3_R2.markdup.bam +343 2 h3k4me3_R2.markdup.bam +344 4 h3k4me3_R2.markdup.bam +345 1 h3k4me3_R2.markdup.bam +346 3 h3k4me3_R2.markdup.bam +347 4 h3k4me3_R2.markdup.bam +348 2 h3k4me3_R2.markdup.bam +349 1 h3k4me3_R2.markdup.bam +350 3 h3k4me3_R2.markdup.bam +351 4 h3k4me3_R2.markdup.bam +352 4 h3k4me3_R2.markdup.bam +353 1 h3k4me3_R2.markdup.bam +355 3 h3k4me3_R2.markdup.bam +356 1 h3k4me3_R2.markdup.bam +358 2 h3k4me3_R2.markdup.bam +359 3 h3k4me3_R2.markdup.bam +360 3 h3k4me3_R2.markdup.bam +361 3 h3k4me3_R2.markdup.bam +362 2 h3k4me3_R2.markdup.bam +363 1 h3k4me3_R2.markdup.bam +364 1 h3k4me3_R2.markdup.bam +365 4 h3k4me3_R2.markdup.bam +366 6 h3k4me3_R2.markdup.bam +367 2 h3k4me3_R2.markdup.bam +369 2 h3k4me3_R2.markdup.bam +370 1 h3k4me3_R2.markdup.bam +371 3 h3k4me3_R2.markdup.bam +372 3 h3k4me3_R2.markdup.bam +373 1 h3k4me3_R2.markdup.bam +374 4 h3k4me3_R2.markdup.bam +375 3 h3k4me3_R2.markdup.bam +376 2 h3k4me3_R2.markdup.bam +377 5 h3k4me3_R2.markdup.bam +378 1 h3k4me3_R2.markdup.bam +379 5 h3k4me3_R2.markdup.bam +380 3 h3k4me3_R2.markdup.bam +381 2 h3k4me3_R2.markdup.bam +382 1 h3k4me3_R2.markdup.bam +383 5 h3k4me3_R2.markdup.bam +384 5 h3k4me3_R2.markdup.bam +385 1 h3k4me3_R2.markdup.bam +386 3 h3k4me3_R2.markdup.bam +387 1 h3k4me3_R2.markdup.bam +388 4 h3k4me3_R2.markdup.bam +389 3 h3k4me3_R2.markdup.bam +390 5 h3k4me3_R2.markdup.bam +391 4 h3k4me3_R2.markdup.bam +392 6 h3k4me3_R2.markdup.bam +393 3 h3k4me3_R2.markdup.bam +394 1 h3k4me3_R2.markdup.bam +395 2 h3k4me3_R2.markdup.bam +396 3 h3k4me3_R2.markdup.bam +397 2 h3k4me3_R2.markdup.bam +398 5 h3k4me3_R2.markdup.bam +399 4 h3k4me3_R2.markdup.bam +400 1 h3k4me3_R2.markdup.bam +401 1 h3k4me3_R2.markdup.bam +402 2 h3k4me3_R2.markdup.bam +404 5 h3k4me3_R2.markdup.bam +405 2 h3k4me3_R2.markdup.bam +406 2 h3k4me3_R2.markdup.bam +407 4 h3k4me3_R2.markdup.bam +408 2 h3k4me3_R2.markdup.bam +409 1 h3k4me3_R2.markdup.bam +410 3 h3k4me3_R2.markdup.bam +411 2 h3k4me3_R2.markdup.bam +412 1 h3k4me3_R2.markdup.bam +413 3 h3k4me3_R2.markdup.bam +414 4 h3k4me3_R2.markdup.bam +415 1 h3k4me3_R2.markdup.bam +417 4 h3k4me3_R2.markdup.bam +418 2 h3k4me3_R2.markdup.bam +419 5 h3k4me3_R2.markdup.bam +420 3 h3k4me3_R2.markdup.bam +423 1 h3k4me3_R2.markdup.bam +424 2 h3k4me3_R2.markdup.bam +425 2 h3k4me3_R2.markdup.bam +426 3 h3k4me3_R2.markdup.bam +428 4 h3k4me3_R2.markdup.bam +429 1 h3k4me3_R2.markdup.bam +430 1 h3k4me3_R2.markdup.bam +431 4 h3k4me3_R2.markdup.bam +432 3 h3k4me3_R2.markdup.bam +433 1 h3k4me3_R2.markdup.bam +434 1 h3k4me3_R2.markdup.bam +435 2 h3k4me3_R2.markdup.bam +436 1 h3k4me3_R2.markdup.bam +437 4 h3k4me3_R2.markdup.bam +438 3 h3k4me3_R2.markdup.bam +439 2 h3k4me3_R2.markdup.bam +440 2 h3k4me3_R2.markdup.bam +441 1 h3k4me3_R2.markdup.bam +442 1 h3k4me3_R2.markdup.bam +443 1 h3k4me3_R2.markdup.bam +444 1 h3k4me3_R2.markdup.bam +445 2 h3k4me3_R2.markdup.bam +446 1 h3k4me3_R2.markdup.bam +447 1 h3k4me3_R2.markdup.bam +448 1 h3k4me3_R2.markdup.bam +449 1 h3k4me3_R2.markdup.bam +450 1 h3k4me3_R2.markdup.bam +451 3 h3k4me3_R2.markdup.bam +452 4 h3k4me3_R2.markdup.bam +453 3 h3k4me3_R2.markdup.bam +456 1 h3k4me3_R2.markdup.bam +457 1 h3k4me3_R2.markdup.bam +458 2 h3k4me3_R2.markdup.bam +459 1 h3k4me3_R2.markdup.bam +460 3 h3k4me3_R2.markdup.bam +461 2 h3k4me3_R2.markdup.bam +462 2 h3k4me3_R2.markdup.bam +463 1 h3k4me3_R2.markdup.bam +464 2 h3k4me3_R2.markdup.bam +465 2 h3k4me3_R2.markdup.bam +467 3 h3k4me3_R2.markdup.bam +468 2 h3k4me3_R2.markdup.bam +469 1 h3k4me3_R2.markdup.bam +470 1 h3k4me3_R2.markdup.bam +471 1 h3k4me3_R2.markdup.bam +473 2 h3k4me3_R2.markdup.bam +474 1 h3k4me3_R2.markdup.bam +476 4 h3k4me3_R2.markdup.bam +477 2 h3k4me3_R2.markdup.bam +481 1 h3k4me3_R2.markdup.bam +482 1 h3k4me3_R2.markdup.bam +483 2 h3k4me3_R2.markdup.bam +484 2 h3k4me3_R2.markdup.bam +485 3 h3k4me3_R2.markdup.bam +487 1 h3k4me3_R2.markdup.bam +488 2 h3k4me3_R2.markdup.bam +489 2 h3k4me3_R2.markdup.bam +490 3 h3k4me3_R2.markdup.bam +492 3 h3k4me3_R2.markdup.bam +493 1 h3k4me3_R2.markdup.bam +494 4 h3k4me3_R2.markdup.bam +501 2 h3k4me3_R2.markdup.bam +502 1 h3k4me3_R2.markdup.bam +503 3 h3k4me3_R2.markdup.bam +504 1 h3k4me3_R2.markdup.bam +505 2 h3k4me3_R2.markdup.bam +506 2 h3k4me3_R2.markdup.bam +507 1 h3k4me3_R2.markdup.bam +509 2 h3k4me3_R2.markdup.bam +511 2 h3k4me3_R2.markdup.bam +514 2 h3k4me3_R2.markdup.bam +516 1 h3k4me3_R2.markdup.bam +517 1 h3k4me3_R2.markdup.bam +518 1 h3k4me3_R2.markdup.bam +520 1 h3k4me3_R2.markdup.bam +521 1 h3k4me3_R2.markdup.bam +523 1 h3k4me3_R2.markdup.bam +524 2 h3k4me3_R2.markdup.bam +525 2 h3k4me3_R2.markdup.bam +527 1 h3k4me3_R2.markdup.bam +528 3 h3k4me3_R2.markdup.bam +529 2 h3k4me3_R2.markdup.bam +530 3 h3k4me3_R2.markdup.bam +531 1 h3k4me3_R2.markdup.bam +532 1 h3k4me3_R2.markdup.bam +533 2 h3k4me3_R2.markdup.bam +534 2 h3k4me3_R2.markdup.bam +535 2 h3k4me3_R2.markdup.bam +536 3 h3k4me3_R2.markdup.bam +537 1 h3k4me3_R2.markdup.bam +539 2 h3k4me3_R2.markdup.bam +540 1 h3k4me3_R2.markdup.bam +542 1 h3k4me3_R2.markdup.bam +543 4 h3k4me3_R2.markdup.bam +544 1 h3k4me3_R2.markdup.bam +545 2 h3k4me3_R2.markdup.bam +546 2 h3k4me3_R2.markdup.bam +547 1 h3k4me3_R2.markdup.bam +548 1 h3k4me3_R2.markdup.bam +550 1 h3k4me3_R2.markdup.bam +551 3 h3k4me3_R2.markdup.bam +554 2 h3k4me3_R2.markdup.bam +555 2 h3k4me3_R2.markdup.bam +556 1 h3k4me3_R2.markdup.bam +557 3 h3k4me3_R2.markdup.bam +558 3 h3k4me3_R2.markdup.bam +560 1 h3k4me3_R2.markdup.bam +561 2 h3k4me3_R2.markdup.bam +563 1 h3k4me3_R2.markdup.bam +565 1 h3k4me3_R2.markdup.bam +566 2 h3k4me3_R2.markdup.bam +567 1 h3k4me3_R2.markdup.bam +568 4 h3k4me3_R2.markdup.bam +569 1 h3k4me3_R2.markdup.bam +570 1 h3k4me3_R2.markdup.bam +571 3 h3k4me3_R2.markdup.bam +574 1 h3k4me3_R2.markdup.bam +575 4 h3k4me3_R2.markdup.bam +577 3 h3k4me3_R2.markdup.bam +578 1 h3k4me3_R2.markdup.bam +579 1 h3k4me3_R2.markdup.bam +581 1 h3k4me3_R2.markdup.bam +583 1 h3k4me3_R2.markdup.bam +584 3 h3k4me3_R2.markdup.bam +585 1 h3k4me3_R2.markdup.bam +587 3 h3k4me3_R2.markdup.bam +588 1 h3k4me3_R2.markdup.bam +589 1 h3k4me3_R2.markdup.bam +591 1 h3k4me3_R2.markdup.bam +592 1 h3k4me3_R2.markdup.bam +593 1 h3k4me3_R2.markdup.bam +594 2 h3k4me3_R2.markdup.bam +595 1 h3k4me3_R2.markdup.bam +596 3 h3k4me3_R2.markdup.bam +597 1 h3k4me3_R2.markdup.bam +598 2 h3k4me3_R2.markdup.bam +599 3 h3k4me3_R2.markdup.bam +600 2 h3k4me3_R2.markdup.bam +601 1 h3k4me3_R2.markdup.bam +602 1 h3k4me3_R2.markdup.bam +603 2 h3k4me3_R2.markdup.bam +604 2 h3k4me3_R2.markdup.bam +605 1 h3k4me3_R2.markdup.bam +606 2 h3k4me3_R2.markdup.bam +607 2 h3k4me3_R2.markdup.bam +608 1 h3k4me3_R2.markdup.bam +609 1 h3k4me3_R2.markdup.bam +610 1 h3k4me3_R2.markdup.bam +611 1 h3k4me3_R2.markdup.bam +612 3 h3k4me3_R2.markdup.bam +613 1 h3k4me3_R2.markdup.bam +616 1 h3k4me3_R2.markdup.bam +619 2 h3k4me3_R2.markdup.bam +620 1 h3k4me3_R2.markdup.bam +622 2 h3k4me3_R2.markdup.bam +623 1 h3k4me3_R2.markdup.bam +624 1 h3k4me3_R2.markdup.bam +627 1 h3k4me3_R2.markdup.bam +628 1 h3k4me3_R2.markdup.bam +629 1 h3k4me3_R2.markdup.bam +631 1 h3k4me3_R2.markdup.bam +634 1 h3k4me3_R2.markdup.bam +635 1 h3k4me3_R2.markdup.bam +639 1 h3k4me3_R2.markdup.bam +640 1 h3k4me3_R2.markdup.bam +642 2 h3k4me3_R2.markdup.bam +644 1 h3k4me3_R2.markdup.bam +646 1 h3k4me3_R2.markdup.bam +649 3 h3k4me3_R2.markdup.bam +651 2 h3k4me3_R2.markdup.bam +652 1 h3k4me3_R2.markdup.bam +653 1 h3k4me3_R2.markdup.bam +658 1 h3k4me3_R2.markdup.bam +659 2 h3k4me3_R2.markdup.bam +660 1 h3k4me3_R2.markdup.bam +661 2 h3k4me3_R2.markdup.bam +662 3 h3k4me3_R2.markdup.bam +663 1 h3k4me3_R2.markdup.bam +664 1 h3k4me3_R2.markdup.bam +665 2 h3k4me3_R2.markdup.bam +667 1 h3k4me3_R2.markdup.bam +670 1 h3k4me3_R2.markdup.bam +672 1 h3k4me3_R2.markdup.bam +673 2 h3k4me3_R2.markdup.bam +674 1 h3k4me3_R2.markdup.bam +676 2 h3k4me3_R2.markdup.bam +677 1 h3k4me3_R2.markdup.bam +683 2 h3k4me3_R2.markdup.bam +685 1 h3k4me3_R2.markdup.bam +686 1 h3k4me3_R2.markdup.bam +687 2 h3k4me3_R2.markdup.bam +693 1 h3k4me3_R2.markdup.bam +694 2 h3k4me3_R2.markdup.bam +696 1 h3k4me3_R2.markdup.bam +698 1 h3k4me3_R2.markdup.bam +699 2 h3k4me3_R2.markdup.bam diff --git a/dev/docker/static_reports/test_data/igg_R1_raw.csv b/dev/docker/static_reports/test_data/igg_R1_raw.csv new file mode 100644 index 00000000..18a32397 --- /dev/null +++ b/dev/docker/static_reports/test_data/igg_R1_raw.csv @@ -0,0 +1,534 @@ +#bamPEFragmentSize +Size Occurrences Sample +25 1 igg_R1.dedup.bam +27 1 igg_R1.dedup.bam +28 1 igg_R1.dedup.bam +30 1 igg_R1.dedup.bam +34 1 igg_R1.dedup.bam +35 1 igg_R1.dedup.bam +38 1 igg_R1.dedup.bam +40 1 igg_R1.dedup.bam +42 2 igg_R1.dedup.bam +45 1 igg_R1.dedup.bam +47 2 igg_R1.dedup.bam +52 1 igg_R1.dedup.bam +53 1 igg_R1.dedup.bam +54 1 igg_R1.dedup.bam +56 1 igg_R1.dedup.bam +59 2 igg_R1.dedup.bam +60 1 igg_R1.dedup.bam +61 2 igg_R1.dedup.bam +62 2 igg_R1.dedup.bam +63 3 igg_R1.dedup.bam +64 5 igg_R1.dedup.bam +65 1 igg_R1.dedup.bam +67 2 igg_R1.dedup.bam +71 3 igg_R1.dedup.bam +72 3 igg_R1.dedup.bam +73 4 igg_R1.dedup.bam +74 1 igg_R1.dedup.bam +75 1 igg_R1.dedup.bam +76 3 igg_R1.dedup.bam +77 2 igg_R1.dedup.bam +78 2 igg_R1.dedup.bam +80 3 igg_R1.dedup.bam +81 2 igg_R1.dedup.bam +83 1 igg_R1.dedup.bam +84 4 igg_R1.dedup.bam +85 5 igg_R1.dedup.bam +86 1 igg_R1.dedup.bam +87 6 igg_R1.dedup.bam +88 1 igg_R1.dedup.bam +90 1 igg_R1.dedup.bam +92 2 igg_R1.dedup.bam +93 2 igg_R1.dedup.bam +94 4 igg_R1.dedup.bam +95 2 igg_R1.dedup.bam +97 3 igg_R1.dedup.bam +98 1 igg_R1.dedup.bam +99 2 igg_R1.dedup.bam +100 4 igg_R1.dedup.bam +101 1 igg_R1.dedup.bam +102 2 igg_R1.dedup.bam +103 2 igg_R1.dedup.bam +104 1 igg_R1.dedup.bam +105 1 igg_R1.dedup.bam +106 3 igg_R1.dedup.bam +107 4 igg_R1.dedup.bam +108 1 igg_R1.dedup.bam +110 3 igg_R1.dedup.bam +111 2 igg_R1.dedup.bam +112 1 igg_R1.dedup.bam +113 2 igg_R1.dedup.bam +114 3 igg_R1.dedup.bam +115 1 igg_R1.dedup.bam +116 2 igg_R1.dedup.bam +117 3 igg_R1.dedup.bam +119 2 igg_R1.dedup.bam +120 3 igg_R1.dedup.bam +121 3 igg_R1.dedup.bam +124 1 igg_R1.dedup.bam +125 2 igg_R1.dedup.bam +126 1 igg_R1.dedup.bam +127 3 igg_R1.dedup.bam +128 2 igg_R1.dedup.bam +129 4 igg_R1.dedup.bam +130 2 igg_R1.dedup.bam +131 2 igg_R1.dedup.bam +132 3 igg_R1.dedup.bam +133 2 igg_R1.dedup.bam +134 2 igg_R1.dedup.bam +136 1 igg_R1.dedup.bam +137 3 igg_R1.dedup.bam +138 1 igg_R1.dedup.bam +139 1 igg_R1.dedup.bam +140 1 igg_R1.dedup.bam +143 2 igg_R1.dedup.bam +145 3 igg_R1.dedup.bam +146 1 igg_R1.dedup.bam +147 1 igg_R1.dedup.bam +148 1 igg_R1.dedup.bam +149 3 igg_R1.dedup.bam +150 2 igg_R1.dedup.bam +151 2 igg_R1.dedup.bam +153 2 igg_R1.dedup.bam +154 4 igg_R1.dedup.bam +155 4 igg_R1.dedup.bam +156 3 igg_R1.dedup.bam +157 2 igg_R1.dedup.bam +158 5 igg_R1.dedup.bam +159 4 igg_R1.dedup.bam +160 1 igg_R1.dedup.bam +161 6 igg_R1.dedup.bam +162 3 igg_R1.dedup.bam +163 2 igg_R1.dedup.bam +164 3 igg_R1.dedup.bam +165 5 igg_R1.dedup.bam +166 5 igg_R1.dedup.bam +167 10 igg_R1.dedup.bam +168 7 igg_R1.dedup.bam +169 7 igg_R1.dedup.bam +170 6 igg_R1.dedup.bam +171 4 igg_R1.dedup.bam +172 3 igg_R1.dedup.bam +173 5 igg_R1.dedup.bam +174 3 igg_R1.dedup.bam +175 6 igg_R1.dedup.bam +176 13 igg_R1.dedup.bam +177 9 igg_R1.dedup.bam +178 11 igg_R1.dedup.bam +179 9 igg_R1.dedup.bam +180 6 igg_R1.dedup.bam +181 8 igg_R1.dedup.bam +182 7 igg_R1.dedup.bam +183 7 igg_R1.dedup.bam +184 5 igg_R1.dedup.bam +185 11 igg_R1.dedup.bam +186 14 igg_R1.dedup.bam +187 6 igg_R1.dedup.bam +188 3 igg_R1.dedup.bam +189 12 igg_R1.dedup.bam +190 3 igg_R1.dedup.bam +191 6 igg_R1.dedup.bam +192 7 igg_R1.dedup.bam +193 9 igg_R1.dedup.bam +194 11 igg_R1.dedup.bam +195 6 igg_R1.dedup.bam +196 6 igg_R1.dedup.bam +197 7 igg_R1.dedup.bam +198 7 igg_R1.dedup.bam +199 7 igg_R1.dedup.bam +200 8 igg_R1.dedup.bam +201 8 igg_R1.dedup.bam +202 7 igg_R1.dedup.bam +203 6 igg_R1.dedup.bam +204 8 igg_R1.dedup.bam +205 9 igg_R1.dedup.bam +206 7 igg_R1.dedup.bam +207 2 igg_R1.dedup.bam +208 8 igg_R1.dedup.bam +209 7 igg_R1.dedup.bam +210 11 igg_R1.dedup.bam +211 8 igg_R1.dedup.bam +212 10 igg_R1.dedup.bam +213 7 igg_R1.dedup.bam +214 11 igg_R1.dedup.bam +215 11 igg_R1.dedup.bam +216 7 igg_R1.dedup.bam +217 7 igg_R1.dedup.bam +218 8 igg_R1.dedup.bam +219 7 igg_R1.dedup.bam +220 9 igg_R1.dedup.bam +221 11 igg_R1.dedup.bam +222 5 igg_R1.dedup.bam +223 8 igg_R1.dedup.bam +224 5 igg_R1.dedup.bam +225 3 igg_R1.dedup.bam +226 5 igg_R1.dedup.bam +227 6 igg_R1.dedup.bam +228 6 igg_R1.dedup.bam +229 10 igg_R1.dedup.bam +230 8 igg_R1.dedup.bam +231 8 igg_R1.dedup.bam +232 6 igg_R1.dedup.bam +233 11 igg_R1.dedup.bam +234 6 igg_R1.dedup.bam +235 6 igg_R1.dedup.bam +236 8 igg_R1.dedup.bam +237 2 igg_R1.dedup.bam +238 8 igg_R1.dedup.bam +239 7 igg_R1.dedup.bam +240 6 igg_R1.dedup.bam +241 4 igg_R1.dedup.bam +242 2 igg_R1.dedup.bam +243 3 igg_R1.dedup.bam +244 4 igg_R1.dedup.bam +245 3 igg_R1.dedup.bam +246 6 igg_R1.dedup.bam +247 2 igg_R1.dedup.bam +248 5 igg_R1.dedup.bam +249 7 igg_R1.dedup.bam +250 2 igg_R1.dedup.bam +251 1 igg_R1.dedup.bam +252 3 igg_R1.dedup.bam +253 5 igg_R1.dedup.bam +254 4 igg_R1.dedup.bam +255 1 igg_R1.dedup.bam +256 1 igg_R1.dedup.bam +257 5 igg_R1.dedup.bam +258 2 igg_R1.dedup.bam +259 8 igg_R1.dedup.bam +261 4 igg_R1.dedup.bam +262 3 igg_R1.dedup.bam +263 2 igg_R1.dedup.bam +264 2 igg_R1.dedup.bam +265 1 igg_R1.dedup.bam +266 4 igg_R1.dedup.bam +267 3 igg_R1.dedup.bam +268 4 igg_R1.dedup.bam +269 3 igg_R1.dedup.bam +270 6 igg_R1.dedup.bam +271 3 igg_R1.dedup.bam +273 2 igg_R1.dedup.bam +274 3 igg_R1.dedup.bam +275 2 igg_R1.dedup.bam +276 2 igg_R1.dedup.bam +277 4 igg_R1.dedup.bam +278 2 igg_R1.dedup.bam +279 2 igg_R1.dedup.bam +280 4 igg_R1.dedup.bam +281 5 igg_R1.dedup.bam +283 2 igg_R1.dedup.bam +285 1 igg_R1.dedup.bam +286 4 igg_R1.dedup.bam +287 1 igg_R1.dedup.bam +288 3 igg_R1.dedup.bam +290 5 igg_R1.dedup.bam +291 4 igg_R1.dedup.bam +292 1 igg_R1.dedup.bam +293 4 igg_R1.dedup.bam +294 1 igg_R1.dedup.bam +295 1 igg_R1.dedup.bam +297 2 igg_R1.dedup.bam +298 1 igg_R1.dedup.bam +299 1 igg_R1.dedup.bam +300 6 igg_R1.dedup.bam +303 4 igg_R1.dedup.bam +304 1 igg_R1.dedup.bam +305 2 igg_R1.dedup.bam +306 4 igg_R1.dedup.bam +307 1 igg_R1.dedup.bam +308 1 igg_R1.dedup.bam +309 2 igg_R1.dedup.bam +310 2 igg_R1.dedup.bam +311 1 igg_R1.dedup.bam +312 2 igg_R1.dedup.bam +313 2 igg_R1.dedup.bam +314 3 igg_R1.dedup.bam +315 3 igg_R1.dedup.bam +316 2 igg_R1.dedup.bam +317 3 igg_R1.dedup.bam +318 3 igg_R1.dedup.bam +319 1 igg_R1.dedup.bam +320 2 igg_R1.dedup.bam +321 2 igg_R1.dedup.bam +322 2 igg_R1.dedup.bam +323 7 igg_R1.dedup.bam +324 1 igg_R1.dedup.bam +325 5 igg_R1.dedup.bam +326 2 igg_R1.dedup.bam +327 5 igg_R1.dedup.bam +329 3 igg_R1.dedup.bam +330 3 igg_R1.dedup.bam +331 3 igg_R1.dedup.bam +333 2 igg_R1.dedup.bam +335 1 igg_R1.dedup.bam +336 1 igg_R1.dedup.bam +338 2 igg_R1.dedup.bam +339 4 igg_R1.dedup.bam +340 3 igg_R1.dedup.bam +341 1 igg_R1.dedup.bam +342 5 igg_R1.dedup.bam +343 1 igg_R1.dedup.bam +344 3 igg_R1.dedup.bam +345 3 igg_R1.dedup.bam +346 6 igg_R1.dedup.bam +347 1 igg_R1.dedup.bam +348 1 igg_R1.dedup.bam +349 1 igg_R1.dedup.bam +350 4 igg_R1.dedup.bam +351 2 igg_R1.dedup.bam +352 5 igg_R1.dedup.bam +353 2 igg_R1.dedup.bam +354 3 igg_R1.dedup.bam +355 2 igg_R1.dedup.bam +356 2 igg_R1.dedup.bam +357 2 igg_R1.dedup.bam +358 1 igg_R1.dedup.bam +359 3 igg_R1.dedup.bam +361 5 igg_R1.dedup.bam +362 3 igg_R1.dedup.bam +363 2 igg_R1.dedup.bam +364 5 igg_R1.dedup.bam +365 2 igg_R1.dedup.bam +366 3 igg_R1.dedup.bam +367 2 igg_R1.dedup.bam +368 3 igg_R1.dedup.bam +369 3 igg_R1.dedup.bam +371 4 igg_R1.dedup.bam +373 5 igg_R1.dedup.bam +374 1 igg_R1.dedup.bam +375 2 igg_R1.dedup.bam +376 1 igg_R1.dedup.bam +377 2 igg_R1.dedup.bam +378 1 igg_R1.dedup.bam +379 4 igg_R1.dedup.bam +380 2 igg_R1.dedup.bam +381 2 igg_R1.dedup.bam +382 3 igg_R1.dedup.bam +383 2 igg_R1.dedup.bam +384 2 igg_R1.dedup.bam +385 2 igg_R1.dedup.bam +387 2 igg_R1.dedup.bam +388 5 igg_R1.dedup.bam +389 4 igg_R1.dedup.bam +390 3 igg_R1.dedup.bam +391 2 igg_R1.dedup.bam +392 6 igg_R1.dedup.bam +393 3 igg_R1.dedup.bam +394 1 igg_R1.dedup.bam +395 2 igg_R1.dedup.bam +397 2 igg_R1.dedup.bam +398 3 igg_R1.dedup.bam +399 5 igg_R1.dedup.bam +401 3 igg_R1.dedup.bam +402 2 igg_R1.dedup.bam +404 3 igg_R1.dedup.bam +405 6 igg_R1.dedup.bam +407 3 igg_R1.dedup.bam +408 1 igg_R1.dedup.bam +409 3 igg_R1.dedup.bam +410 1 igg_R1.dedup.bam +411 6 igg_R1.dedup.bam +413 4 igg_R1.dedup.bam +415 2 igg_R1.dedup.bam +416 1 igg_R1.dedup.bam +417 3 igg_R1.dedup.bam +418 3 igg_R1.dedup.bam +419 1 igg_R1.dedup.bam +421 1 igg_R1.dedup.bam +422 4 igg_R1.dedup.bam +423 2 igg_R1.dedup.bam +424 1 igg_R1.dedup.bam +425 4 igg_R1.dedup.bam +426 1 igg_R1.dedup.bam +427 1 igg_R1.dedup.bam +428 1 igg_R1.dedup.bam +429 1 igg_R1.dedup.bam +430 2 igg_R1.dedup.bam +431 3 igg_R1.dedup.bam +432 2 igg_R1.dedup.bam +433 1 igg_R1.dedup.bam +434 2 igg_R1.dedup.bam +435 4 igg_R1.dedup.bam +436 1 igg_R1.dedup.bam +437 1 igg_R1.dedup.bam +438 2 igg_R1.dedup.bam +439 3 igg_R1.dedup.bam +440 1 igg_R1.dedup.bam +441 2 igg_R1.dedup.bam +442 3 igg_R1.dedup.bam +444 1 igg_R1.dedup.bam +445 4 igg_R1.dedup.bam +446 1 igg_R1.dedup.bam +447 3 igg_R1.dedup.bam +448 1 igg_R1.dedup.bam +449 2 igg_R1.dedup.bam +450 1 igg_R1.dedup.bam +453 2 igg_R1.dedup.bam +454 1 igg_R1.dedup.bam +455 1 igg_R1.dedup.bam +456 2 igg_R1.dedup.bam +457 2 igg_R1.dedup.bam +458 3 igg_R1.dedup.bam +459 2 igg_R1.dedup.bam +460 1 igg_R1.dedup.bam +461 1 igg_R1.dedup.bam +463 1 igg_R1.dedup.bam +464 1 igg_R1.dedup.bam +465 2 igg_R1.dedup.bam +466 2 igg_R1.dedup.bam +467 1 igg_R1.dedup.bam +469 1 igg_R1.dedup.bam +470 2 igg_R1.dedup.bam +471 1 igg_R1.dedup.bam +472 3 igg_R1.dedup.bam +473 1 igg_R1.dedup.bam +474 1 igg_R1.dedup.bam +475 1 igg_R1.dedup.bam +476 3 igg_R1.dedup.bam +477 3 igg_R1.dedup.bam +478 2 igg_R1.dedup.bam +479 1 igg_R1.dedup.bam +480 1 igg_R1.dedup.bam +481 1 igg_R1.dedup.bam +482 1 igg_R1.dedup.bam +483 1 igg_R1.dedup.bam +484 2 igg_R1.dedup.bam +486 2 igg_R1.dedup.bam +488 1 igg_R1.dedup.bam +489 1 igg_R1.dedup.bam +490 2 igg_R1.dedup.bam +491 3 igg_R1.dedup.bam +492 1 igg_R1.dedup.bam +493 2 igg_R1.dedup.bam +494 1 igg_R1.dedup.bam +495 2 igg_R1.dedup.bam +498 2 igg_R1.dedup.bam +500 1 igg_R1.dedup.bam +501 1 igg_R1.dedup.bam +502 2 igg_R1.dedup.bam +503 1 igg_R1.dedup.bam +504 1 igg_R1.dedup.bam +505 2 igg_R1.dedup.bam +506 1 igg_R1.dedup.bam +509 3 igg_R1.dedup.bam +510 4 igg_R1.dedup.bam +512 2 igg_R1.dedup.bam +513 1 igg_R1.dedup.bam +514 3 igg_R1.dedup.bam +515 1 igg_R1.dedup.bam +516 1 igg_R1.dedup.bam +517 2 igg_R1.dedup.bam +518 2 igg_R1.dedup.bam +520 2 igg_R1.dedup.bam +521 3 igg_R1.dedup.bam +524 1 igg_R1.dedup.bam +526 2 igg_R1.dedup.bam +527 1 igg_R1.dedup.bam +528 1 igg_R1.dedup.bam +530 1 igg_R1.dedup.bam +531 1 igg_R1.dedup.bam +532 2 igg_R1.dedup.bam +533 1 igg_R1.dedup.bam +535 2 igg_R1.dedup.bam +536 1 igg_R1.dedup.bam +537 1 igg_R1.dedup.bam +538 5 igg_R1.dedup.bam +539 2 igg_R1.dedup.bam +540 2 igg_R1.dedup.bam +541 2 igg_R1.dedup.bam +542 2 igg_R1.dedup.bam +543 2 igg_R1.dedup.bam +544 1 igg_R1.dedup.bam +547 1 igg_R1.dedup.bam +548 5 igg_R1.dedup.bam +549 1 igg_R1.dedup.bam +551 1 igg_R1.dedup.bam +552 1 igg_R1.dedup.bam +554 2 igg_R1.dedup.bam +555 2 igg_R1.dedup.bam +556 1 igg_R1.dedup.bam +557 1 igg_R1.dedup.bam +558 1 igg_R1.dedup.bam +559 2 igg_R1.dedup.bam +560 4 igg_R1.dedup.bam +561 1 igg_R1.dedup.bam +562 1 igg_R1.dedup.bam +563 1 igg_R1.dedup.bam +566 2 igg_R1.dedup.bam +567 1 igg_R1.dedup.bam +568 1 igg_R1.dedup.bam +571 1 igg_R1.dedup.bam +575 2 igg_R1.dedup.bam +577 1 igg_R1.dedup.bam +578 3 igg_R1.dedup.bam +580 3 igg_R1.dedup.bam +582 2 igg_R1.dedup.bam +584 1 igg_R1.dedup.bam +585 3 igg_R1.dedup.bam +586 1 igg_R1.dedup.bam +587 2 igg_R1.dedup.bam +588 1 igg_R1.dedup.bam +590 2 igg_R1.dedup.bam +592 1 igg_R1.dedup.bam +595 1 igg_R1.dedup.bam +597 1 igg_R1.dedup.bam +598 2 igg_R1.dedup.bam +599 1 igg_R1.dedup.bam +601 1 igg_R1.dedup.bam +602 1 igg_R1.dedup.bam +603 1 igg_R1.dedup.bam +604 1 igg_R1.dedup.bam +606 1 igg_R1.dedup.bam +609 1 igg_R1.dedup.bam +610 1 igg_R1.dedup.bam +611 3 igg_R1.dedup.bam +615 2 igg_R1.dedup.bam +617 1 igg_R1.dedup.bam +619 2 igg_R1.dedup.bam +621 1 igg_R1.dedup.bam +622 2 igg_R1.dedup.bam +625 1 igg_R1.dedup.bam +626 3 igg_R1.dedup.bam +627 1 igg_R1.dedup.bam +629 1 igg_R1.dedup.bam +630 1 igg_R1.dedup.bam +631 1 igg_R1.dedup.bam +635 1 igg_R1.dedup.bam +636 2 igg_R1.dedup.bam +639 1 igg_R1.dedup.bam +640 1 igg_R1.dedup.bam +641 3 igg_R1.dedup.bam +642 1 igg_R1.dedup.bam +644 1 igg_R1.dedup.bam +645 2 igg_R1.dedup.bam +646 1 igg_R1.dedup.bam +647 2 igg_R1.dedup.bam +650 2 igg_R1.dedup.bam +653 1 igg_R1.dedup.bam +654 1 igg_R1.dedup.bam +656 2 igg_R1.dedup.bam +657 1 igg_R1.dedup.bam +658 1 igg_R1.dedup.bam +660 1 igg_R1.dedup.bam +661 1 igg_R1.dedup.bam +663 1 igg_R1.dedup.bam +664 2 igg_R1.dedup.bam +666 1 igg_R1.dedup.bam +668 1 igg_R1.dedup.bam +671 2 igg_R1.dedup.bam +673 2 igg_R1.dedup.bam +675 1 igg_R1.dedup.bam +676 1 igg_R1.dedup.bam +682 2 igg_R1.dedup.bam +683 1 igg_R1.dedup.bam +685 1 igg_R1.dedup.bam +689 1 igg_R1.dedup.bam +692 2 igg_R1.dedup.bam +694 1 igg_R1.dedup.bam +695 2 igg_R1.dedup.bam +696 1 igg_R1.dedup.bam +697 1 igg_R1.dedup.bam +698 3 igg_R1.dedup.bam +699 2 igg_R1.dedup.bam diff --git a/dev/docker/static_reports/test_data/igg_R2_raw.csv b/dev/docker/static_reports/test_data/igg_R2_raw.csv new file mode 100644 index 00000000..1fa3681a --- /dev/null +++ b/dev/docker/static_reports/test_data/igg_R2_raw.csv @@ -0,0 +1,508 @@ +#bamPEFragmentSize +Size Occurrences Sample +26 1 igg_R2.dedup.bam +27 1 igg_R2.dedup.bam +29 1 igg_R2.dedup.bam +30 1 igg_R2.dedup.bam +35 1 igg_R2.dedup.bam +37 2 igg_R2.dedup.bam +40 1 igg_R2.dedup.bam +41 1 igg_R2.dedup.bam +42 1 igg_R2.dedup.bam +44 1 igg_R2.dedup.bam +45 1 igg_R2.dedup.bam +49 1 igg_R2.dedup.bam +50 2 igg_R2.dedup.bam +52 1 igg_R2.dedup.bam +54 3 igg_R2.dedup.bam +57 1 igg_R2.dedup.bam +58 4 igg_R2.dedup.bam +59 2 igg_R2.dedup.bam +61 1 igg_R2.dedup.bam +63 3 igg_R2.dedup.bam +64 4 igg_R2.dedup.bam +65 3 igg_R2.dedup.bam +66 3 igg_R2.dedup.bam +67 1 igg_R2.dedup.bam +68 1 igg_R2.dedup.bam +69 3 igg_R2.dedup.bam +70 2 igg_R2.dedup.bam +72 3 igg_R2.dedup.bam +73 2 igg_R2.dedup.bam +74 2 igg_R2.dedup.bam +75 7 igg_R2.dedup.bam +77 2 igg_R2.dedup.bam +78 3 igg_R2.dedup.bam +80 1 igg_R2.dedup.bam +81 1 igg_R2.dedup.bam +84 2 igg_R2.dedup.bam +85 5 igg_R2.dedup.bam +86 2 igg_R2.dedup.bam +87 2 igg_R2.dedup.bam +88 2 igg_R2.dedup.bam +89 3 igg_R2.dedup.bam +90 4 igg_R2.dedup.bam +91 1 igg_R2.dedup.bam +92 1 igg_R2.dedup.bam +93 2 igg_R2.dedup.bam +94 1 igg_R2.dedup.bam +95 2 igg_R2.dedup.bam +96 3 igg_R2.dedup.bam +97 2 igg_R2.dedup.bam +98 1 igg_R2.dedup.bam +99 2 igg_R2.dedup.bam +100 1 igg_R2.dedup.bam +101 1 igg_R2.dedup.bam +102 1 igg_R2.dedup.bam +104 2 igg_R2.dedup.bam +105 4 igg_R2.dedup.bam +106 2 igg_R2.dedup.bam +107 4 igg_R2.dedup.bam +108 3 igg_R2.dedup.bam +109 1 igg_R2.dedup.bam +110 1 igg_R2.dedup.bam +111 1 igg_R2.dedup.bam +112 1 igg_R2.dedup.bam +113 2 igg_R2.dedup.bam +114 2 igg_R2.dedup.bam +115 2 igg_R2.dedup.bam +116 1 igg_R2.dedup.bam +118 2 igg_R2.dedup.bam +120 1 igg_R2.dedup.bam +121 1 igg_R2.dedup.bam +122 3 igg_R2.dedup.bam +123 1 igg_R2.dedup.bam +124 2 igg_R2.dedup.bam +125 2 igg_R2.dedup.bam +126 1 igg_R2.dedup.bam +127 2 igg_R2.dedup.bam +128 1 igg_R2.dedup.bam +129 1 igg_R2.dedup.bam +131 1 igg_R2.dedup.bam +132 1 igg_R2.dedup.bam +134 2 igg_R2.dedup.bam +136 2 igg_R2.dedup.bam +137 1 igg_R2.dedup.bam +138 2 igg_R2.dedup.bam +140 1 igg_R2.dedup.bam +142 4 igg_R2.dedup.bam +143 1 igg_R2.dedup.bam +144 2 igg_R2.dedup.bam +145 3 igg_R2.dedup.bam +146 2 igg_R2.dedup.bam +147 1 igg_R2.dedup.bam +148 2 igg_R2.dedup.bam +149 4 igg_R2.dedup.bam +150 8 igg_R2.dedup.bam +151 4 igg_R2.dedup.bam +152 4 igg_R2.dedup.bam +153 4 igg_R2.dedup.bam +154 4 igg_R2.dedup.bam +155 3 igg_R2.dedup.bam +156 4 igg_R2.dedup.bam +158 4 igg_R2.dedup.bam +159 4 igg_R2.dedup.bam +160 2 igg_R2.dedup.bam +161 7 igg_R2.dedup.bam +162 1 igg_R2.dedup.bam +163 3 igg_R2.dedup.bam +164 9 igg_R2.dedup.bam +165 6 igg_R2.dedup.bam +166 10 igg_R2.dedup.bam +167 4 igg_R2.dedup.bam +168 8 igg_R2.dedup.bam +169 4 igg_R2.dedup.bam +170 5 igg_R2.dedup.bam +171 4 igg_R2.dedup.bam +172 7 igg_R2.dedup.bam +173 6 igg_R2.dedup.bam +174 6 igg_R2.dedup.bam +175 10 igg_R2.dedup.bam +176 20 igg_R2.dedup.bam +177 9 igg_R2.dedup.bam +178 12 igg_R2.dedup.bam +179 7 igg_R2.dedup.bam +180 9 igg_R2.dedup.bam +181 6 igg_R2.dedup.bam +182 8 igg_R2.dedup.bam +183 5 igg_R2.dedup.bam +184 7 igg_R2.dedup.bam +185 10 igg_R2.dedup.bam +186 17 igg_R2.dedup.bam +187 9 igg_R2.dedup.bam +188 6 igg_R2.dedup.bam +189 13 igg_R2.dedup.bam +190 13 igg_R2.dedup.bam +191 11 igg_R2.dedup.bam +192 9 igg_R2.dedup.bam +193 7 igg_R2.dedup.bam +194 3 igg_R2.dedup.bam +195 5 igg_R2.dedup.bam +196 14 igg_R2.dedup.bam +197 15 igg_R2.dedup.bam +198 8 igg_R2.dedup.bam +199 15 igg_R2.dedup.bam +200 7 igg_R2.dedup.bam +201 9 igg_R2.dedup.bam +202 6 igg_R2.dedup.bam +203 7 igg_R2.dedup.bam +204 13 igg_R2.dedup.bam +205 9 igg_R2.dedup.bam +206 4 igg_R2.dedup.bam +207 6 igg_R2.dedup.bam +208 10 igg_R2.dedup.bam +209 7 igg_R2.dedup.bam +210 4 igg_R2.dedup.bam +211 8 igg_R2.dedup.bam +212 5 igg_R2.dedup.bam +213 2 igg_R2.dedup.bam +214 9 igg_R2.dedup.bam +215 6 igg_R2.dedup.bam +216 8 igg_R2.dedup.bam +217 10 igg_R2.dedup.bam +218 12 igg_R2.dedup.bam +219 8 igg_R2.dedup.bam +220 11 igg_R2.dedup.bam +221 6 igg_R2.dedup.bam +222 9 igg_R2.dedup.bam +223 13 igg_R2.dedup.bam +224 5 igg_R2.dedup.bam +225 8 igg_R2.dedup.bam +226 3 igg_R2.dedup.bam +227 6 igg_R2.dedup.bam +228 4 igg_R2.dedup.bam +229 13 igg_R2.dedup.bam +230 3 igg_R2.dedup.bam +231 12 igg_R2.dedup.bam +232 8 igg_R2.dedup.bam +233 5 igg_R2.dedup.bam +234 8 igg_R2.dedup.bam +235 7 igg_R2.dedup.bam +236 8 igg_R2.dedup.bam +237 7 igg_R2.dedup.bam +238 5 igg_R2.dedup.bam +239 8 igg_R2.dedup.bam +240 9 igg_R2.dedup.bam +241 9 igg_R2.dedup.bam +242 6 igg_R2.dedup.bam +243 5 igg_R2.dedup.bam +244 8 igg_R2.dedup.bam +245 5 igg_R2.dedup.bam +246 10 igg_R2.dedup.bam +247 4 igg_R2.dedup.bam +248 9 igg_R2.dedup.bam +249 5 igg_R2.dedup.bam +250 1 igg_R2.dedup.bam +251 5 igg_R2.dedup.bam +252 6 igg_R2.dedup.bam +253 5 igg_R2.dedup.bam +254 4 igg_R2.dedup.bam +256 2 igg_R2.dedup.bam +257 6 igg_R2.dedup.bam +258 6 igg_R2.dedup.bam +259 3 igg_R2.dedup.bam +260 3 igg_R2.dedup.bam +261 4 igg_R2.dedup.bam +262 4 igg_R2.dedup.bam +263 3 igg_R2.dedup.bam +264 4 igg_R2.dedup.bam +265 3 igg_R2.dedup.bam +266 4 igg_R2.dedup.bam +267 2 igg_R2.dedup.bam +268 6 igg_R2.dedup.bam +269 1 igg_R2.dedup.bam +270 8 igg_R2.dedup.bam +271 1 igg_R2.dedup.bam +272 2 igg_R2.dedup.bam +273 8 igg_R2.dedup.bam +274 5 igg_R2.dedup.bam +275 1 igg_R2.dedup.bam +277 1 igg_R2.dedup.bam +278 1 igg_R2.dedup.bam +279 3 igg_R2.dedup.bam +280 1 igg_R2.dedup.bam +281 3 igg_R2.dedup.bam +282 3 igg_R2.dedup.bam +283 5 igg_R2.dedup.bam +284 5 igg_R2.dedup.bam +285 3 igg_R2.dedup.bam +286 1 igg_R2.dedup.bam +287 4 igg_R2.dedup.bam +288 2 igg_R2.dedup.bam +289 2 igg_R2.dedup.bam +290 3 igg_R2.dedup.bam +293 4 igg_R2.dedup.bam +294 2 igg_R2.dedup.bam +295 2 igg_R2.dedup.bam +296 1 igg_R2.dedup.bam +297 3 igg_R2.dedup.bam +298 3 igg_R2.dedup.bam +299 2 igg_R2.dedup.bam +300 2 igg_R2.dedup.bam +301 4 igg_R2.dedup.bam +302 2 igg_R2.dedup.bam +303 2 igg_R2.dedup.bam +304 4 igg_R2.dedup.bam +305 4 igg_R2.dedup.bam +306 3 igg_R2.dedup.bam +307 2 igg_R2.dedup.bam +308 1 igg_R2.dedup.bam +309 3 igg_R2.dedup.bam +310 3 igg_R2.dedup.bam +311 3 igg_R2.dedup.bam +312 2 igg_R2.dedup.bam +313 2 igg_R2.dedup.bam +314 6 igg_R2.dedup.bam +315 1 igg_R2.dedup.bam +316 5 igg_R2.dedup.bam +317 3 igg_R2.dedup.bam +318 1 igg_R2.dedup.bam +319 2 igg_R2.dedup.bam +320 1 igg_R2.dedup.bam +321 1 igg_R2.dedup.bam +322 2 igg_R2.dedup.bam +323 2 igg_R2.dedup.bam +324 3 igg_R2.dedup.bam +325 1 igg_R2.dedup.bam +326 2 igg_R2.dedup.bam +329 3 igg_R2.dedup.bam +330 4 igg_R2.dedup.bam +331 5 igg_R2.dedup.bam +332 3 igg_R2.dedup.bam +333 3 igg_R2.dedup.bam +334 2 igg_R2.dedup.bam +336 2 igg_R2.dedup.bam +337 1 igg_R2.dedup.bam +338 1 igg_R2.dedup.bam +339 2 igg_R2.dedup.bam +340 4 igg_R2.dedup.bam +341 2 igg_R2.dedup.bam +343 3 igg_R2.dedup.bam +344 2 igg_R2.dedup.bam +345 1 igg_R2.dedup.bam +346 3 igg_R2.dedup.bam +347 2 igg_R2.dedup.bam +348 4 igg_R2.dedup.bam +349 7 igg_R2.dedup.bam +350 4 igg_R2.dedup.bam +351 2 igg_R2.dedup.bam +352 1 igg_R2.dedup.bam +353 1 igg_R2.dedup.bam +354 2 igg_R2.dedup.bam +355 2 igg_R2.dedup.bam +357 2 igg_R2.dedup.bam +358 2 igg_R2.dedup.bam +359 1 igg_R2.dedup.bam +360 3 igg_R2.dedup.bam +362 1 igg_R2.dedup.bam +363 1 igg_R2.dedup.bam +364 4 igg_R2.dedup.bam +365 3 igg_R2.dedup.bam +366 4 igg_R2.dedup.bam +367 3 igg_R2.dedup.bam +368 6 igg_R2.dedup.bam +369 4 igg_R2.dedup.bam +370 3 igg_R2.dedup.bam +371 4 igg_R2.dedup.bam +372 3 igg_R2.dedup.bam +373 5 igg_R2.dedup.bam +374 2 igg_R2.dedup.bam +376 1 igg_R2.dedup.bam +378 2 igg_R2.dedup.bam +379 1 igg_R2.dedup.bam +380 4 igg_R2.dedup.bam +381 6 igg_R2.dedup.bam +382 1 igg_R2.dedup.bam +383 1 igg_R2.dedup.bam +384 2 igg_R2.dedup.bam +385 1 igg_R2.dedup.bam +386 2 igg_R2.dedup.bam +387 3 igg_R2.dedup.bam +388 1 igg_R2.dedup.bam +389 4 igg_R2.dedup.bam +390 3 igg_R2.dedup.bam +391 3 igg_R2.dedup.bam +392 3 igg_R2.dedup.bam +394 3 igg_R2.dedup.bam +395 2 igg_R2.dedup.bam +396 3 igg_R2.dedup.bam +397 3 igg_R2.dedup.bam +399 3 igg_R2.dedup.bam +400 3 igg_R2.dedup.bam +401 3 igg_R2.dedup.bam +402 1 igg_R2.dedup.bam +403 5 igg_R2.dedup.bam +404 5 igg_R2.dedup.bam +405 2 igg_R2.dedup.bam +407 2 igg_R2.dedup.bam +408 4 igg_R2.dedup.bam +409 1 igg_R2.dedup.bam +410 2 igg_R2.dedup.bam +411 5 igg_R2.dedup.bam +412 1 igg_R2.dedup.bam +414 3 igg_R2.dedup.bam +415 3 igg_R2.dedup.bam +416 2 igg_R2.dedup.bam +417 2 igg_R2.dedup.bam +418 2 igg_R2.dedup.bam +419 2 igg_R2.dedup.bam +420 3 igg_R2.dedup.bam +421 1 igg_R2.dedup.bam +423 1 igg_R2.dedup.bam +425 1 igg_R2.dedup.bam +426 3 igg_R2.dedup.bam +427 1 igg_R2.dedup.bam +428 5 igg_R2.dedup.bam +429 1 igg_R2.dedup.bam +430 2 igg_R2.dedup.bam +431 3 igg_R2.dedup.bam +432 1 igg_R2.dedup.bam +433 3 igg_R2.dedup.bam +435 1 igg_R2.dedup.bam +436 2 igg_R2.dedup.bam +437 2 igg_R2.dedup.bam +438 1 igg_R2.dedup.bam +439 1 igg_R2.dedup.bam +440 2 igg_R2.dedup.bam +441 4 igg_R2.dedup.bam +442 3 igg_R2.dedup.bam +443 1 igg_R2.dedup.bam +444 2 igg_R2.dedup.bam +446 1 igg_R2.dedup.bam +447 1 igg_R2.dedup.bam +449 2 igg_R2.dedup.bam +450 2 igg_R2.dedup.bam +453 4 igg_R2.dedup.bam +454 2 igg_R2.dedup.bam +455 1 igg_R2.dedup.bam +456 1 igg_R2.dedup.bam +457 3 igg_R2.dedup.bam +459 2 igg_R2.dedup.bam +461 2 igg_R2.dedup.bam +462 1 igg_R2.dedup.bam +463 3 igg_R2.dedup.bam +465 3 igg_R2.dedup.bam +466 2 igg_R2.dedup.bam +470 1 igg_R2.dedup.bam +473 4 igg_R2.dedup.bam +474 2 igg_R2.dedup.bam +476 2 igg_R2.dedup.bam +477 2 igg_R2.dedup.bam +481 2 igg_R2.dedup.bam +482 3 igg_R2.dedup.bam +484 2 igg_R2.dedup.bam +485 1 igg_R2.dedup.bam +486 2 igg_R2.dedup.bam +487 1 igg_R2.dedup.bam +488 1 igg_R2.dedup.bam +489 2 igg_R2.dedup.bam +490 1 igg_R2.dedup.bam +491 1 igg_R2.dedup.bam +492 2 igg_R2.dedup.bam +493 2 igg_R2.dedup.bam +494 2 igg_R2.dedup.bam +495 1 igg_R2.dedup.bam +499 1 igg_R2.dedup.bam +501 1 igg_R2.dedup.bam +502 1 igg_R2.dedup.bam +503 1 igg_R2.dedup.bam +505 2 igg_R2.dedup.bam +506 1 igg_R2.dedup.bam +508 1 igg_R2.dedup.bam +509 2 igg_R2.dedup.bam +511 1 igg_R2.dedup.bam +512 1 igg_R2.dedup.bam +513 3 igg_R2.dedup.bam +514 2 igg_R2.dedup.bam +515 2 igg_R2.dedup.bam +516 1 igg_R2.dedup.bam +517 1 igg_R2.dedup.bam +518 2 igg_R2.dedup.bam +519 2 igg_R2.dedup.bam +520 1 igg_R2.dedup.bam +523 1 igg_R2.dedup.bam +525 1 igg_R2.dedup.bam +527 1 igg_R2.dedup.bam +528 2 igg_R2.dedup.bam +529 2 igg_R2.dedup.bam +530 1 igg_R2.dedup.bam +534 1 igg_R2.dedup.bam +535 1 igg_R2.dedup.bam +536 3 igg_R2.dedup.bam +538 1 igg_R2.dedup.bam +539 2 igg_R2.dedup.bam +540 1 igg_R2.dedup.bam +541 1 igg_R2.dedup.bam +543 2 igg_R2.dedup.bam +544 1 igg_R2.dedup.bam +545 3 igg_R2.dedup.bam +548 1 igg_R2.dedup.bam +550 1 igg_R2.dedup.bam +552 2 igg_R2.dedup.bam +553 1 igg_R2.dedup.bam +555 1 igg_R2.dedup.bam +558 2 igg_R2.dedup.bam +559 2 igg_R2.dedup.bam +561 2 igg_R2.dedup.bam +563 1 igg_R2.dedup.bam +565 3 igg_R2.dedup.bam +567 2 igg_R2.dedup.bam +569 1 igg_R2.dedup.bam +570 1 igg_R2.dedup.bam +571 1 igg_R2.dedup.bam +574 1 igg_R2.dedup.bam +575 1 igg_R2.dedup.bam +576 1 igg_R2.dedup.bam +578 1 igg_R2.dedup.bam +579 1 igg_R2.dedup.bam +580 1 igg_R2.dedup.bam +581 1 igg_R2.dedup.bam +582 3 igg_R2.dedup.bam +584 1 igg_R2.dedup.bam +585 2 igg_R2.dedup.bam +587 1 igg_R2.dedup.bam +592 2 igg_R2.dedup.bam +594 1 igg_R2.dedup.bam +596 2 igg_R2.dedup.bam +598 1 igg_R2.dedup.bam +599 1 igg_R2.dedup.bam +600 1 igg_R2.dedup.bam +601 1 igg_R2.dedup.bam +603 1 igg_R2.dedup.bam +605 1 igg_R2.dedup.bam +607 1 igg_R2.dedup.bam +611 2 igg_R2.dedup.bam +612 1 igg_R2.dedup.bam +613 2 igg_R2.dedup.bam +615 1 igg_R2.dedup.bam +621 1 igg_R2.dedup.bam +622 1 igg_R2.dedup.bam +623 1 igg_R2.dedup.bam +627 2 igg_R2.dedup.bam +628 1 igg_R2.dedup.bam +629 1 igg_R2.dedup.bam +630 1 igg_R2.dedup.bam +634 1 igg_R2.dedup.bam +638 1 igg_R2.dedup.bam +640 1 igg_R2.dedup.bam +641 3 igg_R2.dedup.bam +650 1 igg_R2.dedup.bam +652 1 igg_R2.dedup.bam +655 1 igg_R2.dedup.bam +660 1 igg_R2.dedup.bam +662 1 igg_R2.dedup.bam +665 2 igg_R2.dedup.bam +670 4 igg_R2.dedup.bam +671 1 igg_R2.dedup.bam +673 1 igg_R2.dedup.bam +676 1 igg_R2.dedup.bam +678 1 igg_R2.dedup.bam +679 1 igg_R2.dedup.bam +680 1 igg_R2.dedup.bam +683 1 igg_R2.dedup.bam +685 1 igg_R2.dedup.bam +686 1 igg_R2.dedup.bam +691 1 igg_R2.dedup.bam +694 2 igg_R2.dedup.bam +696 1 igg_R2.dedup.bam +698 1 igg_R2.dedup.bam diff --git a/main.nf b/main.nf index 0049f432..44a53495 100644 --- a/main.nf +++ b/main.nf @@ -28,6 +28,9 @@ if (params.help) { params.fasta = Checks.get_genome_attribute(params, 'fasta') params.gtf = Checks.get_genome_attribute(params, 'gtf') +params.blacklist = Checks.get_genome_attribute(params, 'blacklist') + +log.info 'test-' + params.blacklist //////////////////////////////////////////////////// /* -- PRINT PARAMETER SUMMARY -- */ diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index b6ff0df1..1c3e23a4 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -15,15 +15,15 @@ process GENERATE_REPORTS { input: path meta_data + path raw_fragments output: path '*.pdf', emit: pdf path '*.csv', emit: csv path '*.png', emit: png - //path '' script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - $baseDir/bin/python/reporting/main.py genimg --input $meta_data --output . --log log.txt + $baseDir/bin/python/reporting/main.py genimg --meta $meta_data --raw_frag "*_raw.csv" --output . --log log.txt """ } \ No newline at end of file diff --git a/modules/local/software/deeptools/bamPEFragmentSize/functions.nf b/modules/local/software/deeptools/bamPEFragmentSize/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/local/software/deeptools/bamPEFragmentSize/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/software/deeptools/bamPEFragmentSize/main.nf b/modules/local/software/deeptools/bamPEFragmentSize/main.nf new file mode 100644 index 00000000..20622548 --- /dev/null +++ b/modules/local/software/deeptools/bamPEFragmentSize/main.nf @@ -0,0 +1,45 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DEEPTOOLS_BAMPEFRAGMENTSIZE { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/deeptools:3.5.0--py_0" + } else { + container "quay.io/biocontainers/deeptools:3.5.0--py_0" + } + + input: + tuple val(meta), path(bam), path(bai) + path blacklist + + output: + tuple val(meta), path("*_summary.csv"), emit: summary_csv + tuple val(meta), path("*_raw.csv") , emit: raw_csv + tuple val(meta), path("*_log.txt") , emit: log + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bamPEFragmentSize \\ + -b $bam \\ + --outRawFragmentLengths ${prefix}_raw.csv \\ + --table ${prefix}_summary.csv \\ + -bl $blacklist \\ + -p $task.cpus \\ + $options.args \\ + > ${prefix}_log.txt + bamPEFragmentSize --version | sed -e "s/bamPEFragmentSize //g" > ${software}.version.txt + """ +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 304d0ba8..f8902d1f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,6 +14,7 @@ params { // References genome = '' + blacklist = '' spikein_geome = 'K12-MG1655' save_reference = false bowtie2_index = '' diff --git a/nextflow_schema.json b/nextflow_schema.json index 931d89ab..33c673af 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -53,6 +53,12 @@ "help_text": "This parameter is *mandatory* if `--genome` is not specified.", "fa_icon": "far fa-file-code" }, + "blacklist": { + "type": "string", + "description": "Path to gneome blacklist file.", + "help_text": "This parameter is *mandatory* if `--genome` is not specified.", + "fa_icon": "far fa-file-code" + }, "igenomes_base": { "type": "string", "description": "Directory / URL base for iGenomes references.", From 1b6c88e1fe69824ff4d56c701c576920c22d14cb Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Thu, 18 Mar 2021 12:05:23 +0000 Subject: [PATCH 050/675] Template update for nf-core/tools version 1.13 --- .github/.dockstore.yml | 1 + .github/CONTRIBUTING.md | 2 +- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 6 +- .github/workflows/awsfulltest.yml | 17 +- .github/workflows/awstest.yml | 17 +- .github/workflows/branch.yml | 7 +- .github/workflows/ci.yml | 19 +- .github/workflows/linting.yml | 2 +- .github/workflows/push_dockerhub_dev.yml | 28 + .github/workflows/push_dockerhub_release.yml | 29 + CHANGELOG.md | 2 +- CITATIONS.md | 32 - CODE_OF_CONDUCT.md | 117 +++- Dockerfile | 13 + README.md | 58 +- assets/email_template.html | 1 - assets/nf-core-cutandrun_logo.png | Bin 18230 -> 18251 bytes assets/samplesheet.csv | 8 - bin/check_samplesheet.py | 169 ------ bin/markdown_to_html.py | 91 +++ bin/scrape_software_versions.py | 42 +- conf/base.config | 44 +- conf/igenomes.config | 75 +-- conf/modules.config | 28 - conf/test.config | 18 +- conf/test_full.config | 13 +- docs/images/mqc_fastqc_adapter.png | Bin 23458 -> 0 bytes docs/images/mqc_fastqc_counts.png | Bin 33918 -> 0 bytes docs/images/mqc_fastqc_quality.png | Bin 55769 -> 0 bytes docs/images/nf-core-cutandrun_logo.png | Bin 18230 -> 34713 bytes docs/output.md | 59 +- docs/usage.md | 69 +-- environment.yml | 15 + lib/Checks.groovy | 101 ---- lib/Completion.groovy | 127 ---- lib/NfcoreSchema.groovy | 571 ++++++++++++++++++ lib/Schema.groovy | 228 ------- lib/nfcore_external_java_deps.jar | Bin 0 -> 2291171 bytes main.nf | 458 ++++++++++---- modules/local/process/functions.nf | 59 -- .../local/process/get_software_versions.nf | 32 - modules/local/process/samplesheet_check.nf | 50 -- modules/local/subworkflow/input_check.nf | 23 - modules/nf-core/software/fastqc/functions.nf | 59 -- modules/nf-core/software/fastqc/main.nf | 47 -- modules/nf-core/software/fastqc/meta.yml | 72 --- modules/nf-core/software/multiqc/functions.nf | 59 -- modules/nf-core/software/multiqc/main.nf | 35 -- modules/nf-core/software/multiqc/meta.yml | 60 -- nextflow.config | 150 +++-- nextflow_schema.json | 239 ++++---- 53 files changed, 1609 insertions(+), 1747 deletions(-) create mode 100644 .github/workflows/push_dockerhub_dev.yml create mode 100644 .github/workflows/push_dockerhub_release.yml delete mode 100644 CITATIONS.md create mode 100644 Dockerfile delete mode 100644 assets/samplesheet.csv delete mode 100755 bin/check_samplesheet.py create mode 100644 bin/markdown_to_html.py mode change 100755 => 100644 bin/scrape_software_versions.py delete mode 100644 conf/modules.config delete mode 100755 docs/images/mqc_fastqc_adapter.png delete mode 100755 docs/images/mqc_fastqc_counts.png delete mode 100755 docs/images/mqc_fastqc_quality.png create mode 100644 environment.yml delete mode 100644 lib/Checks.groovy delete mode 100644 lib/Completion.groovy create mode 100644 lib/NfcoreSchema.groovy delete mode 100644 lib/Schema.groovy create mode 100644 lib/nfcore_external_java_deps.jar delete mode 100644 modules/local/process/functions.nf delete mode 100644 modules/local/process/get_software_versions.nf delete mode 100644 modules/local/process/samplesheet_check.nf delete mode 100644 modules/local/subworkflow/input_check.nf delete mode 100644 modules/nf-core/software/fastqc/functions.nf delete mode 100644 modules/nf-core/software/fastqc/main.nf delete mode 100644 modules/nf-core/software/fastqc/meta.yml delete mode 100644 modules/nf-core/software/multiqc/functions.nf delete mode 100644 modules/nf-core/software/multiqc/main.nf delete mode 100644 modules/nf-core/software/multiqc/meta.yml diff --git a/.github/.dockstore.yml b/.github/.dockstore.yml index 030138a0..191fabd2 100644 --- a/.github/.dockstore.yml +++ b/.github/.dockstore.yml @@ -3,3 +3,4 @@ version: 1.2 workflows: - subclass: nfl primaryDescriptorPath: /nextflow.config + publish: True diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 323db0a0..854f1497 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -87,7 +87,7 @@ Once there, use `nf-core schema build .` to add to `nextflow_schema.json`. ### Default processes resource requirements -Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/%7B%7Bcookiecutter.name_noslash%7D%7D/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. +Sensible defaults for process resource requirements (CPUs / memory / time) for a process should be defined in `conf/base.config`. These should generally be specified generic with `withLabel:` selectors so they can be shared across multiple processes/steps of the pipeline. A nf-core standard set of labels that should be followed where possible can be seen in the [nf-core pipeline template](https://github.com/nf-core/tools/blob/master/nf_core/pipeline-template/conf/base.config), which has the default process as a single core-process, and then different levels of multi-core configurations for increasingly large memory requirements defined with standardised labels. The process resources can be passed on to the tool dynamically within the process with the `${task.cpu}` and `${task.memory}` variables in the `script:` block. diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index ade74055..0d239c21 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -55,7 +55,7 @@ Have you provided the following extra information/files: ## Container engine -- Engine: +- Engine: - version: - Image tag: diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 14a6c362..59a8ac75 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,6 @@ --- name: Feature request -about: Suggest an idea for the nf-core website +about: Suggest an idea for the nf-core/cutandrun pipeline labels: enhancement --- diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 07fee469..3dd98343 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -15,9 +15,9 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/cuta - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! - - [ ] If you've added a new tool - add to the software_versions process and a regex to `scrape_software_versions.py` - - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) - - [ ] If necessary, also make a PR on the nf-core/cutandrun _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. + - [ ] If you've added a new tool - add to the software_versions process and a regex to `scrape_software_versions.py` + - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) + - [ ] If necessary, also make a PR on the nf-core/cutandrun _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint .`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index efaab75a..6ae69a18 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -9,6 +9,16 @@ on: types: [completed] workflow_dispatch: + +env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + TOWER_ACCESS_TOKEN: ${{ secrets.AWS_TOWER_TOKEN }} + AWS_JOB_DEFINITION: ${{ secrets.AWS_JOB_DEFINITION }} + AWS_JOB_QUEUE: ${{ secrets.AWS_JOB_QUEUE }} + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + + jobs: run-awstest: name: Run AWS full tests @@ -27,13 +37,6 @@ jobs: # Add full size test data (but still relatively small datasets for few samples) # on the `test_full.config` test runs with only one set of parameters # Then specify `-profile test_full` instead of `-profile test` on the AWS batch command - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - TOWER_ACCESS_TOKEN: ${{ secrets.AWS_TOWER_TOKEN }} - AWS_JOB_DEFINITION: ${{ secrets.AWS_JOB_DEFINITION }} - AWS_JOB_QUEUE: ${{ secrets.AWS_JOB_QUEUE }} - AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} run: | aws batch submit-job \ --region eu-west-1 \ diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index f19f98da..8e28af14 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -6,6 +6,16 @@ name: nf-core AWS test on: workflow_dispatch: + +env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + TOWER_ACCESS_TOKEN: ${{ secrets.AWS_TOWER_TOKEN }} + AWS_JOB_DEFINITION: ${{ secrets.AWS_JOB_DEFINITION }} + AWS_JOB_QUEUE: ${{ secrets.AWS_JOB_QUEUE }} + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + + jobs: run-awstest: name: Run AWS tests @@ -23,13 +33,6 @@ jobs: # TODO nf-core: You can customise CI pipeline run tests as required # For example: adding multiple test runs with different parameters # Remember that you can parallelise this by using strategy.matrix - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - TOWER_ACCESS_TOKEN: ${{ secrets.AWS_TOWER_TOKEN }} - AWS_JOB_DEFINITION: ${{ secrets.AWS_JOB_DEFINITION }} - AWS_JOB_QUEUE: ${{ secrets.AWS_JOB_QUEUE }} - AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} run: | aws batch submit-job \ --region eu-west-1 \ diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index b6f858ba..535a6a06 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -13,7 +13,7 @@ jobs: - name: Check PRs if: github.repository == 'nf-core/cutandrun' run: | - { [[ ${{github.event.pull_request.head.repo.full_name}} == nf-core/cutandrun ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + { [[ ${{github.event.pull_request.head.repo.full_name }} == nf-core/cutandrun ]] && [[ $GITHUB_HEAD_REF = "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] # If the above check failed, post a comment on the PR explaining the failure @@ -25,11 +25,12 @@ jobs: message: | Hi @${{ github.event.pull_request.user.login }}, - It looks like this pull-request is has been made against the ${{github.event.pull_request.head.repo.full_name}} `master` branch. + It looks like this pull-request is has been made against the ${{github.event.pull_request.base.repo.full_name }} `master` branch. The `master` branch on nf-core repositories should always contain code from the latest release. - Because of this, PRs to `master` are only allowed if they come from the ${{github.event.pull_request.head.repo.full_name}} `dev` branch. + Because of this, PRs to `master` are only allowed if they come from the ${{github.event.pull_request.base.repo.full_name }} `dev` branch. You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page. + Note that even after this, the test will continue to show as failing until you push a new commit. Thanks again for your contribution! repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a007c00..a4249351 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,11 +20,28 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: [20.11.0-edge] + nxf_ver: ['20.04.0', ''] steps: - name: Check out pipeline code uses: actions/checkout@v2 + - name: Check if Dockerfile or Conda environment changed + uses: technote-space/get-diff-action@v4 + with: + FILES: | + Dockerfile + environment.yml + + - name: Build new docker image + if: env.MATCHED_FILES + run: docker build --no-cache . -t nfcore/cutandrun:dev + + - name: Pull docker image + if: ${{ !env.MATCHED_FILES }} + run: | + docker pull nfcore/cutandrun:dev + docker tag nfcore/cutandrun:dev nfcore/cutandrun:dev + - name: Install Nextflow env: CAPSULE_LOG: none diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index bef81e61..58e281df 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -69,7 +69,7 @@ jobs: if: ${{ always() }} uses: actions/upload-artifact@v2 with: - name: linting-log-file + name: linting-logs path: | lint_log.txt lint_results.md diff --git a/.github/workflows/push_dockerhub_dev.yml b/.github/workflows/push_dockerhub_dev.yml new file mode 100644 index 00000000..3f54b408 --- /dev/null +++ b/.github/workflows/push_dockerhub_dev.yml @@ -0,0 +1,28 @@ +name: nf-core Docker push (dev) +# This builds the docker image and pushes it to DockerHub +# Runs on nf-core repo releases and push event to 'dev' branch (PR merges) +on: + push: + branches: + - dev + +jobs: + push_dockerhub: + name: Push new Docker image to Docker Hub (dev) + runs-on: ubuntu-latest + # Only run for the nf-core repo, for releases and merged PRs + if: ${{ github.repository == 'nf-core/cutandrun' }} + env: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_PASS: ${{ secrets.DOCKERHUB_PASS }} + steps: + - name: Check out pipeline code + uses: actions/checkout@v2 + + - name: Build new docker image + run: docker build --no-cache . -t nfcore/cutandrun:dev + + - name: Push Docker image to DockerHub (dev) + run: | + echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + docker push nfcore/cutandrun:dev diff --git a/.github/workflows/push_dockerhub_release.yml b/.github/workflows/push_dockerhub_release.yml new file mode 100644 index 00000000..1c822003 --- /dev/null +++ b/.github/workflows/push_dockerhub_release.yml @@ -0,0 +1,29 @@ +name: nf-core Docker push (release) +# This builds the docker image and pushes it to DockerHub +# Runs on nf-core repo releases and push event to 'dev' branch (PR merges) +on: + release: + types: [published] + +jobs: + push_dockerhub: + name: Push new Docker image to Docker Hub (release) + runs-on: ubuntu-latest + # Only run for the nf-core repo, for releases and merged PRs + if: ${{ github.repository == 'nf-core/cutandrun' }} + env: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_PASS: ${{ secrets.DOCKERHUB_PASS }} + steps: + - name: Check out pipeline code + uses: actions/checkout@v2 + + - name: Build new docker image + run: docker build --no-cache . -t nfcore/cutandrun:latest + + - name: Push Docker image to DockerHub (release) + run: | + echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + docker push nfcore/cutandrun:latest + docker tag nfcore/cutandrun:latest nfcore/cutandrun:${{ github.event.release.tag_name }} + docker push nfcore/cutandrun:${{ github.event.release.tag_name }} diff --git a/CHANGELOG.md b/CHANGELOG.md index c4db519a..d1240992 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [1.0dev] - [date] +## v1.0dev - [date] Initial release of nf-core/cutandrun, created with the [nf-core](https://nf-co.re/) template. diff --git a/CITATIONS.md b/CITATIONS.md deleted file mode 100644 index f664f7f6..00000000 --- a/CITATIONS.md +++ /dev/null @@ -1,32 +0,0 @@ -# nf-core/cutandrun: Citations - -## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) - -> Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. - -## [Nextflow](https://pubmed.ncbi.nlm.nih.gov/28398311/) - -> Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311. - -## Pipeline tools - -* [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) - -* [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) - > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. - -## Software packaging/containerisation tools - -* [Anaconda](https://anaconda.com) - > Anaconda Software Distribution. Computer software. Vers. 2-2.4.0. Anaconda, Nov. 2016. Web. - -* [Bioconda](https://pubmed.ncbi.nlm.nih.gov/29967506/) - > Grüning B, Dale R, Sjödin A, Chapman BA, Rowe J, Tomkins-Tinch CH, Valieris R, Köster J; Bioconda Team. Bioconda: sustainable and comprehensive software distribution for the life sciences. Nat Methods. 2018 Jul;15(7):475-476. doi: 10.1038/s41592-018-0046-7. PubMed PMID: 29967506. - -* [BioContainers](https://pubmed.ncbi.nlm.nih.gov/28379341/) - > da Veiga Leprevost F, Grüning B, Aflitos SA, Röst HL, Uszkoreit J, Barsnes H, Vaudel M, Moreno P, Gatto L, Weber J, Bai M, Jimenez RC, Sachsenberg T, Pfeuffer J, Alvarez RV, Griss J, Nesvizhskii AI, Perez-Riverol Y. BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics. 2017 Aug 15;33(16):2580-2582. doi: 10.1093/bioinformatics/btx192. PubMed PMID: 28379341; PubMed Central PMCID: PMC5870671. - -* [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) - -* [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) - > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 405fb1bf..f4fd052f 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,46 +1,111 @@ -# Contributor Covenant Code of Conduct +# Code of Conduct at nf-core (v1.0) ## Our Pledge -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. +In the interest of fostering an open, collaborative, and welcoming environment, we as contributors and maintainers of nf-core, pledge to making participation in our projects and community a harassment-free experience for everyone, regardless of: -## Our Standards +- Age +- Body size +- Familial status +- Gender identity and expression +- Geographical location +- Level of experience +- Nationality and national origins +- Native language +- Physical and neurological ability +- Race or ethnicity +- Religion +- Sexual identity and orientation +- Socioeconomic status -Examples of behavior that contributes to creating a positive environment include: +Please note that the list above is alphabetised and is therefore not ranked in any order of preference or importance. -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +## Preamble -Examples of unacceptable behavior by participants include: +> Note: This Code of Conduct (CoC) has been drafted by the nf-core Safety Officer and been edited after input from members of the nf-core team and others. "We", in this document, refers to the Safety Officer and members of the nf-core core team, both of whom are deemed to be members of the nf-core community and are therefore required to abide by this Code of Conduct. This document will amended periodically to keep it up-to-date, and in case of any dispute, the most current version will apply. -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +An up-to-date list of members of the nf-core core team can be found [here](https://nf-co.re/about). Our current safety officer is Renuka Kudva. + +nf-core is a young and growing community that welcomes contributions from anyone with a shared vision for [Open Science Policies](https://www.fosteropenscience.eu/taxonomy/term/8). Open science policies encompass inclusive behaviours and we strive to build and maintain a safe and inclusive environment for all individuals. + +We have therefore adopted this code of conduct (CoC), which we require all members of our community and attendees in nf-core events to adhere to in all our workspaces at all times. Workspaces include but are not limited to Slack, meetings on Zoom, Jitsi, YouTube live etc. + +Our CoC will be strictly enforced and the nf-core team reserve the right to exclude participants who do not comply with our guidelines from our workspaces and future nf-core activities. + +We ask all members of our community to help maintain a supportive and productive workspace and to avoid behaviours that can make individuals feel unsafe or unwelcome. Please help us maintain and uphold this CoC. + +Questions, concerns or ideas on what we can include? Contact safety [at] nf-co [dot] re ## Our Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. +The safety officer is responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behaviour. + +The safety officer in consultation with the nf-core core team have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +Members of the core team or the safety officer who violate the CoC will be required to recuse themselves pending investigation. They will not have access to any reports of the violations and be subject to the same actions as others in violation of the CoC. + +## When are where does this Code of Conduct apply? + +Participation in the nf-core community is contingent on following these guidelines in all our workspaces and events. This includes but is not limited to the following listed alphabetically and therefore in no order of preference: + +- Communicating with an official project email address. +- Communicating with community members within the nf-core Slack channel. +- Participating in hackathons organised by nf-core (both online and in-person events). +- Participating in collaborative work on GitHub, Google Suite, community calls, mentorship meetings, email correspondence. +- Participating in workshops, training, and seminar series organised by nf-core (both online and in-person events). This applies to events hosted on web-based platforms such as Zoom, Jitsi, YouTube live etc. +- Representing nf-core on social media. This includes both official and personal accounts. + +## nf-core cares 😊 + +nf-core's CoC and expectations of respectful behaviours for all participants (including organisers and the nf-core team) include but are not limited to the following (listed in alphabetical order): + +- Ask for consent before sharing another community member’s personal information (including photographs) on social media. +- Be respectful of differing viewpoints and experiences. We are all here to learn from one another and a difference in opinion can present a good learning opportunity. +- Celebrate your accomplishments at events! (Get creative with your use of emojis 🎉 🥳 💯 🙌 !) +- Demonstrate empathy towards other community members. (We don’t all have the same amount of time to dedicate to nf-core. If tasks are pending, don’t hesitate to gently remind members of your team. If you are leading a task, ask for help if you feel overwhelmed.) +- Engage with and enquire after others. (This is especially important given the geographically remote nature of the nf-core community, so let’s do this the best we can) +- Focus on what is best for the team and the community. (When in doubt, ask) +- Graciously accept constructive criticism, yet be unafraid to question, deliberate, and learn. +- Introduce yourself to members of the community. (We’ve all been outsiders and we know that talking to strangers can be hard for some, but remember we’re interested in getting to know you and your visions for open science!) +- Show appreciation and **provide clear feedback**. (This is especially important because we don’t see each other in person and it can be harder to interpret subtleties. Also remember that not everyone understands a certain language to the same extent as you do, so **be clear in your communications to be kind.**) +- Take breaks when you feel like you need them. +- Using welcoming and inclusive language. (Participants are encouraged to display their chosen pronouns on Zoom or in communication on Slack.) + +## nf-core frowns on 😕 + +The following behaviours from any participants within the nf-core community (including the organisers) will be considered unacceptable under this code of conduct. Engaging or advocating for any of the following could result in expulsion from nf-core workspaces. + +- Deliberate intimidation, stalking or following and sustained disruption of communication among participants of the community. This includes hijacking shared screens through actions such as using the annotate tool in conferencing software such as Zoom. +- “Doxing” i.e. posting (or threatening to post) another person’s personal identifying information online. +- Spamming or trolling of individuals on social media. +- Use of sexual or discriminatory imagery, comments, or jokes and unwelcome sexual attention. +- Verbal and text comments that reinforce social structures of domination related to gender, gender identity and expression, sexual orientation, ability, physical appearance, body size, race, age, religion or work experience. + +### Online Trolling + +The majority of nf-core interactions and events are held online. Unfortunately, holding events online comes with the added issue of online trolling. This is unacceptable, reports of such behaviour will be taken very seriously, and perpetrators will be excluded from activities immediately. + +All community members are required to ask members of the group they are working within for explicit consent prior to taking screenshots of individuals during video calls. + +## Procedures for Reporting CoC violations -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. +If someone makes you feel uncomfortable through their behaviours or actions, report it as soon as possible. -## Scope +You can reach out to members of the [nf-core core team](https://nf-co.re/about) and they will forward your concerns to the safety officer(s). -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. +Issues directly concerning members of the core team will be dealt with by other members of the core team and the safety manager, and possible conflicts of interest will be taken into account. nf-core is also in discussions about having an ombudsperson, and details will be shared in due course. -## Enforcement +All reports will be handled with utmost discretion and confidentially. -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team on [Slack](https://nf-co.re/join/slack). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +## Attribution and Acknowledgements -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. +- The [Contributor Covenant, version 1.4](http://contributor-covenant.org/version/1/4) +- The [OpenCon 2017 Code of Conduct](http://www.opencon2017.org/code_of_conduct) (CC BY 4.0 OpenCon organisers, SPARC and Right to Research Coalition) +- The [eLife innovation sprint 2020 Code of Conduct](https://sprint.elifesciences.org/code-of-conduct/) +- The [Mozilla Community Participation Guidelines v3.1](https://www.mozilla.org/en-US/about/governance/policies/participation/) (version 3.1, CC BY-SA 3.0 Mozilla) -## Attribution +## Changelog -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct/][version] +### v1.0 - March 12th, 2021 -[homepage]: https://contributor-covenant.org -[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct/ +- Complete rewrite from original [Contributor Covenant](http://contributor-covenant.org/) CoC. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..295d918b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM nfcore/base:1.13 +LABEL authors="Chris Cheshire and Charlotte West" \ + description="Docker image containing all software requirements for the nf-core/cutandrun pipeline" + +# Install the conda environment +COPY environment.yml / +RUN conda env create --quiet -f /environment.yml && conda clean -a + +# Add conda installation dir to PATH (instead of doing 'conda activate') +ENV PATH /opt/conda/envs/nf-core-cutandrun-1.0dev/bin:$PATH + +# Dump the details of the installed packages to a file for posterity +RUN conda env export --name nf-core-cutandrun-1.0dev > nf-core-cutandrun-1.0dev.yml diff --git a/README.md b/README.md index f5c72ede..38e33897 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,14 @@ # ![nf-core/cutandrun](docs/images/nf-core-cutandrun_logo.png) -[![GitHub Actions CI Status](https://github.com/nf-core/cutandrun/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/cutandrun/actions?query=workflow%3A%22nf-core+CI%22) -[![GitHub Actions Linting Status](https://github.com/nf-core/cutandrun/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/cutandrun/actions?query=workflow%3A%22nf-core+linting%22) -[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/cutandrun/results) -[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) +**Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.**. -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A520.11.0--edge-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) -[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) -[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) -[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) +[![GitHub Actions CI Status](https://github.com/nf-core/cutandrun/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/cutandrun/actions) +[![GitHub Actions Linting Status](https://github.com/nf-core/cutandrun/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/cutandrun/actions) +[![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A520.04.0-brightgreen.svg)](https://www.nextflow.io/) -[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23cutandrun-4A154B?labelColor=000000&logo=slack)](https://nfcore.slack.com/channels/cutandrun) -[![Follow on Twitter](http://img.shields.io/badge/twitter-%40nf__core-1DA1F2?labelColor=000000&logo=twitter)](https://twitter.com/nf_core) -[![Watch on YouTube](http://img.shields.io/badge/youtube-nf--core-FF0000?labelColor=000000&logo=youtube)](https://www.youtube.com/c/nf-core) +[![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg)](https://bioconda.github.io/) +[![Docker](https://img.shields.io/docker/automated/nfcore/cutandrun.svg)](https://hub.docker.com/r/nfcore/cutandrun) +[![Get help on Slack](http://img.shields.io/badge/slack-nf--core%20%23cutandrun-4A154B?logo=slack)](https://nfcore.slack.com/channels/cutandrun) ## Introduction @@ -21,46 +17,45 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It comes with docker containers making installation trivial and results highly reproducible. - -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/cutandrun/results). - -## Pipeline summary - - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) - ## Quick Start 1. Install [`nextflow`](https://nf-co.re/usage/installation) -2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/) or [`Podman`](https://podman.io/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ +2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/), [`Podman`](https://podman.io/), [`Shifter`](https://nersc.gitlab.io/development/shifter/how-to-use/) or [`Charliecloud`](https://hpc.github.io/charliecloud/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ 3. Download the pipeline and test it on a minimal dataset with a single command: ```bash - nextflow run nf-core/cutandrun -profile test, + nextflow run nf-core/cutandrun -profile test, ``` - > * Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. - > * If you are using `singularity` then the pipeline will auto-detect this and attempt to download the Singularity images directly as opposed to performing a conversion from Docker images. If you are persistently observing issues downloading Singularity images directly due to timeout or network issues then please use the `--singularity_pull_docker_container` parameter to pull and convert the Docker image instead. It is also highly recommended to use the [`NXF_SINGULARITY_CACHEDIR` or `singularity.cacheDir`](https://www.nextflow.io/docs/latest/singularity.html?#singularity-docker-hub) settings to store the images in a central location for future pipeline runs. - > * If you are using `conda`, it is highly recommended to use the [`NXF_CONDA_CACHEDIR` or `conda.cacheDir`](https://www.nextflow.io/docs/latest/conda.html) settings to store the environments in a central location for future pipeline runs. + > Please check [nf-core/configs](https://github.com/nf-core/configs#documentation) to see if a custom config file to run nf-core pipelines already exists for your Institute. If so, you can simply use `-profile ` in your command. This will enable either `docker` or `singularity` and set the appropriate execution settings for your local compute environment. 4. Start running your own analysis! ```bash - nextflow run nf-core/cutandrun -profile --input samplesheet.csv --genome GRCh37 + nextflow run nf-core/cutandrun -profile --input '*_R{1,2}.fastq.gz' --genome GRCh37 ``` See [usage docs](https://nf-co.re/cutandrun/usage) for all of the available options when running the pipeline. +## Pipeline Summary + +By default, the pipeline currently performs the following: + + + +* Sequencing quality control (`FastQC`) +* Overall pipeline run summaries (`MultiQC`) + ## Documentation The nf-core/cutandrun pipeline comes with documentation about the pipeline: [usage](https://nf-co.re/cutandrun/usage) and [output](https://nf-co.re/cutandrun/output). + + ## Credits nf-core/cutandrun was originally written by Chris Cheshire and Charlotte West. @@ -78,12 +73,9 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - + - -An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. - You can cite the `nf-core` publication as follows: > **The nf-core framework for community-curated bioinformatics pipelines.** @@ -91,3 +83,7 @@ You can cite the `nf-core` publication as follows: > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > > _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). + +In addition, references of tools and data used in this pipeline are as follows: + + diff --git a/assets/email_template.html b/assets/email_template.html index 0e691c4f..61467157 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -1,6 +1,5 @@ - diff --git a/assets/nf-core-cutandrun_logo.png b/assets/nf-core-cutandrun_logo.png index 8d24fe55dc35f9f835b765b9c7e4999e5ead67c0..cd4c3d47369672c124d6b464b3a11bd8e6debe8e 100644 GIT binary patch delta 32 lcmdni$9TGrae}fi180FpWHAE+-w_aIoT|+yy-`ur9RQyR2(JJD delta 12 TcmX@z$GEMJaf0$j3t@KvB6$Rs diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv deleted file mode 100644 index cd5a39a0..00000000 --- a/assets/samplesheet.csv +++ /dev/null @@ -1,8 +0,0 @@ -group,replicate,fastq_1,fastq_2 -control,1,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz -control,2,/path/to/fastq/files/AEG588A2_S2_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A2_S2_L002_R2_001.fastq.gz -control,3,/path/to/fastq/files/AEG588A3_S3_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A3_S3_L002_R2_001.fastq.gz -treatment,1,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, -treatment,2,/path/to/fastq/files/AEG588A5_S5_L003_R1_001.fastq.gz, -treatment,3,/path/to/fastq/files/AEG588A6_S6_L003_R1_001.fastq.gz, -treatment,3,/path/to/fastq/files/AEG588A6_S6_L004_R1_001.fastq.gz, diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py deleted file mode 100755 index 0b317500..00000000 --- a/bin/check_samplesheet.py +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/env python - -# TODO nf-core: Update the script to check the samplesheet -# This script is based on the example at: https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design.csv - - -import os -import sys -import errno -import argparse - - -def parse_args(args=None): - Description = "Reformat nf-core/cutandrun samplesheet file and check its contents." - Epilog = "Example usage: python check_samplesheet.py " - - parser = argparse.ArgumentParser(description=Description, epilog=Epilog) - parser.add_argument("FILE_IN", help="Input samplesheet file.") - parser.add_argument("FILE_OUT", help="Output file.") - return parser.parse_args(args) - - -def make_dir(path): - if len(path) > 0: - try: - os.makedirs(path) - except OSError as exception: - if exception.errno != errno.EEXIST: - raise exception - - -def print_error(error, context="Line", context_str=""): - error_str = "ERROR: Please check samplesheet -> {}".format(error) - if context != "" and context_str != "": - error_str = "ERROR: Please check samplesheet -> {}\n{}: '{}'".format( - error, context.strip(), context_str.strip() - ) - print(error_str) - sys.exit(1) - - -# TODO nf-core: Update the check_samplesheet function -def check_samplesheet(file_in, file_out): - """ - This function checks that the samplesheet follows the following structure: - - group,replicate,fastq_1,fastq_2 - WT,1,WT_LIB1_REP1_1.fastq.gz,WT_LIB1_REP1_2.fastq.gz - WT,1,WT_LIB2_REP1_1.fastq.gz,WT_LIB2_REP1_2.fastq.gz - WT,2,WT_LIB1_REP2_1.fastq.gz,WT_LIB1_REP2_2.fastq.gz - KO,1,KO_LIB1_REP1_1.fastq.gz,KO_LIB1_REP1_2.fastq.gz - """ - - sample_run_dict = {} - with open(file_in, "r") as fin: - - ## Check header - MIN_COLS = 3 - # TODO nf-core: Update the column names for the input samplesheet - HEADER = ["group", "replicate", "fastq_1", "fastq_2"] - header = [x.strip('"') for x in fin.readline().strip().split(",")] - if header[: len(HEADER)] != HEADER: - print("ERROR: Please check samplesheet header -> {} != {}".format(",".join(header), ",".join(HEADER))) - sys.exit(1) - - ## Check sample entries - for line in fin: - lspl = [x.strip().strip('"') for x in line.strip().split(",")] - - ## Check valid number of columns per row - if len(lspl) < len(HEADER): - print_error( - "Invalid number of columns (minimum = {})!".format(len(HEADER)), - "Line", - line, - ) - num_cols = len([x for x in lspl if x]) - if num_cols < MIN_COLS: - print_error( - "Invalid number of populated columns (minimum = {})!".format(MIN_COLS), - "Line", - line, - ) - - ## Check sample name entries - sample, replicate, fastq_1, fastq_2 = lspl[: len(HEADER)] - if sample: - if sample.find(" ") != -1: - print_error("Group entry contains spaces!", "Line", line) - else: - print_error("Group entry has not been specified!", "Line", line) - - ## Check replicate entry is integer - if not replicate.isdigit(): - print_error("Replicate id not an integer!", "Line", line) - replicate = int(replicate) - - ## Check FastQ file extension - for fastq in [fastq_1, fastq_2]: - if fastq: - if fastq.find(" ") != -1: - print_error("FastQ file contains spaces!", "Line", line) - if not fastq.endswith(".fastq.gz") and not fastq.endswith(".fq.gz"): - print_error( - "FastQ file does not have extension '.fastq.gz' or '.fq.gz'!", - "Line", - line, - ) - - ## Auto-detect paired-end/single-end - sample_info = [] ## [single_end, fastq_1, fastq_2] - if sample and fastq_1 and fastq_2: ## Paired-end short reads - sample_info = ["0", fastq_1, fastq_2] - elif sample and fastq_1 and not fastq_2: ## Single-end short reads - sample_info = ["1", fastq_1, fastq_2] - else: - print_error("Invalid combination of columns provided!", "Line", line) - ## Create sample mapping dictionary = {sample: {replicate : [ single_end, fastq_1, fastq_2 ]}} - if sample not in sample_run_dict: - sample_run_dict[sample] = {} - if replicate not in sample_run_dict[sample]: - sample_run_dict[sample][replicate] = [sample_info] - else: - if sample_info in sample_run_dict[sample][replicate]: - print_error("Samplesheet contains duplicate rows!", "Line", line) - else: - sample_run_dict[sample][replicate].append(sample_info) - - ## Write validated samplesheet with appropriate columns - if len(sample_run_dict) > 0: - out_dir = os.path.dirname(file_out) - make_dir(out_dir) - with open(file_out, "w") as fout: - - fout.write(",".join(["sample", "single_end", "fastq_1", "fastq_2"]) + "\n") - for sample in sorted(sample_run_dict.keys()): - - ## Check that replicate ids are in format 1.. - uniq_rep_ids = set(sample_run_dict[sample].keys()) - if len(uniq_rep_ids) != max(uniq_rep_ids): - print_error( - "Replicate ids must start with 1..!", - "Group", - sample, - ) - for replicate in sorted(sample_run_dict[sample].keys()): - - ## Check that multiple runs of the same sample are of the same datatype - if not all( - x[0] == sample_run_dict[sample][replicate][0][0] for x in sample_run_dict[sample][replicate] - ): - print_error( - "Multiple runs of a sample must be of the same datatype!", - "Group", - sample, - ) - ## Write to file - for idx, sample_info in enumerate(sample_run_dict[sample][replicate]): - sample_id = "{}_R{}_T{}".format(sample, replicate, idx + 1) - fout.write(",".join([sample_id] + sample_info) + "\n") - - -def main(args=None): - args = parse_args(args) - check_samplesheet(args.FILE_IN, args.FILE_OUT) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/bin/markdown_to_html.py b/bin/markdown_to_html.py new file mode 100644 index 00000000..a26d1ff5 --- /dev/null +++ b/bin/markdown_to_html.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +from __future__ import print_function +import argparse +import markdown +import os +import sys +import io + + +def convert_markdown(in_fn): + input_md = io.open(in_fn, mode="r", encoding="utf-8").read() + html = markdown.markdown( + "[TOC]\n" + input_md, + extensions=["pymdownx.extra", "pymdownx.b64", "pymdownx.highlight", "pymdownx.emoji", "pymdownx.tilde", "toc"], + extension_configs={ + "pymdownx.b64": {"base_path": os.path.dirname(in_fn)}, + "pymdownx.highlight": {"noclasses": True}, + "toc": {"title": "Table of Contents"}, + }, + ) + return html + + +def wrap_html(contents): + header = """ + + + + + +
+ """ + footer = """ +
+ + + """ + return header + contents + footer + + +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument("mdfile", type=argparse.FileType("r"), nargs="?", help="File to convert. Defaults to stdin.") + parser.add_argument( + "-o", "--out", type=argparse.FileType("w"), default=sys.stdout, help="Output file name. Defaults to stdout." + ) + return parser.parse_args(args) + + +def main(args=None): + args = parse_args(args) + converted_md = convert_markdown(args.mdfile.name) + html = wrap_html(converted_md) + args.out.write(html) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py old mode 100755 new mode 100644 index 155177ac..521eccfe --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -1,18 +1,36 @@ #!/usr/bin/env python from __future__ import print_function -import os +from collections import OrderedDict +import re -results = {} -version_files = [x for x in os.listdir(".") if x.endswith(".version.txt")] -for version_file in version_files: +# TODO nf-core: Add additional regexes for new tools in process get_software_versions +regexes = { + "nf-core/cutandrun": ["v_pipeline.txt", r"(\S+)"], + "Nextflow": ["v_nextflow.txt", r"(\S+)"], + "FastQC": ["v_fastqc.txt", r"FastQC v(\S+)"], + "MultiQC": ["v_multiqc.txt", r"multiqc, version (\S+)"], +} +results = OrderedDict() +results["nf-core/cutandrun"] = 'N/A' +results["Nextflow"] = 'N/A' +results["FastQC"] = 'N/A' +results["MultiQC"] = 'N/A' - software = version_file.replace(".version.txt", "") - if software == "pipeline": - software = "nf-core/cutandrun" +# Search each file using its regex +for k, v in regexes.items(): + try: + with open(v[0]) as x: + versions = x.read() + match = re.search(v[1], versions) + if match: + results[k] = "v{}".format(match.group(1)) + except IOError: + results[k] = False - with open(version_file) as fin: - version = fin.read().strip() - results[software] = version +# Remove software set to false in results +for k in list(results): + if not results[k]: + del results[k] # Dump to YAML print( @@ -26,11 +44,11 @@
""" ) -for k, v in sorted(results.items()): +for k, v in results.items(): print("
{}
{}
".format(k, v)) print("
") # Write out regexes as csv file: with open("software_versions.csv", "w") as f: - for k, v in sorted(results.items()): + for k, v in results.items(): f.write("{}\t{}\n".format(k, v)) diff --git a/conf/base.config b/conf/base.config index 12873596..348ea8fd 100644 --- a/conf/base.config +++ b/conf/base.config @@ -12,44 +12,40 @@ process { // TODO nf-core: Check the defaults for all processes - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 6.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { check_max( 1 * task.attempt, 'cpus' ) } + memory = { check_max( 7.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } - maxRetries = 1 - maxErrors = '-1' + maxRetries = 1 + maxErrors = '-1' // Process-specific resource requirements - // NOTE - Please try and re-use the labels below as much as possible. - // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. + // NOTE - Only one of the labels below are used in the fastqc process in the main script. // If possible, it would be nice to keep the same label naming convention when - // adding in your local modules too. + // adding in your processes. // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 12.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { check_max( 2 * task.attempt, 'cpus' ) } + memory = { check_max( 14.GB * task.attempt, 'memory' ) } + time = { check_max( 6.h * task.attempt, 'time' ) } } withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 42.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } } withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 72.GB * task.attempt, 'memory' ) } - time = { check_max( 16.h * task.attempt, 'time' ) } + cpus = { check_max( 12 * task.attempt, 'cpus' ) } + memory = { check_max( 84.GB * task.attempt, 'memory' ) } + time = { check_max( 10.h * task.attempt, 'time' ) } } withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } + time = { check_max( 20.h * task.attempt, 'time' ) } } - withLabel:error_ignore { - errorStrategy = 'ignore' + withName:get_software_versions { + cache = false } - withLabel:error_retry { - errorStrategy = 'retry' - maxRetries = 2 - } + } diff --git a/conf/igenomes.config b/conf/igenomes.config index 7485867b..31b7ee61 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -12,7 +12,7 @@ params { genomes { 'GRCh37' { fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" @@ -25,7 +25,7 @@ params { } 'GRCh38' { fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" @@ -37,7 +37,7 @@ params { } 'GRCm38' { fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" @@ -50,7 +50,7 @@ params { } 'TAIR10' { fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" @@ -61,7 +61,7 @@ params { } 'EB2' { fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" @@ -71,7 +71,7 @@ params { } 'UMD3.1' { fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" @@ -82,7 +82,7 @@ params { } 'WBcel235' { fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" @@ -93,7 +93,7 @@ params { } 'CanFam3.1' { fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" @@ -104,7 +104,7 @@ params { } 'GRCz10' { fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" @@ -114,7 +114,7 @@ params { } 'BDGP6' { fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" @@ -125,7 +125,7 @@ params { } 'EquCab2' { fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" @@ -136,7 +136,7 @@ params { } 'EB1' { fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" @@ -146,7 +146,7 @@ params { } 'Galgal4' { fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" @@ -156,7 +156,7 @@ params { } 'Gm01' { fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" @@ -166,7 +166,7 @@ params { } 'Mmul_1' { fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" @@ -177,7 +177,7 @@ params { } 'IRGSP-1.0' { fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" @@ -187,7 +187,7 @@ params { } 'CHIMP2.1.4' { fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" @@ -198,7 +198,7 @@ params { } 'Rnor_6.0' { fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" @@ -208,7 +208,7 @@ params { } 'R64-1-1' { fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" @@ -219,7 +219,7 @@ params { } 'EF2' { fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" @@ -231,7 +231,7 @@ params { } 'Sbi1' { fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" @@ -241,7 +241,7 @@ params { } 'Sscrofa10.2' { fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" @@ -252,7 +252,7 @@ params { } 'AGPv3' { fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" @@ -262,7 +262,7 @@ params { } 'hg38' { fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" @@ -274,7 +274,7 @@ params { } 'hg19' { fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" @@ -287,7 +287,7 @@ params { } 'mm10' { fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" @@ -300,7 +300,7 @@ params { } 'bosTau8' { fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" @@ -310,7 +310,7 @@ params { } 'ce10' { fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" @@ -322,7 +322,7 @@ params { } 'canFam3' { fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" @@ -333,17 +333,18 @@ params { } 'danRer10' { fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" mito_name = "chrM" + macs_gsize = "1.37e9" } 'dm6' { fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" @@ -354,7 +355,7 @@ params { } 'equCab2' { fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" @@ -365,7 +366,7 @@ params { } 'galGal4' { fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" @@ -376,7 +377,7 @@ params { } 'panTro4' { fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" @@ -387,7 +388,7 @@ params { } 'rn6' { fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" @@ -397,7 +398,7 @@ params { } 'sacCer3' { fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" @@ -407,7 +408,7 @@ params { } 'susScr3' { fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" diff --git a/conf/modules.config b/conf/modules.config deleted file mode 100644 index f26191e0..00000000 --- a/conf/modules.config +++ /dev/null @@ -1,28 +0,0 @@ -/* - * -------------------------------------------------- - * Config file for defining DSL2 per module options - * -------------------------------------------------- - * - * Available keys to override module options: - * args = Additional arguments appended to command in module. - * args2 = Second set of arguments appended to command in module (multi-tool modules). - * publish_dir = Directory to publish results. - * publish_by_id = Publish results in separate folders by meta.id value. - * publish_files = Groovy map where key = "file_ext" and value = "directory" to publish results for that file extension - * The value of "directory" is appended to the standard "publish_dir" path as defined above. - * If publish_files == null (unspecified) - All files are published. - * If publish_files == false - No files are published. - * suffix = File name suffix for output files. - * - */ - -params { - modules { - 'fastqc' { - args = "--quiet" - } - 'multiqc' { - args = "" - } - } -} diff --git a/conf/test.config b/conf/test.config index e1ed861e..2bf25194 100644 --- a/conf/test.config +++ b/conf/test.config @@ -8,19 +8,21 @@ */ params { - config_profile_name = 'Test profile' + config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 + max_cpus = 2 max_memory = 6.GB - max_time = 6.h + max_time = 48.h // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design.csv' - - // Genome references - genome = 'R64-1-1' + single_end = false + input_paths = [ + ['Testdata', ['https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R1.tiny.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R2.tiny.fastq.gz']], + ['SRR389222', ['https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz']] + ] + // Ignore `--input` as otherwise the parameter validation will throw an error + schema_ignore_params = 'genomes,input_paths,input' } diff --git a/conf/test_full.config b/conf/test_full.config index 85b58b87..80d91f61 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -8,14 +8,17 @@ */ params { - config_profile_name = 'Full test profile' + config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' // Input data for full size test // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design_full.csv' - - // Genome references - genome = 'GRCh37' + single_end = false + input_paths = [ + ['Testdata', ['https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R1.tiny.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R2.tiny.fastq.gz']], + ['SRR389222', ['https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz']] + ] + // Ignore `--input` as otherwise the parameter validation will throw an error + schema_ignore_params = 'genomes,input_paths,input' } diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png deleted file mode 100755 index 361d0e47acfb424dea1f326590d1eb2f6dfa26b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23458 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 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png deleted file mode 100755 index a4b89bf56ab2ba88cab87841916eb680a816deae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55769 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�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s diff --git a/docs/images/nf-core-cutandrun_logo.png b/docs/images/nf-core-cutandrun_logo.png index 8d24fe55dc35f9f835b765b9c7e4999e5ead67c0..7e8366961b8371a440683f918d0eb8b6284c231a 100644 GIT binary patch literal 34713 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 Krd-N6@c#klED!(y diff --git a/docs/output.md b/docs/output.md index c004a930..9d72bde8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -1,9 +1,5 @@ # nf-core/cutandrun: Output -## :warning: Please read this documentation on the nf-core website: [https://nf-co.re/cutandrun/output](https://nf-co.re/cutandrun/output) - -> _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ - ## Introduction This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. @@ -14,61 +10,50 @@ The directories listed below will be created in the results directory after the ## Pipeline overview -The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: +The pipeline is built using [Nextflow](https://www.nextflow.io/) +and processes data using the following steps: -* [FastQC](#fastqc) - Raw read QC -* [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline +* [FastQC](#fastqc) - Read quality control +* [MultiQC](#multiqc) - Aggregate report describing results from the whole pipeline * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -### FastQC +## FastQC + +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. + +For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). -
-Output files +**Output files:** * `fastqc/` * `*_fastqc.html`: FastQC report containing quality metrics for your untrimmed raw fastq files. +* `fastqc/zips/` * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. -> **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `trimgalore/fastqc/` directory. - -
- -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). +> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) +## MultiQC -![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarizing all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) +The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. -> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. +For more information about how to use MultiQC reports, see [https://multiqc.info](https://multiqc.info). -### MultiQC +**Output files:** -
-Output files - -* `multiqc/` +* `multiqc/` * `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. * `multiqc_plots/`: directory containing static images from the report in various formats. -
- -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. +## Pipeline information -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . - -### Pipeline information +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. -
-Output files +**Output files:** * `pipeline_info/` * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. - -
- -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. + * Documentation for interpretation of results in HTML format: `results_description.html`. diff --git a/docs/usage.md b/docs/usage.md index cb9846fb..7420f279 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -8,67 +8,12 @@ -## Samplesheet input - -You will need to create a samplesheet file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row as shown in the examples below. - -```bash ---input '[path to samplesheet file]' -``` - -### Multiple replicates - -The `group` identifier is the same when you have multiple replicates from the same experimental group, just increment the `replicate` identifier appropriately. The first replicate value for any given experimental group must be 1. Below is an example for a single experimental group in triplicate: - -```bash -group,replicate,fastq_1,fastq_2 -control,1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -control,2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -control,3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -``` - -### Multiple runs of the same library - -The `group` and `replicate` identifiers are the same when you have re-sequenced the same sample more than once (e.g. to increase sequencing depth). The pipeline will concatenate the raw reads before alignment. Below is an example for two samples sequenced across multiple lanes: - -```bash -group,replicate,fastq_1,fastq_2 -control,1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -control,1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -treatment,1,AEG588A4_S4_L003_R1_001.fastq.gz,AEG588A4_S4_L003_R2_001.fastq.gz -treatment,1,AEG588A4_S4_L004_R1_001.fastq.gz,AEG588A4_S4_L004_R2_001.fastq.gz -``` - -### Full design - -A final design file consisting of both single- and paired-end data may look something like the one below. This is for two experimental groups in triplicate, where the last replicate of the `treatment` group has been sequenced twice. - -```bash -group,replicate,fastq_1,fastq_2 -control,1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -control,2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz -control,3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz -treatment,1,AEG588A4_S4_L003_R1_001.fastq.gz, -treatment,2,AEG588A5_S5_L003_R1_001.fastq.gz, -treatment,3,AEG588A6_S6_L003_R1_001.fastq.gz, -treatment,3,AEG588A6_S6_L004_R1_001.fastq.gz, -``` - -| Column | Description | -|----------------|-------------------------------------------------------------------------------------------------------------| -| `group` | Group identifier for sample. This will be identical for replicate samples from the same experimental group. | -| `replicate` | Integer representing replicate number. Must start from `1..`. | -| `fastq_1` | Full path to FastQ file for read 1. File has to be zipped and have the extension ".fastq.gz" or ".fq.gz". | -| `fastq_2` | Full path to FastQ file for read 2. File has to be zipped and have the extension ".fastq.gz" or ".fq.gz". | - -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. - ## Running the pipeline The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/cutandrun --input samplesheet.csv -profile docker +nextflow run nf-core/cutandrun --input '*_R{1,2}.fastq.gz' -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -106,7 +51,7 @@ This version number will be logged in reports when you run the pipeline, so that Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Conda) - see below. +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. @@ -126,8 +71,14 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof * `podman` * A generic configuration profile to be used with [Podman](https://podman.io/) * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) +* `shifter` + * A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) + * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) +* `charliecloud` + * A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) * `conda` - * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity or Podman. + * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. * A generic configuration profile to be used with [Conda](https://conda.io/docs/) * Pulls most software from [Bioconda](https://bioconda.github.io/) * `test` @@ -158,6 +109,8 @@ process { } ``` +To find the exact name of a process you wish to modify the compute resources, check the live-status of a nextflow run displayed on your terminal or check the nextflow error for a line like so: `Error executing process > 'bwa'`. In this case the name to specify in the custom config file is `bwa`. + See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information. If you are likely to be running `nf-core` pipelines regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter (see definition above). You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. diff --git a/environment.yml b/environment.yml new file mode 100644 index 00000000..83f81a09 --- /dev/null +++ b/environment.yml @@ -0,0 +1,15 @@ +# You can use this file to create a conda environment for this pipeline: +# conda env create -f environment.yml +name: nf-core-cutandrun-1.0dev +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - conda-forge::python=3.7.3 + - conda-forge::markdown=3.1.1 + - conda-forge::pymdown-extensions=6.0 + - conda-forge::pygments=2.5.2 + # TODO nf-core: Add required software dependencies here + - bioconda::fastqc=0.11.8 + - bioconda::multiqc=1.7 diff --git a/lib/Checks.groovy b/lib/Checks.groovy deleted file mode 100644 index 16747ed8..00000000 --- a/lib/Checks.groovy +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This file holds several functions used to perform standard checks for the nf-core pipeline template. - */ - -import org.yaml.snakeyaml.Yaml - -class Checks { - - static void check_conda_channels(log) { - Yaml parser = new Yaml() - def channels = [] - try { - def config = parser.load("conda config --show channels".execute().text) - channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return - } - - // Check that all channels are present - def required_channels = ['conda-forge', 'bioconda', 'defaults'] - def conda_check_failed = !required_channels.every { ch -> ch in channels } - - // Check that they are in the right order - conda_check_failed |= !(channels.indexOf('conda-forge') < channels.indexOf('bioconda')) - conda_check_failed |= !(channels.indexOf('bioconda') < channels.indexOf('defaults')) - - if (conda_check_failed) { - log.warn "=============================================================================\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/user/install.html#set-up-channels\n" + - " NB: The order of the channels matters!\n" + - "===================================================================================" - } - } - - static void aws_batch(workflow, params) { - if (workflow.profile.contains('awsbatch')) { - assert (params.awsqueue && params.awsregion) : "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" - // Check outdir paths to be S3 buckets if running on AWSBatch - // related: https://github.com/nextflow-io/nextflow/issues/813 - assert params.outdir.startsWith('s3:') : "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" - // Prevent trace files to be stored on S3 since S3 does not support rolling files. - assert !params.tracedir.startsWith('s3:') : "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." - } - } - - static void hostname(workflow, params, log) { - Map colors = Headers.log_colours(params.monochrome_logs) - if (params.hostnames) { - def hostname = "hostname".execute().text.trim() - params.hostnames.each { prof, hnames -> - hnames.each { hname -> - if (hostname.contains(hname) && !workflow.profile.contains(prof)) { - log.info "=${colors.yellow}====================================================${colors.reset}=\n" + - "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + - " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + - " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + - "=${colors.yellow}====================================================${colors.reset}=" - } - } - } - } - } - - // Citation string - private static String citation(workflow) { - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - " https://doi.org/10.5281/zenodo.1400710\n\n" + - "* The nf-core framework\n" + - " https://dx.doi.org/10.1038/s41587-020-0439-x\n" + - " https://rdcu.be/b1GjZ\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" - } - - // Exit pipeline if incorrect --genome key provided - static void genome_exists(params, log) { - if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - log.error "=============================================================================\n" + - " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + - " Currently, the available genome keys are:\n" + - " ${params.genomes.keySet().join(", ")}\n" + - "=============================================================================" - System.exit(0) - } - } - - // Get attribute from genome config file e.g. fasta - static String get_genome_attribute(params, attribute) { - def val = '' - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - val = params.genomes[ params.genome ][ attribute ] - } - } - return val - } -} diff --git a/lib/Completion.groovy b/lib/Completion.groovy deleted file mode 100644 index e745c986..00000000 --- a/lib/Completion.groovy +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Functions to be run on completion of pipeline - */ - -class Completion { - static void email(workflow, params, summary_params, projectDir, log, multiqc_report=[]) { - - // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" - if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" - } - - def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] - } - - def misc_fields = [:] - misc_fields['Date Started'] = workflow.start - misc_fields['Date Completed'] = workflow.complete - misc_fields['Pipeline script file path'] = workflow.scriptFile - misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build - misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - - def email_fields = [:] - email_fields['version'] = workflow.manifest.version - email_fields['runName'] = workflow.runName - email_fields['success'] = workflow.success - email_fields['dateComplete'] = workflow.complete - email_fields['duration'] = workflow.duration - email_fields['exitStatus'] = workflow.exitStatus - email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - email_fields['errorReport'] = (workflow.errorReport ?: 'None') - email_fields['commandLine'] = workflow.commandLine - email_fields['projectDir'] = workflow.projectDir - email_fields['summary'] = summary << misc_fields - - // On success try attach the multiqc report - def mqc_report = null - try { - if (workflow.success && !params.skip_multiqc) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" - } - mqc_report = mqc_report[0] - } - } - } catch (all) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" - } - - // Check if we are only sending emails on failure - def email_address = params.email - if (!params.email && params.email_on_fail && !workflow.success) { - email_address = params.email_on_fail - } - - // Render the TXT template - def engine = new groovy.text.GStringTemplateEngine() - def tf = new File("$projectDir/assets/email_template.txt") - def txt_template = engine.createTemplate(tf).make(email_fields) - def email_txt = txt_template.toString() - - // Render the HTML template - def hf = new File("$projectDir/assets/email_template.html") - def html_template = engine.createTemplate(hf).make(email_fields) - def email_html = html_template.toString() - - // Render the sendmail template - def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] - def sf = new File("$projectDir/assets/sendmail_template.txt") - def sendmail_template = engine.createTemplate(sf).make(smail_fields) - def sendmail_html = sendmail_template.toString() - - // Send the HTML e-mail - Map colors = Headers.log_colours(params.monochrome_logs) - if (email_address) { - try { - if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } - // Try to send HTML e-mail using sendmail - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { - // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] - if ( mqc_report.size() <= max_multiqc_email_size.toBytes() ) { - mail_cmd += [ '-A', mqc_report ] - } - mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" - } - } - - // Write summary e-mail HTML to a file - def output_d = new File("${params.outdir}/pipeline_info/") - if (!output_d.exists()) { - output_d.mkdirs() - } - def output_hf = new File(output_d, "pipeline_report.html") - output_hf.withWriter { w -> w << email_html } - def output_tf = new File(output_d, "pipeline_report.txt") - output_tf.withWriter { w -> w << email_txt } - } - - static void summary(workflow, params, log) { - Map colors = Headers.log_colours(params.monochrome_logs) - if (workflow.success) { - if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" - } - } else { - Checks.hostname(workflow, params, log) - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" - } - } -} \ No newline at end of file diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy new file mode 100644 index 00000000..78e8c65d --- /dev/null +++ b/lib/NfcoreSchema.groovy @@ -0,0 +1,571 @@ +/* + * This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. + */ + +import org.everit.json.schema.Schema +import org.everit.json.schema.loader.SchemaLoader +import org.everit.json.schema.ValidationException +import org.json.JSONObject +import org.json.JSONTokener +import org.json.JSONArray +import groovy.json.JsonSlurper +import groovy.json.JsonBuilder + +class NfcoreSchema { + + /* + * Function to loop over all parameters defined in schema and check + * whether the given paremeters adhere to the specificiations + */ + /* groovylint-disable-next-line UnusedPrivateMethodParameter */ + private static void validateParameters(params, jsonSchema, log) { + def has_error = false + //=====================================================================// + // Check for nextflow core params and unexpected params + def json = new File(jsonSchema).text + def Map schemaParams = (Map) new JsonSlurper().parseText(json).get('definitions') + def nf_params = [ + // Options for base `nextflow` command + 'bg', + 'c', + 'C', + 'config', + 'd', + 'D', + 'dockerize', + 'h', + 'log', + 'q', + 'quiet', + 'syslog', + 'v', + 'version', + + // Options for `nextflow run` command + 'ansi', + 'ansi-log', + 'bg', + 'bucket-dir', + 'c', + 'cache', + 'config', + 'dsl2', + 'dump-channels', + 'dump-hashes', + 'E', + 'entry', + 'latest', + 'lib', + 'main-script', + 'N', + 'name', + 'offline', + 'params-file', + 'pi', + 'plugins', + 'poll-interval', + 'pool-size', + 'profile', + 'ps', + 'qs', + 'queue-size', + 'r', + 'resume', + 'revision', + 'stdin', + 'stub', + 'stub-run', + 'test', + 'w', + 'with-charliecloud', + 'with-conda', + 'with-dag', + 'with-docker', + 'with-mpi', + 'with-notification', + 'with-podman', + 'with-report', + 'with-singularity', + 'with-timeline', + 'with-tower', + 'with-trace', + 'with-weblog', + 'without-docker', + 'without-podman', + 'work-dir' + ] + def unexpectedParams = [] + + // Collect expected parameters from the schema + def expectedParams = [] + for (group in schemaParams) { + for (p in group.value['properties']) { + expectedParams.push(p.key) + } + } + + for (specifiedParam in params.keySet()) { + // nextflow params + if (nf_params.contains(specifiedParam)) { + log.error "ERROR: You used a core Nextflow option with two hyphens: '--${specifiedParam}'. Please resubmit with '-${specifiedParam}'" + has_error = true + } + // unexpected params + def params_ignore = params.schema_ignore_params.split(',') + 'schema_ignore_params' + if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam)) { + unexpectedParams.push(specifiedParam) + } + } + + //=====================================================================// + // Validate parameters against the schema + InputStream inputStream = new File(jsonSchema).newInputStream() + JSONObject rawSchema = new JSONObject(new JSONTokener(inputStream)) + + // Remove anything that's in params.schema_ignore_params + rawSchema = removeIgnoredParams(rawSchema, params) + + Schema schema = SchemaLoader.load(rawSchema) + + // Clean the parameters + def cleanedParams = cleanParameters(params) + + // Convert to JSONObject + def jsonParams = new JsonBuilder(cleanedParams) + JSONObject paramsJSON = new JSONObject(jsonParams.toString()) + + // Validate + try { + schema.validate(paramsJSON) + } catch (ValidationException e) { + println '' + log.error 'ERROR: Validation of pipeline parameters failed!' + JSONObject exceptionJSON = e.toJSON() + printExceptions(exceptionJSON, paramsJSON, log) + println '' + has_error = true + } + + // Check for unexpected parameters + if (unexpectedParams.size() > 0) { + Map colors = log_colours(params.monochrome_logs) + println '' + def warn_msg = 'Found unexpected parameters:' + for (unexpectedParam in unexpectedParams) { + warn_msg = warn_msg + "\n* --${unexpectedParam}: ${params[unexpectedParam].toString()}" + } + log.warn warn_msg + log.info "- ${colors.dim}Ignore this warning: params.schema_ignore_params = \"${unexpectedParams.join(',')}\" ${colors.reset}" + println '' + } + + if (has_error) { + System.exit(1) + } + } + + // Loop over nested exceptions and print the causingException + private static void printExceptions(exJSON, paramsJSON, log) { + def causingExceptions = exJSON['causingExceptions'] + if (causingExceptions.length() == 0) { + def m = exJSON['message'] =~ /required key \[([^\]]+)\] not found/ + // Missing required param + if (m.matches()) { + log.error "* Missing required parameter: --${m[0][1]}" + } + // Other base-level error + else if (exJSON['pointerToViolation'] == '#') { + log.error "* ${exJSON['message']}" + } + // Error with specific param + else { + def param = exJSON['pointerToViolation'] - ~/^#\// + def param_val = paramsJSON[param].toString() + log.error "* --${param}: ${exJSON['message']} (${param_val})" + } + } + for (ex in causingExceptions) { + printExceptions(ex, paramsJSON, log) + } + } + + // Remove an element from a JSONArray + private static JSONArray removeElement(jsonArray, element){ + def list = [] + int len = jsonArray.length() + for (int i=0;i + if(rawSchema.keySet().contains('definitions')){ + rawSchema.definitions.each { definition -> + for (key in definition.keySet()){ + if (definition[key].get("properties").keySet().contains(ignore_param)){ + // Remove the param to ignore + definition[key].get("properties").remove(ignore_param) + // If the param was required, change this + if (definition[key].has("required")) { + def cleaned_required = removeElement(definition[key].required, ignore_param) + definition[key].put("required", cleaned_required) + } + } + } + } + } + if(rawSchema.keySet().contains('properties') && rawSchema.get('properties').containsKey(ignore_param)) { + rawSchema.get("properties").remove(ignore_param) + } + if(rawSchema.keySet().contains('required') && rawSchema.required.contains(ignore_param)) { + def cleaned_required = removeElement(rawSchema.required, ignore_param) + rawSchema.put("required", cleaned_required) + } + } + return rawSchema + } + + private static Map cleanParameters(params) { + def new_params = params.getClass().newInstance(params) + for (p in params) { + // remove anything evaluating to false + if (!p['value']) { + new_params.remove(p.key) + } + // Cast MemoryUnit to String + if (p['value'].getClass() == nextflow.util.MemoryUnit) { + new_params.replace(p.key, p['value'].toString()) + } + // Cast Duration to String + if (p['value'].getClass() == nextflow.util.Duration) { + new_params.replace(p.key, p['value'].toString()) + } + // Cast LinkedHashMap to String + if (p['value'].getClass() == LinkedHashMap) { + new_params.replace(p.key, p['value'].toString()) + } + } + return new_params + } + + /* + * This method tries to read a JSON params file + */ + private static LinkedHashMap params_load(String json_schema) { + def params_map = new LinkedHashMap() + try { + params_map = params_read(json_schema) + } catch (Exception e) { + println "Could not read parameters settings from JSON. $e" + params_map = new LinkedHashMap() + } + return params_map + } + + private static Map log_colours(Boolean monochrome_logs) { + Map colorcodes = [:] + + // Reset / Meta + colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" + colorcodes['bold'] = monochrome_logs ? '' : "\033[1m" + colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" + colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m" + colorcodes['blink'] = monochrome_logs ? '' : "\033[5m" + colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m" + colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" + + // Regular Colors + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + + // Bold + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + + // Underline + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + + // High Intensity + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + + // Bold High Intensity + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + + return colorcodes + } + + static String dashed_line(monochrome_logs) { + Map colors = log_colours(monochrome_logs) + return "-${colors.dim}----------------------------------------------------${colors.reset}-" + } + + /* + Method to actually read in JSON file using Groovy. + Group (as Key), values are all parameters + - Parameter1 as Key, Description as Value + - Parameter2 as Key, Description as Value + .... + Group + - + */ + private static LinkedHashMap params_read(String json_schema) throws Exception { + def json = new File(json_schema).text + def Map schema_definitions = (Map) new JsonSlurper().parseText(json).get('definitions') + def Map schema_properties = (Map) new JsonSlurper().parseText(json).get('properties') + /* Tree looks like this in nf-core schema + * definitions <- this is what the first get('definitions') gets us + group 1 + title + description + properties + parameter 1 + type + description + parameter 2 + type + description + group 2 + title + description + properties + parameter 1 + type + description + * properties <- parameters can also be ungrouped, outside of definitions + parameter 1 + type + description + */ + + // Grouped params + def params_map = new LinkedHashMap() + schema_definitions.each { key, val -> + def Map group = schema_definitions."$key".properties // Gets the property object of the group + def title = schema_definitions."$key".title + def sub_params = new LinkedHashMap() + group.each { innerkey, value -> + sub_params.put(innerkey, value) + } + params_map.put(title, sub_params) + } + + // Ungrouped params + def ungrouped_params = new LinkedHashMap() + schema_properties.each { innerkey, value -> + ungrouped_params.put(innerkey, value) + } + params_map.put("Other parameters", ungrouped_params) + + return params_map + } + + /* + * Get maximum number of characters across all parameter names + */ + private static Integer params_max_chars(params_map) { + Integer max_chars = 0 + for (group in params_map.keySet()) { + def group_params = params_map.get(group) // This gets the parameters of that particular group + for (param in group_params.keySet()) { + if (param.size() > max_chars) { + max_chars = param.size() + } + } + } + return max_chars + } + + /* + * Beautify parameters for --help + */ + private static String params_help(workflow, params, json_schema, command) { + Map colors = log_colours(params.monochrome_logs) + Integer num_hidden = 0 + String output = '' + output += 'Typical pipeline command:\n\n' + output += " ${colors.cyan}${command}${colors.reset}\n\n" + Map params_map = params_load(json_schema) + Integer max_chars = params_max_chars(params_map) + 1 + Integer desc_indent = max_chars + 14 + Integer dec_linewidth = 160 - desc_indent + for (group in params_map.keySet()) { + Integer num_params = 0 + String group_output = colors.underlined + colors.bold + group + colors.reset + '\n' + def group_params = params_map.get(group) // This gets the parameters of that particular group + for (param in group_params.keySet()) { + if (group_params.get(param).hidden && !params.show_hidden_params) { + num_hidden += 1 + continue; + } + def type = '[' + group_params.get(param).type + ']' + def description = group_params.get(param).description + def defaultValue = group_params.get(param).default ? " [default: " + group_params.get(param).default.toString() + "]" : '' + def description_default = description + colors.dim + defaultValue + colors.reset + // Wrap long description texts + // Loosely based on https://dzone.com/articles/groovy-plain-text-word-wrap + if (description_default.length() > dec_linewidth){ + List olines = [] + String oline = "" // " " * indent + description_default.split(" ").each() { wrd -> + if ((oline.size() + wrd.size()) <= dec_linewidth) { + oline += wrd + " " + } else { + olines += oline + oline = wrd + " " + } + } + olines += oline + description_default = olines.join("\n" + " " * desc_indent) + } + group_output += " --" + param.padRight(max_chars) + colors.dim + type.padRight(10) + colors.reset + description_default + '\n' + num_params += 1 + } + group_output += '\n' + if (num_params > 0){ + output += group_output + } + } + output += dashed_line(params.monochrome_logs) + if (num_hidden > 0){ + output += colors.dim + "\n Hiding $num_hidden params, use --show_hidden_params to show.\n" + colors.reset + output += dashed_line(params.monochrome_logs) + } + return output + } + + /* + * Groovy Map summarising parameters/workflow options used by the pipeline + */ + private static LinkedHashMap params_summary_map(workflow, params, json_schema) { + // Get a selection of core Nextflow workflow options + def Map workflow_summary = [:] + if (workflow.revision) { + workflow_summary['revision'] = workflow.revision + } + workflow_summary['runName'] = workflow.runName + if (workflow.containerEngine) { + workflow_summary['containerEngine'] = "$workflow.containerEngine" + } + if (workflow.container) { + workflow_summary['container'] = "$workflow.container" + } + workflow_summary['launchDir'] = workflow.launchDir + workflow_summary['workDir'] = workflow.workDir + workflow_summary['projectDir'] = workflow.projectDir + workflow_summary['userName'] = workflow.userName + workflow_summary['profile'] = workflow.profile + workflow_summary['configFiles'] = workflow.configFiles.join(', ') + + // Get pipeline parameters defined in JSON Schema + def Map params_summary = [:] + def blacklist = ['hostnames'] + def params_map = params_load(json_schema) + for (group in params_map.keySet()) { + def sub_params = new LinkedHashMap() + def group_params = params_map.get(group) // This gets the parameters of that particular group + for (param in group_params.keySet()) { + if (params.containsKey(param) && !blacklist.contains(param)) { + def params_value = params.get(param) + def schema_value = group_params.get(param).default + def param_type = group_params.get(param).type + if (schema_value == null) { + if (param_type == 'boolean') { + schema_value = false + } + if (param_type == 'string') { + schema_value = '' + } + if (param_type == 'integer') { + schema_value = 0 + } + } else { + if (param_type == 'string') { + if (schema_value.contains('$projectDir') || schema_value.contains('${projectDir}')) { + def sub_string = schema_value.replace('\$projectDir', '') + sub_string = sub_string.replace('\${projectDir}', '') + if (params_value.contains(sub_string)) { + schema_value = params_value + } + } + if (schema_value.contains('$params.outdir') || schema_value.contains('${params.outdir}')) { + def sub_string = schema_value.replace('\$params.outdir', '') + sub_string = sub_string.replace('\${params.outdir}', '') + if ("${params.outdir}${sub_string}" == params_value) { + schema_value = params_value + } + } + } + } + + if (params_value != schema_value) { + sub_params.put("$param", params_value) + } + } + } + params_summary.put(group, sub_params) + } + return [ 'Core Nextflow options' : workflow_summary ] << params_summary + } + + /* + * Beautify parameters for summary and return as string + */ + private static String params_summary_log(workflow, params, json_schema) { + String output = '' + def params_map = params_summary_map(workflow, params, json_schema) + def max_chars = params_max_chars(params_map) + for (group in params_map.keySet()) { + def group_params = params_map.get(group) // This gets the parameters of that particular group + if (group_params) { + output += group + '\n' + for (param in group_params.keySet()) { + output += " \u001B[1m" + param.padRight(max_chars) + ": \u001B[1m" + group_params.get(param) + '\n' + } + output += '\n' + } + } + output += "[Only displaying parameters that differ from pipeline default]\n" + output += dashed_line(params.monochrome_logs) + output += '\n\n' + dashed_line(params.monochrome_logs) + return output + } + +} diff --git a/lib/Schema.groovy b/lib/Schema.groovy deleted file mode 100644 index c2cad355..00000000 --- a/lib/Schema.groovy +++ /dev/null @@ -1,228 +0,0 @@ -/* - * This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. - */ - -import groovy.json.JsonSlurper - -class Schema { - /* - * This method tries to read a JSON params file - */ - private static LinkedHashMap params_load(String json_schema) { - def params_map = new LinkedHashMap() - try { - params_map = params_read(json_schema) - } catch (Exception e) { - println "Could not read parameters settings from JSON. $e" - params_map = new LinkedHashMap() - } - return params_map - } - - /* - Method to actually read in JSON file using Groovy. - Group (as Key), values are all parameters - - Parameter1 as Key, Description as Value - - Parameter2 as Key, Description as Value - .... - Group - - - */ - private static LinkedHashMap params_read(String json_schema) throws Exception { - def json = new File(json_schema).text - def Map json_params = (Map) new JsonSlurper().parseText(json).get('definitions') - /* Tree looks like this in nf-core schema - * definitions <- this is what the first get('definitions') gets us - group 1 - title - description - properties - parameter 1 - type - description - parameter 2 - type - description - group 2 - title - description - properties - parameter 1 - type - description - */ - def params_map = new LinkedHashMap() - json_params.each { key, val -> - def Map group = json_params."$key".properties // Gets the property object of the group - def title = json_params."$key".title - def sub_params = new LinkedHashMap() - group.each { innerkey, value -> - sub_params.put(innerkey, value) - } - params_map.put(title, sub_params) - } - return params_map - } - - /* - * Get maximum number of characters across all parameter names - */ - private static Integer params_max_chars(params_map) { - Integer max_chars = 0 - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (param.size() > max_chars) { - max_chars = param.size() - } - } - } - return max_chars - } - - /* - * Beautify parameters for --help - */ - private static String params_help(workflow, params, json_schema, command) { - String output = Headers.nf_core(workflow, params.monochrome_logs) + "\n" - output += "Typical pipeline command:\n\n" - output += " ${command}\n\n" - def params_map = params_load(json_schema) - def max_chars = params_max_chars(params_map) + 1 - for (group in params_map.keySet()) { - output += group + "\n" - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - def type = "[" + group_params.get(param).type + "]" - def description = group_params.get(param).description - output += " \u001B[1m--" + param.padRight(max_chars) + "\u001B[1m" + type.padRight(10) + description + "\n" - } - output += "\n" - } - output += Headers.dashed_line(params.monochrome_logs) - output += "\n\n" + Checks.citation(workflow) - output += "\n\n" + Headers.dashed_line(params.monochrome_logs) - return output - } - - /* - * Groovy Map summarising parameters/workflow options used by the pipeline - */ - private static LinkedHashMap params_summary_map(workflow, params, json_schema) { - // Get a selection of core Nextflow workflow options - def Map workflow_summary = [:] - if (workflow.revision) { - workflow_summary['revision'] = workflow.revision - } - workflow_summary['runName'] = workflow.runName - if (workflow.containerEngine) { - workflow_summary['containerEngine'] = "$workflow.containerEngine" - } - if (workflow.container) { - workflow_summary['container'] = "$workflow.container" - } - workflow_summary['launchDir'] = workflow.launchDir - workflow_summary['workDir'] = workflow.workDir - workflow_summary['projectDir'] = workflow.projectDir - workflow_summary['userName'] = workflow.userName - workflow_summary['profile'] = workflow.profile - workflow_summary['configFiles'] = workflow.configFiles.join(', ') - - // Get pipeline parameters defined in JSON Schema - def Map params_summary = [:] - def blacklist = ['hostnames'] - def params_map = params_load(json_schema) - for (group in params_map.keySet()) { - def sub_params = new LinkedHashMap() - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (params.containsKey(param) && !blacklist.contains(param)) { - def params_value = params.get(param) - def schema_value = group_params.get(param).default - def param_type = group_params.get(param).type - if (schema_value == null) { - if (param_type == 'boolean') { - schema_value = false - } - if (param_type == 'string') { - schema_value = '' - } - if (param_type == 'integer') { - schema_value = 0 - } - } else { - if (param_type == 'string') { - if (schema_value.contains('$projectDir') || schema_value.contains('${projectDir}')) { - def sub_string = schema_value.replace('\$projectDir','') - sub_string = sub_string.replace('\${projectDir}','') - if (params_value.contains(sub_string)) { - schema_value = params_value - } - } - if (schema_value.contains('$params.outdir') || schema_value.contains('${params.outdir}')) { - def sub_string = schema_value.replace('\$params.outdir','') - sub_string = sub_string.replace('\${params.outdir}','') - if ("${params.outdir}${sub_string}" == params_value) { - schema_value = params_value - } - } - } - } - - if (params_value != schema_value) { - sub_params.put("$param", params_value) - } - } - } - params_summary.put(group, sub_params) - } - return [ 'Core Nextflow options' : workflow_summary ] << params_summary - } - - /* - * Beautify parameters for summary and return as string - */ - private static String params_summary_log(workflow, params, json_schema) { - String output = Headers.nf_core(workflow, params.monochrome_logs) + "\n" - def params_map = params_summary_map(workflow, params, json_schema) - def max_chars = params_max_chars(params_map) - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - if (group_params) { - output += group + "\n" - for (param in group_params.keySet()) { - output += " \u001B[1m" + param.padRight(max_chars) + ": \u001B[1m" + group_params.get(param) + "\n" - } - output += "\n" - } - } - output += Headers.dashed_line(params.monochrome_logs) - output += "\n\n" + Checks.citation(workflow) - output += "\n\n" + Headers.dashed_line(params.monochrome_logs) - return output - } - - static String params_summary_multiqc(workflow, summary) { - String summary_section = '' - for (group in summary.keySet()) { - def group_params = summary.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

$group

\n" - summary_section += "
\n" - } - } - - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" - return yaml_file_text - } -} diff --git a/lib/nfcore_external_java_deps.jar b/lib/nfcore_external_java_deps.jar new file mode 100644 index 0000000000000000000000000000000000000000..805c8bb5e4fd43a12a5891eea5a68788309629b0 GIT binary patch literal 2291171 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�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

A$B3k~{RycObG@6y| zeyU>ii({30?LWsXi#@9oW*zQ0b!mkPo|(rr8zWfmMaWsfzfTFD?@`h6W@rrSRdzSE zw`rXVJr@XY&cORs$=oKzyM!yXGTS5`I__O_k$Due=|(^Z9Sef!92Z=B)r(uD9!OxH zJId3bOa@)YwVx#S9MN7HC|7b|uhUXt3EHLxe9>U~Px8C8(se2A04P9bC( zkFz|#ZjrB^hnk=H@ltP zUI(v-cU*kW8bmtjYgIcfw>8iUcmN9%`}6Jj<=s{48qdCFt@+*GHWqiTl3la}e^g5$ zbaq!^wz9g~YH#ja+iY%rU#!nhC~r4zwT-FaMZE((|#TF6xj8P^k5!c{$MGq)qwaPu8l7Lh6Db*RY~ZxP-91i1`+&ge~gSYY>vlVGcd1P zTCoCk|2n>k{4+wejjz0Q1k| zKq(bmQ8Y;vIR&@=beY&+qBWQ*LmnI`H^C@Albdd=AM{EoD_Zvy)HS>JBi*W$shQpY zEbC`bRtZ4{Yieb}nuSbs(OUY((GcO8%HS8{Rl4CL00wl)>slFuLqSdAXsq>@n)mk=@nS^z8E@PsTFM!GuBkkhUFSnXI@j{h;6x> zFm?x8i$E=9Yddju+C1{r%=j)_tBFbhE;O-NtO-ptzVj^c@E>8+ESflNPm>Gt33=duqELk#a2tCTniYk~nayj_b_ z(m!@dRyc$ZeGEQ79l}fu*{*9h00(|+bxqT_4y^ZSk41uFH%Lk@?@#l zH-5eXkR3DuZ9asKDoi`;gcy-*3>NNTV3^G~QvO?e(@m0T$-Vj9dDHDTkEhn5{o=#@n> z{Hk}kshW#Td$$@6b7FDzM_x8@l^4)x!}agrDKCWVM9j{lCM7aY=_E(#TtT>bg6#RC zbDIYKe4=AGLO)5yUjPmkEBw@mHGM_}?ePNfqxMrEzhQ8cUZoVhH6p9dK|<Vp4{djYG{rl=B={BjVkbBc^k`8@Cc#Grsg-wq=JOKpg zzNXfJnx>y1JYhMKNflW1>U%?I%zRV$3L``iDZ+yKYUUljVh7=F2^KIFUIloM_rs8V z)iq-uh#+@_^;~WZLhwq`a6WZH@RB?{((%Fo@f>cEAbSMsC_jn$O6FhAbxR$0>_KV5 zu~l9zde}?nFCRk(#{h=s#P6z+9VkLy$$vsRY+MoFhah|8@W{Ob8TRk5x?%>2z&(6( z5hUm+y%Y5mUrl^L8nW0H+r}HMy)YIxJv46AcW0j;txyHYUjNr7!nVPKdSZ?rv8ZH+N& zk2h?U6E#ACP;#DLch%XWZKN$Ds*O}Rb97^3UpZOSXaR%OJ~kJtCJ~Hrg;{B!%kG+C zC$RAa^^Q+y(=LC4`RonPu19G2AFND#gBOi+omwklF&DH_+|ad-9T|woT82X?#D>v1 zy0p!EFaR>xzp@_7Fm0beeEx0>ai>vB%k}3+x8z)zXy*LUo&&I4oz>>*AkJvbz82x! z1Ej#fiFExC{&mB%(sSW_eQfmA=@g(QmyDz{LEP&ZFH!?fo`R<+9%ETlpPciES4yd-3AgAk%|Cu z3jyXMST2-LjBee7h~E*Q3_Ic-w)e9+HmMoJILZ<%-v|BxN)V>(Yc=sili3S83usoi z+0DF5c)oe!^i?y5Ou&JJ52K<;{bH?+!EhmC7?}j>PboUeB64T;bHNGZn;CRxA|>(J z&@)aozl`~IZve-0$Y~^Y0S_Ocl@91Trn~V9yJB9v zZjonzLf?KeD;Ut0-4B(GSG^z`!7g@-t5wo+W`~N?P4t$HZDK02*_=HP3r6eN{nFo{#%}>~CoQtpv zBTVIbz~p-3Uf}%y+PudG>_lYhvk^B;C9XSAj@cplCf!w~i!0G~S#&?;NZn#hGxv)a z8-;9NiCzLZkJHoRnU3%ylomRsml_PqmBpo3jgK&~lz_pMSdvH3AuCj3lwN2w|1J-| zWT^>*uIUI>EhtS9F=65Gh$+3dkBn4N%1Fq`LZj4TP7#An@sMwj=rbD~yqcaZ5#*Iy z;;=rq4ig2)eF8UFz+7vkmsJ@vKaFOe(KHnr**O*9=-Ngt<5=U9a^iu?EAc4mUqS#J z_PMQxy!E9#(_v2e+wAYAgrir9;l(T=4=0sY7OGeHCZudb>W)HRyXxF)bv}-X9Hroh zS8mie0F^S*%(7&KQ~F8BIdr3;4xdzSr8&0Pd;_}1f}`0NvL??$Qx07dDxX9Mk4)2~ z^~%yN;MtD3g$$;JRyaZ_I&zHi>Rq;JQP+TOS${vk1SA)d3;UFUPTXk}Im73RDf@y}RZ!D_LhxqEd77RbM2^AS0b62Ek0xn=T;M57pyR*d38~`CN;*nz=Vl7)O;Nun;G1$S|a<`FDG}?^r#RO)~W+*Vr(v_|_>y*fGtMwSPo}d&B*SuF?E|c|3 zeF7eIJ!THFi7f@c{hnP61766 zb%cefC^Sen+kwru&#|!7M*_5!+R!FTy(kd6lQD8m>N?|zF#qT zf=4d%?m*1Dz%h7ANhfFVueyvYn#RR)N~Yr35XEQoC{xdbFjh;8Q^}L+yrab507;)@&Ap<0;&&mg_#|qQFK9XxDGr;f=NTEM zno)FBSV*eUwwLadZK;cjmp>FbP0%phg&1fI77S)i1~Y3+far<99ls$Ay74Sa(t@m* z70-A!0Amz?DS&b6yyT^#rj3ql%_>T~cg`-oI7?t+e5US$kK;LMA}{Edhv}yx2TD!N zadT_J)TTgE%~}4LjBzjLE;LbugS(}@?Nhqx+Gf-}*`r(NEhiC4RdyybcG<%SGwZ0+ znpb6G`fgN#jx5M36@4?+!o$+1Ioh#U7l?Tq;2+lfo!H#G6R|FOzRe+iFJSXHKpDp7 zyfd*ba=y(6elGxXvVc$%DZjj#iBxLY)a+w4Bd7b34ViD)(!J0NH-mSc$4^IV+1Y?+ zih155!0yy7>-$%!1M@H6f>dlj>Zej(`)Li((=xnr5- z#PabnI}^r(*-qq5Rd!~?gZZTPJCB1U?RX)XYsk*ga(1@pjeBx$@y7gdmd2K5fpGR# zQM3O-)3LZWN3Dt=YE@3YH%ZOP0kuZ2z?-dZHIZ7gPxMV!w`N15+1SrB?<-2Q4=6%4 zAnfRvY3fTM>2H6$P3T<0qSV-P$26~C56{W-Cc$r}KNzlDD4S5` z**gLzu4JA+NO*d$E>r^KTsFz)Bl!5G>U;I)%kKi=!eYNZ$`RY6V9W1?OoPpo*n$)G zXA9#dIj|r~neUg-lM+!;-Q3bR<@G!mpsw5=RCJfeK650#wB%~B=hub-)6#*``JiA2 zw`^J#8bwQi%)7ATwnCpxHgMvs#C453HesYVCH-K~dLGcYr48}*Fbd~DP#WjjXJ3s; zFZL6j!oDot{QbbI(m%`@-tBPL`AqgXIx;@Z8OrsaL=$KWd<(jXP^?0+7H}$`|D4=n z5>GRh`(yVaVEA`L*Z)H>?&4_RY++|BYGGn+{NDxR|MQps6pW{6DQT(v2*#s`i-YYg zYzj)$HHR~$LRwc>Qz1i$lau4+6YY~)vBya{?AgI)ISNGZyzdt1_Os+Tk8b^OT4HD2 zy&hN8^8TX7T7|^p<6MkSf49+D)wR5EdYL?Y?D2g9?_=hI%m=w;?GMQC*@D=E1p#c2 zd;}5<)bHo&3)54ELmUPM>r30~(O-)(`X{;L1CRkz3>4$jjDwc~!+|UXR^yY6Lz#Z2 zlQeTpuCf@3Zp7MVycuWn!-3N+9eTdi-Ui#92(LWS6! z)>)dmOI5cAZUOC77PA+7+sKe*?}ZgQj5--1gSQHjP0+wrs{>j0e`8tVt2WXsF;*YW z>c56l=(e(?B~`VQ4-{Kaa+#XP7Gd+92C4Uh`BH=4fyV{86RIPc z2bv5-=Htr;st72^Bc8iUpI4h@GwYZ<_>fv}HIfvy;IA40HxST+r0OfxlhlL6_M;?& zYz3C>SDt%}gt0sBttci)a`+7^IjO{Qd8nmPS{zK(=`kLhewX_Tkq&NrH#*c%Y8};h z{#^MAN>NNYO|;ayJ1;5}FS#U}I&P|3W3W;$QjG_aYW0fc@j9mIIsT=|vF8AhV z8mR(4V>KJ51xIw)pm!>kdHm8#habhCC2V~u1=^jrCyqbvFEouJoN4)Tq_NpsW=Ro| z9wHJhf+G441Rjh@bFk_%jQ^#utJ+6HAr*n z?h#~2lDvqukK4(?^+mv(AAXU*dr}p#*-QFLZl9fnUeXVz(!Ug1KiF?!NA&&@>Fg63 zTH_`bPOmW}g!4WY@%QG&8cC@%ip0Tc{}UzL=Renl^%o^~ZXV+e6lOth|KQZ=wMTF8 za^vZ0mC$wk8F@c^=2i(xvjU}Od3LpJK`&-|$RR?jPc4wAii>TM*@Yg=zNPbZ?l%K( zj4zy>BzAA$r;qX-U|_X@YIcfoiH621_9cQkdrRlDxYBbzNr(I3ymPwVBTZnYW5Zby!OWGb~8=Y*DF%6iGf zKTh4PFW6-oX6iWAva1@a9I9xS+*MgmoR@>T#&xMnIJ8jn;D^XZ*@)r`KGF(^9GU&t zGLE_!)C)q$mtZe|XqBF01f1kaft8`fRP$P zT{JLa3Q%`Y5}xh|Wz;<-VlCZWryt8biDyE9c!Meo8OZ_{l1RtEmr1&5QV3;U#Z%+x z4mFNC4m(W9V?_SMT9DzsvX(|p&T-$Aomu8wb2piViNFjh@_U%B%a7ao>xvDwo3qTc z$uc)cZHbM;IW)}l#}2BqwB)#~>?G;jDID!^D|2oUA~aQ9N%0V(t;mpiY@Evc<+3rp zgb6WMJAviMOl6f}zRj%sGokIK)~O+%K}B$;>ey6!$yte&!b-BVZBp`LGt@ABfkJ3* zgO_7i=ZCb^S%}HD79}%L(kOhPxLi?=24b{CS7KS|=5GOqBQftgz-YzZz_KFfC@r2w zUjmcfDRqQrRdH(3o}fKkiCLJ8PXZa*ym05NDdunvGb_Dhnhn7z6%mnb8cgdMhQSD2P;3Jz0OOE5KDnP=gtGOKksudv9iOu>dI)#ZgzB_?aN zCNfq+;lRN>3SR{KGA5IY2UU%5&{H%e%5J^qsXT%fk z&5!Yp&AprK&}Z8?R#Zg0Uj)I3eeMVd0q>9qLGF+Ow@o;E(1LVUo@F~~+d)$3xhJ!24B?Zfg*dibPpO85XIRA{G^TXc4B2 zN^djljFhuYVGEUL4vi!x>Lz@hDn%Bh$gS&328ya7luC^TM|7tweV1&`jfTuxaSgZ3 zobBDNy>7CLlM;wcTbo_l;Z3BfG;p7-$}Fli=HHD???mA<)kRO$%*)5jF=?T<&@x7X zxLodri1^%2{MEpJ{rJ;BaIuBLjnUrcBsQl-|B=cNUP#Q;W>f}Hl-J_DiLBeL83Ap4{qV_l9ITs z9P$`E&?cs8bYa+m2^NR%XES4O1i0hL=w3N3i|X&APHe$DgjxP&(2!NF+!Udb+9Tp< zdxMa`tYozvhTTL+>=oO;=9zqj0^U#vZe6%K_LWTpZJ5a+v;nFCD(K&l8+h3b(%URN zY@OdLkhepqDf3Ybs|#{m;EVLKmfOPynCol`pTCWIS!N#+*4KBD)rj56PI zM7}3uHca#WE4|s2!V_YRr|iAQt7w7Lr?u~dQom*ir5g$V8jkcyHj$oX78iBaM_nKF z&sAbEZ5H%p)8~)b*zJ>V`ID5MDAuMCUQHb4&_Obi#NybTDD0peffjDQQ3%c?Ebhjr z0$D}eF_ZB9W`?~hsfaUY0fV%9T8sAtDGis8gcXsi3Xv<<&UBJ@tauB8SGN2L%i+VS zc*YmnKYF7wEyrB!KQX{*|JKz(@xM0U|8f%kBh{T)+Q8F8!q(zHx8oF54R5k`yZg20rg%^uizpoA^x6|y5gsR;}CddUx5!e1|Ndu5P3yjnGcwP(ZKUay2W3y4<3T) z;Csbi5f7$<>)?AO-6L*U2G=0=@V%36X$IRM_6WSwZg~b@An1^M`CkbR#DejVd<9>B z^6P{1#%`fL8AGvkImQpwF#l>6sTIA-AosP*CrzH6E;)@z^Qz5~LZNz^(N(FWn73iG zC8$slp~9l(be3uU>2JN=m;G}-x~ihfqhJjZtA@8Rm2HCO^A-_d*r}X5K4+3tqUbq0 z*k6sejFk2_Q?fbRgsb5kY^pK^U5%z|_#?u8s}ZP`m;SfA>}7Sxc>jKP$aS(_lS^@| z+1ch43Kw}rEnxQ#4n61B{?xN2&1SVBxN_U#=Z@wCF zmNGU4u=|E$*liCLkuM#(L)SRUWn+~pH^AeF7&B-Zxb-AO9H?UVj^Mhx;#ajPlQ-l` zl?t}?8L5vzR9sMVED1Xf$w|v1rJpezCttkV{- zSjA$_RPRxf^>qIEtxcp+bIH)@u%)%)hD&jre$C=saIlr@q!OmNJzIuJec21k9zA)> z@geCk0GFzsu#mBBfs9diN^WPRbEhK)rjWjct6yLPM$^ZArrdI-Y}<8aSjGK^joT(U z+ju0R#yhC9YbSA17~2E| z3i(b$LbK@!X;$?L_OqS>iVt3g^Lfcd`S4HfYSrWt#EfkM(^b)?{i6ahSMd#PMJg-a zk});$7?!1k(gT)RMFmCQw3+rSr>@YLDx}d;q+!rUQ9<+8MQm7NUo)y{DkM*HRtcbU_D)JB_g9^)rD$9xLTc~!^*~^0e_8QLmn#HI0Nu!R*Z`PJZLoXJiG(BzWO=&skD;z{L zri{O{6*IFZ6^`X6c3IA4FJ`lU9Y-u!6l3_=^7PIgu=aSuxqi&gMxMC43|MdHYMa@A zhPIk^*fSD(ruTIx2mj!NQS7;7ID7AK_t@BN)ZO{~&cN&aT^pb?xI zpg?Qf4D^H$T>^%(6 zAe%F&*a*06xB_&f*quLnl+z)0>4*_KU81{Ww1Gr%J>}?KwfGSTLqOUvu`a5TyNGc; zZRwpFLr`Co#;1_+om|3DpD^w>Du`70SPd_O84i-jWiz?P&|x%*@)dP8cV_ z^DAW~wi2r&0UpE`!DNj93#BFkL#tjSN+*WQ&|cXV7vPcy9@g+sKcR91h={CPuB_^= z<}T}6+F8kYt+hV?`u_gzme`dorT6Cj{Jwed+I!iZp7pZZJsvrdG@r}&BylBe_v60%1AnK*cf>??AxhU_bJ(1z?QcJP9{ z3(k-J#b3e)O8-gm%P+J~{-TceH48Kh@YcfQ>RT=G9#UU>^A+M4Z3H&W5@pek!hclu1nPYj^{;;aF^?VTLiA z*po2HWGY0~V;G@~n<76o@OLD)h!R`#Y?`X6n)o#fx;5};99>Yw?J9?;<5ftGR7z_b z=K!~EwQ1}~{7}`~480Z?b5EI}su}(?^b;K;)0A2rUp zFP>xKZ0Hwz8Db%xC&vyWMYxl4uG>78B?1AOPFK4zOhne0+B7g+5f8-_1yLPMEKomd zT4QMAU>k68uIFOPIB6+4miVE|RONjMSNbIxCa0e~s~g(;JBtI1&g|D~G;$svY7VUv z29DzX=!z>;T3@-+!N*8m;Ry5LM5wbl0)YVVHSsOy8BvTn=rY<$eNI&Ui7 zKbX;KJ2-Tq%$On$6GOv!0aO--Gv^#CsHpDFd-3v;Pdku7t4ULr3lP$n-+ zAY2eANP>-OKT0t=*5hjkAmc|;LHxT*|04@CaVshRDh%!dr7;jAW|pzS3smrbf@MV zcey80H|QrJcur`i?A+x?zxEg=ua|!grBL_tq%elu1K`qE2qupei7U)gd~UGpAYv!n zBe4LnOcW_wC`;kV^qVG9wrG}|Gs;tW0j*%S@;ojdSLu=U^REMmp$8|8)NI5BMGiO8L|D!^BiBaYu`gNUwk)m4y+4wM0ok0ueLfP$ zh-|IkJpx(dqUVN%=Z|nN7nodECoK86W3!#lZE4=4 zQ!(Rv4K}#YiL-5KC{n&NQwjPv54NPliL)JQanip1f4qyZO+`=8b!c=-`)TJJ z5yo|Tdanb6=>?+8Fcx6y1m^x`UVaSOJ(w84I3(|WfG9UDTFnY_D;QfvZZ$VZPHB);xKPgo8Hy#VFsfyZ$i_z%hfG) z_kBLS^OW|*D4Qlv~N8@X=oF#)2|ERq4SD*n#87VV2AUPdZK)uHLZ*9 zdAU?_yakA&(yvpgGqr>8GCb6GCr~!J@^}1vEFYSSd3)7p0OTW@9h(b59>o#gjvV{? z>)!1L8uu`EyZ*(AJF^!^^U9Ke(o&D2H@GDXrcFre|HlyO3ZBa#Z5^mvbWKW^VMp-p&)KgwiKjDH83i2fI7QZz9zHZZg{`R_DnqLkbq zKXS<2FGYTNWp5(hLqJy6S_aa{Onqk3!N?u)Fveo%dK~FjE80(hFY=>5;RF74A|EVn zvpi1MGJ1QtdcUxZ_5>#eYeRTKo2eda9=S0Xho@4kLa|jWclh5Xm9E1J)N8lP`&+yw z4_Z@w4CG|1piw8ZCeffvFb+W03MKFsI3$jUP1vcw^E(p(sbecJl&c2dE(hNn zF4&*p{G*Bo;#2f40Ka~n0sgxx693C8{uh_>AIR4waYA;89zJwTJ`*rR@!1Eg1&z>F zJR3f$e3=qaL=ao%cPO$^(Xznf3j6IZZe+tlY4Z)(g|jy^-;cJ#m$)^yU+lp?V68ao z4*F>V4DhGXFWt{E@Nm$fR4bT45z^M?Cf8u0wjgon$qmw@N=kEmrVhM9GX-o_|VjTPzneiVen{$!!in1W~XO zU`;Y{C^gg;A2-uDXBm?W#S)7pq9z%N=Gqa~4v4PXv@2F!klS%~4r>J_W<1Bx`_DzK zUvrRshF0l@;t(EDqHQzDl>vhOO7;xpbx?IcZYy)wex=f{yhYLFN|&pw1@M51`JpS3 zuogI9Zk{QAHmM-dT}DO88}4>c4QK_u!6JeMJ>8_ea)j_T_cgh#A@my5Kev^Yc7{@2 z*}c%PP>A%ONFWc#y#n{rrkVBYgZCMD4?J*ya-ak7pGLqo@MDw2B8)|d90EHesuRj0 zObuHcLOZ0gi)EA1_7|QYQft-rQ)db&M*Ys1a#}p(Fh*w5j3`IRpv>qBX zMPth{)NJ`GUq!>i(et?-!N6;#%xPfaeX3yU{UBqXeLaqni#^-cUd%Bm8NB8B==j+2 zy6ND9h5LGYL;J-JkvBmPY>J)>7-gJvY=f9pEN~dlEK!?aozN|`NZ29kC?x8k7W%U9 zca2_FPUB2S{8x*rKlg-9)7uMsGPNG&O!x?c!Pg20P-V1!@`VPC&rZmQB! zl_aC(;yjhT$Wo+fZDR>YjCk3L7iuuk2Zq<3|2VTw$tZHpp_RuVbK;ZHJvy+=CU|L!C&$7 z`_F6hs%4uZ533!Uzz^n(LCO@@a!Q|4tE zqZc4BZdivV1U401)FMxvEdfHC&~&A$w^dpWE?jCFt{p~0%x_7A`7Qr^u#MY>H!p2? zj4U3&mtH)a<>olMMpNU!Lduzed2r?+sB>lqddk)uk&ZTA{$^n@C^w~1u(#f+KG+sI z>a5^017WA{{&*6HP-8byxjXXF*jaX*d9O4@TTubh5_H+2cjkr>3lsYqBaDElG0aeT zjB?qr=5&q?v{GFfC9kO%U8&q09OLH#Zez9qGDKS zb&wykl>3D@Mg^*OcWt1l*Wqs^zfkI|xzwve-|Afjq%H!I8);5h)y0Md)3~55udH57-PEx882_t$}PV+XljZ9}Ziu&b=M-`MXoq z!QM_i$(97NI`({Ri|qG2u1~|sV9C`3M=26fNk6=5F9H0%1$zIU*}jH1uj~j&XaU|K z{pP`0e4g7K#Bp$x9zXBJq0%^A=PUEQ6s<4D8wy%qr1$7Z9YI`&JNBCkTAqmS(1;x& znGSbAbXVBi-{ur***o{xF$-KK?%7-RDWlXe4qPYhQ;q0_2}1_|EY1FeC~*huuBb|r zPg?N1g}nSrugcwe|4k@m%Cv<(K!f%`Ka%$TKCb8lUqH9~kFHrXg4N2Rhr&FjeV5I1 z>JN?}-7^?x+IJ2i-7^|z-Fv4<-Ltdv?yIxp?peBpj^i_EuN=Jsr;RxZubjPnr;#~~ zJIl@|v}-7_BNO5a)Bx(8lPwZGXtx@UFe>LTq<@I)=3M|^^5YwuWJSYyA3G_C4K z`7jQ}sIl>OLVdR2|E@l4;FWjIfp6WWy9M|02fD29ukPKMFV3yK;H$>+;I>13`1$LC zf(1f*qCbY9k3;9eV~|6?lYklWb)K@_77qrKw`?lyVl<2A8BBq`Nuw}zXq+|^3%pOh5UE>Aol+{0VQmmf1Hm7*8g$x<)~RX zYpbAq%^I6t8#_LjXTjzW+mK!mB}ptI&=eDkh-aqCW-=!fkU1@JvDpYH z#4Cb8kuQUxm{UnANXZD06|Ahj=ZA|ZR|dXne)Z$klJG5`7}2O-`<%&=K1fpXUGtt@ zb@l!I<21`#m$u8{1lzyz8We261}wV09uXd_gXr3Iz`q=#Kx;(J%yxxt6vadBjCQDv zX&Y@+hxJjv7qjI6cFFsDbj-dC3vY}}eS5_3#`Pd++5s*Ki2B;42nB5C6`6O2rO5*? z>O*6D=XP zWDAk4H%6SpABS3=ftDh~SP6F811dli2bDPTg_=s-IP(UY0$P9t8u?Dus1XIMvAV72w`Be9Rf<7xwh!!TjP~jaM}l`Y}9A;P)_U2 z`hr4>uz3y5o;xf{{#zXtqEwx@f_iIDlj4Un6kLA}8SB7V z0`)+XebJ(Xv+BHJTxIOTIA!WslS@QkW}q4W%pNqxlOJ;_^!pv$j=6;5AtgI=`Q&rf z*ttM$Fp2SJ9s|U3*#kRrOeK+Ivk)Ezo{G_E=U<`U=x);cl~+0SPTYtvRh%E5kc?T#Md}AaSefyhqca_mo+n*@DG)F<}q(`c#eFIjEx@PlsCfxyh6R+U5 zN1Hb$SN%54b!M}R`G{&kImC-uBZ(Vmv?f^`TnIGm`nk>tT!~@&XG2dY1_@r|CC$2U834;*53hK zVo6{=doPA|i3O#&x3E#AZdBGPfUSFd zq8$rK$E@D%yb9=>&}(c~uQV5}W&`+!E>Km^_2QUrtazNfhqcH6W%s9mrLI^AVhfVNXfJyZ- z@+J3Daw((<2m~gB=yx80Fxk^3A314AdM@AFWOH)>*+$y~+Mm{Ca>RN%nbg z$SOa%1Y6nupYEjw7O4g;K4O3-S(>NK*@7N`C^pX&(^gL5tYzj&nNf)8el=DFRfXT= z+se^6LM3YqAs`USh%bYz7r>I;u9cpf*)$&2buW^1#*Mlu6Pfp`hMq?a_nbY8#Hcdv ze`u~+(|MA!_=xEQx{*>5R;m__Fojqqz|SM15wAueqYFcttMUuryzHTzIctv|VRxgt zE*8AtKOFE{U>Cez5w;_a9x;7U-438(_W`d*sEi#laQp2NR<_#pkdNZi!@z>U;37Re z7a=?4tD8zaF=onxB-Qd;Wu*(>ADxwLC877pMO>zZtJ~mx1=%Z-AqI%#lfa&!pN^6v zIwu5a+T=$_DdCQxwb`u%S=Hl9l0!t4B?C%NC8%dXwTb=cGX3Rs`xCAEtAN|B0XrW6 zEt>%Ri2L)T`$xNf>9OwH0lQBDKOTcDn*i;S{xIeFZlL|C!1K<_W&pw%*@fG{){|55 zK;=aIJQnZsb^w*-$1K)R#x<4;()U2^8;w{68D|()cA0~Vx%^6iQ?dO7q~-wBcAmIY zz@_u^0yKOrm>nqQEl$24+^&nPGKCy6@*}mwpo3xZl${E+p7rXFg&OvJprsOU2oyFX z=WG&5%s3L?HCHYkRY@3HI=E$HzON9}`hsygN74-M+_Z{wY%8>Sl2nTcz|%FBY$Avu z)S?O$hUJKu-iFY=4PaFvu~@>`S;OoEtVU5N8}v4gu9RF^w1uvaG}{j+y+d(}ocaFV zVR8J8dHy};#*CU@Qha9`M?yQ|TGC^Tc|4It^-)Il5l6^FNsne!G_S;FTrr?zLM$&u z7ZmJ(r=WwqGJP0A+M^cyI4%)O_EBfzQfq!w3z&|>5{gPzqb|fJ5m{f^6Ox{sVTKO4 zB!_?&ZAU_>WuWh4L-K-1&5cC+Quyo%DUNC8)_SBfHE$PxEj(dMTYvqv68`2~=o8q4 zn-l!bwSH%d_@XN=0E-1tjOb0Dv;uc_0V5mnN@AdQ(PFH@*6kWQXd=7qRdphJVdqX< z%SBj2bOgF{bNq%&j_@lK{Di{2vs(`T&KLMht9JdwOZJUgOf603j`dDv1;b_~o3uux zv>v%#-!5-R$sZt1N(mH*a)jDQWWl5mhyo%EP$AWzbE|9WsEB=cm8lAf_{|-Ay1ind z1>7|Q)mDRf(u%3PiE7kf1EB$pQrhmCIXH*hY5^HnM2javq%aTI%z`8WrBF>AiLVhn zV-^1XPl2!uy9Avs#IIjmsQ(V9{p%(jvAm<5y@{i<$A32I)GVBkP2hb=*QRAjkMV)U z{ei{po3J*31ppQBsUfVT!3Dts$)y{IOb?AoXJ=1udr@w*5Kx|)R1H#~Q&Y#xsy;!! z0O#(T@W{K&=BT@-eAjbxeLp-p_k8!RrF}c@cH(}$--blnupbDak*a4WGejscUJqGd znA!J*Hxc5-6C4U)AkH?p=BBBvma1o&BA663wBsYmM2|p2=?qs#hw0x!IZO{2|M6xK z5qoNFiZ?LGoxnBinyGU*bx<8wZXh<)7&ZdLJj|@A8Z9;*bD84C;2`ElN03Kr zoo+A6{6B=fWl*F4^7c7{ySohT4#6D;cXt@v-F*gk*Wm6jxWnKuxVvj`cX>GH>~8Jz z?EiN*FH)&g?#f-MRCj;7`}$lHg;wMZ$8-!Y_LXlZ%^whwUgWLBKh{f4heYbtRS~(L zGqHFIc~&53z`?9;4fWXa!8ow4u2Pn-7}w{re8HaI29~5*T@>I-;dGSbgx*T+tR&E# zRe=0?^0+2tdJV1;_&LD&Vw!cgkE6=A+z=PKBtSG(=2MV!Z!Np)1X)68N^zrS=rIcR z6<6o1Gyrik2{|^c)dE#P(a{K)xZ=^?{eq?Q5Py?qhvTIyRMedjDW7r~Wt*O2IFJHq z(-KbBE)CJRmraQ|r41k+QZAT=rL!4Fx6Tk$?yVmeR5of1_mE#c?r07LxrE+A(Jh9nr^JS9RtLmzP za0xl+N9Bu`w{Uxbb}0Tcb9?DArGvo)-3L*Q!S=?3d=0tjQW-wI(o3^0O+FXLGc8`QRL$Ak>KPU^&?Yq$8-?2|O zsR30o*J^Hw+1w$G>S=@AwSu(Vb;j#toFf5InE~l|z6iFIvMX68b!`2Tx&|zRqI4E} zYxuV0FomUZ+{HvK^`}lF+x#{R!Ke{ccJ&w<6&)w1vc1!_{Nuxk%3Imdv5L>9bTvST z`WVf#2q+&JBNwfz1LYD*}0P9HV`bBpb5{>Vtwq;x? zvQZ?){gHK;3+H{p;+J#jGdD7R$oJeGf*Lbwt0n4aG*rZ;Bx~rNWi{!LsyEun7jn

z!D1Jl9mXj*54L*|E>|A@An@ z9HNuFkOQ7gT%N6_4=c!Gr)8(k^t-<@c#64BJ334Go=Cl@Gy}vW^xUKLX3kZ8TZ8yE$kExORg7-95&%6A|n?$lc7Ue zI2(Grm7ZdSdX={0SKIYSc-v`du$hR)$oZ9(w)v_m?PhiB_2Xxa_s!OeaRK`;Z|o22 zXS|1>z!dNER`;V_1HnfWRJmlT_I@X1*y&R=2D|BFl2FZ_{oQpV3jbBUe7(w@HLF-I zVV_Y7o;9QBP!|_;s))pveUoOc0a2ye1q%7QDdy?1@K~J%M^`E;y-b{M(+pmGMxB?= zCr}ev2YKGVghc;{su>w~!9>JCOEF<99Fm`+qN0vN=f@_p=^CN;P2Pr$@2qBKsu53M zZEo)oocl8#P8e?=I(IYBpMlx6#3e@R?zA&H)`psen>Dutb*DOA^UE{dOvyTfF&^&0 zExh_Rw08vbA*ytr0hQe)>ZeNUV|j4O{v3Pi3@*?O`qW z*R=fP-Td3S%GH`xw9zBloro&vW+WyF&{L502$fme&qI<$<5?e4XZELE{_jQni(`#HAiyk>T5wDg02yUuWObCwgN0?$0%HeurA8y*ozeGCrm z-AQG7R$Qp|7W|i6VSS9<0+I{djE&R|qf97rWNE-U^X5<@8 zy!80>80Zm@DCpIn)1R36!p8X;+|D=9=K)MK=kiR!&vp*)_Bx`y;#=(aGZLBE(LXYp z`5K+r?RF~F(2BUjzJPO))4Rb^wdIzSAqg73vGkoQ+MDwx9MlrE*hS`}jWQk5(`F??Sd2s9AK> z-Q%0+w_-27A-R@iRW~W2z5I>%B6?jbrTzs1j;HrK4j^uBy;^Y<*B z#kRPI2J=Js{b#d9fB-H8Ebm*CpDHlyJARz}hq8f5C$R)`gOsA>d||_c^tp(^oRC2k z%bY2*zyFj4XtiYmruk(7Qjx8lHjCoR*>EK+WOQrm_X$}E%J|V>=lkbgREum~Q+bU~ zmP?s!;C9kd?QE%bc|`ustO%Q=Y4)HkaDT`jj^)KXP z#v$@^0sIeGwM2Dz+R4tsBNm>;nLND;?ZKRga#QF;0A+y;uoQKKZL`fTa2i+bPNja1 zNLK5thsAQ`rW^*NA_YjU=QJgapVTs~I-Eaz{ z?#5p1m>nF&KBkxuBhkv(Cb8+6mCmW53ARAhN+RlU9{TQ72!ia&>g7$$+lR^_ZBHz` zPQ!xPl7(C@%cO9xpAwXT_%FSNWH|d^lq)t;Fa(LozLma=8Ee}y#ISr^coE(xiGQX+ zJF4w?4OJJl#r=sm$+@6VMk=ZA6`#hY)##G!klWppmymVoB9&*qzd`lO|BRX+XMQ6{xZX{G7#D02wD{}EF1oMQI zT3z)|p_#Z4=4$XrpmUilw4)l@d|tRyW(BW0^mL{iiV|h2NHg^UNqUWP!uJ+t{U#hL zp0p%FDCe?<*p9?S;R{*9=>ygKrwsIhSy_Q|IY%o<{KRE!J89$W&Ey|vAZa5Tjx?L~ z={VfyVhPSG=2ie(lpXSb4wVVwQhgXVk4{6@WvrE3)T!cRJ{xbeK3(}F9)rUgdkxzU zv5xE}MS~V}oq!A0;49CZUM_-Wj?w&Cm0Li}QqXNmm(UNf;mI!ki7yb35T#2?*x~A1 zbxO4pr7-zKQ#+zqR|sbGsD~ye5|eHH5^ax~uL>nYN3o1o;fw-BL#WH-s+^Eu;;~GM zMCYJY7-LCg!8YGcrD;n&V%Gllesi8qDf{2RR7d`u2|XNLO5`ilKnLAwlE(-=O2TtiqQ}E8+l}TDq!%~rWZ*QCN8cuy+PCMBO3*_a z;mWQ2EpHT!J0h~Ejh;>GRj%Y?=A|u-4jN?CML=$$JCh039>u2ff&$AC^cX3gq!e-S>UQ3l_RZ zBUSCsl0Dh1t{-3P_iVDd3TsgKmL(EWmK}YIeg76f$|+N3E|KM(M_3?CVX}_l{t;_O z?Z@WRID z;rx_(k?zeh`U&_LRz?$ zVPpwBc6>*h6QGbbSvv4bk@}N-!!XJ`p$S;9@QZe+XF56=vAcHj?J>p~v^snAsL1tP z?xn}i109X|nk=eJ)%E#akD8K+qKPUgm@lDZAi0?eWG?oJ`Vk7$j&!{C1C3T^2bf~y zI#OhiFP2#sOW_ln>gziB4D6W*;?}L(v1`Xq@puI_$yzDITz?3Zu>l_ z_Tg<#YkQJ77@bc{`NX%%ldtO$2$*dE$2T{aWLXY8&&;q?ef6g=duBHR9dL_jX#*B| z$FRhayi({Vr8}InBp|vQxon6;g1k0?j2O0EhRdmkeMRe!j0<-X)53{zQ)>@0)p7>M zsZbAzAZ*LE9=H1I#AQ2=gXPg0c$rUp>bF2>I!>a~NW7|bU0b^q4se%t2OV_=v#eHv zs&%uBTrXbI1M#t?QPBAD@Ph;%!XwJA;zq+_;dh+y-Lbv{dzY7Iu(a%*B&wl8Q`H)J z+cVoPw%=@IR@cecPLFMEtRjtb60Dicmin=X)#~Y4m|;h#2F=q5Q12Um%&;~J{c5I+ zyMxlai&<|_8CJU>*c-zp#t-ndHpEXn$680cR3mSzB13#_R&ZCDuV_8$ zPlM|t%slfZe6+`}Sy|3ekRU2ik2OjYNz&YYue|oAlL_7R6U9XbRnB22iKZkIc}wp+ zh~JR>oir~t3-Uz;N(Y=%NO8`}JIzu*t;b%2H}LA8OL!8ObwKZTO6@}{ z4bEfk8Em!iBH#Gu9^;+&+eO^L zwv0>Dr$zC+HwU-sndC(Qz=DXIC!*o2)46%2`_F5%Es-6fTPBidMzMERioJ&>5nU;f zHIPVkXdHgrCK5^P^zIh^?zqU>27gj_C?BZfB41GRiR#jHkBH&!^IKRB)x2NIhzTE@ zZ{N`QE${R~wGR}{mFIaQpb!!c)JRPUF{6~D-C1G(50juXk-mk7b2omfk9Uy=P=8nqd7KzNr>O^MI| zIWuaf2Ob=ARl&U?=u7fCHuj#OUH(r#5sh4PdPPj3F>P}c&FF~$+B`58>AdVl#a#x~ zE)mmTvgFOB%5jGY#7K}dlM}X3#B7**HCQHK#CXl#qg3YR3qnu%N`~3Z%q3sqLoYDW zc5!n5>QFwY47>rFI&xw%tMZtu2O=BlaIl#DIOQ(oH{{SSWU?HlrGc7Xm+8th8G27&>?y5HFbK7U2s%Eu0qt0$zT-?p5lmu0Ss&WK9@Z|fahs~uH9 zVgwW|Ua3WssviU`XW(B3fXJG3LBFj_VM|sFn){TpV@dwC)0$t_r`176k!iuhloB|A z-B*C<=i9k@Znsu$@|P>D^gpljr@!bY$xN6FmgUDNhP@-RX!gXfXu~9g&mUB&zZIZe zaV19zPI+8G0N%3R4M#45d^S{_JzHXx<5%jDryvGuY_Jg`@qZY-0c?3Ohk)aM9oGgj z4#fLs_s}MP7-sk7za}5RaFl2qsmYMo1JtQ++=|;cuPDt9*`G`1nJmsq28td^MgLg8 zt8kje75yDCnl#)mz7SyzOqAxzOecJ?z*?I+%`bSdl(!U|znfkA3TzgP-jz_Le3vjD zDA{`CR*Phse&*>k1a+;gyz8Z$7g@HYj}koAJt@Xc2Ke!qm1t$gYga~LBB!U%mC0f$ zHxh`r)`bE092&Z$>?y|K>NRx4cj9;ivnvXt?mTEb$>D!_jxuFDodht4AzhLxOFZk8KyS@O52`X32r@NAA+8!a zZ4z^Zbgl)(+$uWo4UHnJR{+iG!jZbH;*t5d52Q|OOMF|x4S9~6oI+r!Zs@Jxt$s&E zn0r>5o95_j+R>Dg_vdU!r9)8 zTin4CXyEG{5GU+<>sr?7@AzJVxnb)>vEel@Ks{S@cK_+Y>2Ior&|0#^Q=C9uzfIE;C(S)lCn*fCWIZYg~zo8 z0Zw$Wcs;8xz+LDr3r>mpBH+251?XL>^p4OeQ2aq5Cc(GqsXwh?3qpSnJAMhDUo?Lj zPv^Q>O|7^5qp!hUzl~fn-xYFPdzrlnJTvK5iu!HwYI7)Xd_?WGfG`ErvsAy~JL>#m z#WW-NgqA#-IzqQB>C@mIa3HZxGSYS*_bpLdHdbR4+V?Ve6S#I)b;$X;5@#k9!&V#1 zDSD%&y2F(*$UTua665@|iF@;rG~r}j(uQJvH){#1cPcoh*?pNVfZ+)IArQ(`a$ZNq zNmNy#J;MOY5B|6s)=m5_lBiPocaQJOL`w(Pw?fnyU)A$R3N`L;V2Ghpb;~ODJp0|H zUGf$71(+u(8KY1|w&Olh+*!_B*yp8R!zD$+uBBo$ew)-N|Jr4b6EY#b4jM&!EXG{Y z8`@28j?K6F*<$5#Mcl|3wB<{%nKjLdik_M6 zTG~F3wBpPL+?E%q1E0=mkx;dO+@?T!VUWT5DASMUfmCzIlOQ3T^;){&0NBrkHT5HE zmn~}7nbz4y*qG2@hJ0udFz@*Dz&I=t(4Pksr?O<^k#ko0elta({Z+3D)Sw2Q;_uur zxb_pZ{!C|EgTkoiYAB^1w$A_VJhz7+Cpkm>b00A`K*kmUq|JRW6=IfFjVr9oVYK*h;p7Kou^P>N z=AxYgmT6k&X|2F%=My611snYq+ck<5*P)DtNB$+g?3VpY)5b8ql{za5?y2!xoE9=G zzR&?6ZaM5kB<{enQ*(G$*eVRiD!vUjiSMzx>Yb2rTN*Ob?gzW8{7_{Fswa$L7u^vD zGhTdiDr1UjQz&DrMUxCBQ?hF61;fY?PSf;M!Yf*)s+@78-rH?w2>eZd40voIYNiMz zu?K8xqs&NwUdZbEK0u^BV9;{2#BwE>*b|ff+{#K+FSH5MB(ndvEH;En7rm{ZwR^#h z1559*Pi14ysI+lGZ-?GQps0nnQfD)1aLUTqir?63-|rj=X8Z1thMl#U>S2a6NJ($h z8T}9d!Jv_eo#o~v!5a~Fmn6D%>B5TPepL~^kbWF-k zJ@=+mG-Hphz9JiPzCOrtfar%UDmipH?H>NHf68t(fh_KTKBi!Nlb8 z|1z*RMSs|+sE-=kN~Nt37AW^saJa=foz9m{$oNcXap~td*pVdflsf*D@0aL$a6M~q zFO*zq-YFM+6#L^Vx7-sOA%(Ai9wa~?)GeA2`sXF9KON#R)!cINZG?!x03%4Mmf+8D z#5IH#I&O;D__@cAF{QOO9xa?BF~4ycC6{3-uVIL-ZQ>XAgybQd>KL4?k@o0`OO{A$ z#((KTm{c)1c_EQ|=N5c^VqfU_SEf~DW<0njW!&uN8;3&rNP8|idx+d|1ZR`K#ncak zHo*5}b@o0vNu5FyX!SH#HWQS*-=9QA!Blkf!gmP$UF7H3wGZzQHVewIyw*I;s#m7hb@QY45X z$Us+1hh!%xeasQ9lUHpU`gMt7EGlU-#STL);qJ=$EngTZ%hFZh=dJU*=A8!O%b+T4}o9m(Bo zo~BhTu66CmgSwzB=ff<6rCp|af(~H7zoBj88PWMnpbhiukgZ?|#lvg@zsrk$o9GNI zt-rbQ`;gQVq101*!nHfq{sqfTc<2XglESOmah@xT29KjDsJH4*F3)lCz#O=jA5Snx z9L8wahyD1_v_iOjSU`2}rb6l7$Jc)?BDM|nvD@N&;tYiTGq?EMNBopmV5qc9e(oOr zKM#!0SN2ZkOjhfOjUdf03`4{&|I)`5&(MZfav{{yFaW-<_5JGyF(Sk#fOM z!w9jD&r2*u6OsHQ6c^OvLaB`*JU~O48;%+uME!kAx@|_awA!w`B3%_Gzm#iohi?*` z)&&EDKv-A__qN4hyEhmfn^CuA>QfPoO?Z7Oy#sRY((v8%zwmzO$~)c?Y=1zTrhlGR zz@A-?@_wC@e0VO$bb%a=v#R2!cnCXI!^iY?IZ*3%MtB!z1t+_=seo z-bY1brmW=ESk|U54qfAshgC&Z@h9?8Zp`FpSg4{r!L~v@lF7Z8U$78HhsUvTw&{Zt zWnKwurZB24Jv&MhQqT2D7kLuzP-{k5clsgx1%qcwc|8j0)iSL4x#|9UIVJ`7G zhc{5{qqPmkC?_JZxN1eHCiz7J(vBWwmCr43g`vpsf)eR>Mv%I=Sx-Gc=hVR}#k^Fh zoMl)tXXB=2aJ6|PXmXc>42~Z%c0NapLx|{7-}@=3@A(cmTwA_t0ercX%-Kf!aaP(A z2dQy?U;6cc;CShtOiW5Kz>*M$XT48@VmHP8@*vFsRwYhDv}L^urTE1?qXyLP`sL~T z)s@t?lGboD#ZT5Q@Di&FWI)4Um*JaC3o8;9Z5@E2`>yo1j;nH_-Lc^sYo4&ixa@>* zk=WdXX7A%SNWvw|amw~|L^m$fo+4I%z2UN z<&d1e7h$!@7OA)C7FAf5NyCHShzQjzab3$@5E(QqA$PUgX9xf^z61$}x5~=52K3ILIb62OLzTr|^;&SQnjAUM61tB3qwugE{W1QIGnQ#w6>;ee_Ns*d5!Vc^QR!5qVzJE zWotEq0~f&5xW$KX1xsC^U1?R>Jcc5SpxKzn)jh&E;oNG|f>05g!fW7-MUPD*!RJ_h zr$Vn2|5m^~pa@PJs}X{~I$;Zbj2#&#&=B>^oo>&dy>gwCgk#^naU>ltf%NEt$Vo3a zQl>rd4L&s5(9Rzi6yb#iin&m<;CvJ-Va*kPpVp4H?W4uNV;>Y|7n{GlD%V(k-MNdiW!|hbs_rP&)9=IN^L1DBsABhDM$<{`_|DqNww$nDXA&p&f08ZFTS3H4SYK z4m9sVH+g##xk$gDse3m>;q)5xp`t1~m6Q5Nn|dg|<9^JV(x9}=uk@Eb(rA6gt?v3G z*8<>`O5CI2hX#taC5p;sPCCYT~NpsJm-J_xC znctvM{rkKwVqd~Et?I+xs5Bbaqq=Nda~bAsduCbpu98PoE;+kTdWOvybD|7s&A7r+ zEu-b8C7)n6EDzli)B?-8W>7M6+_$yT;MG*Y_>0HB+u`qO{BouLE(&} z=GFeTqY3!6$UB7HWe0PG>C@!ao&NIN@bW9zPCZq9n|jP!g`&4yk$lPrYHm*2#o@fB4qJwaK_!xJlRg zmQ%K1L6wxlpE`W|^`@QzVG1g-x|0b=K;13Qw(d9cUe7Z-fAR)4h4RP0^c_`&rL{Ln=@JkX$dU*upb`QCd0B#V84P zE34n2(ESbmU%CFF8C^m5lN$$)`QLUF82%x1E0~!%o4Wkp(z}1tC;pSRi`4!t!g_Cd z66*~S3A!$jLytf*RDo?Ap#7mk{3B4&>S>;o7QR&qo3q^|k$En4LGX`;`Kc%okNins z6pyHs1mRr|F5wWg!JDWL=Hzn!7oA?NS;NQk)X482Q4(vftOpBMZGX;3~+yX}W{hWVQq}wT=nDL4YTaSdd%W0g>ul)Y^xa z$k=pF8WJ)44F4X>WvyhcWG%#n5FHGyL~f=490V7YJ$L-R23n34C7>0;!uBZ54r8kp zFxMQ5ZHN0WYwNzZztlqHaAb|_iT$#mfwi-hW;+#LPue1!L8x+&5;3=#X{ZZlXRD%w z)0QVsuo50iV5x@X=TAFMFG*8kV<0EUnL}`_O4C7IsBFtmG~YYgD!?+osE(}jx)u{t zZi=EC<#ipR^s=aDWY0?33YRPNqC9mBkVx-{D1$8brr<(5aWrenVV2y_7ou%Vp*uKD%tIdJ;#{q+) zggUf(5f3i57FQPu9F}X)nV|1d)9F-eK=C03 zz;>!4q1C#12ZmEIdsg6CiF%XE&ZJBJgjCPc#DIRlx(wX9k!kF!k{5o#Epp5BFSetA zpj1mYgc{<022r;#{K0RS-Zqr-1m>^?Ma!OE*?NE`+N;N!ODTn|$O|DJOrFmU^45Dw z3i&M>lq81a7R0m7ukT{S;$U`orWAf0x@1-;cQ|zg&$LQ8(-NJ42^Ce?>`QQn?$8JI zVGWUW1?fkcR|dPkWGMQ6LE=R={9K0qvEKbMZs}|z6aXGsPV;$kG^#iaho4zZ#WYKcFDaGgly(pAL0_zYzt~JyQ znWBFZ7glJ%;^c}r(C{Qlwgl~JU{KVFKG`Pras*6HVJw#qaxTrdZv_T(wB=XM8q8l! ztcF#gY$SSELXYdjjQdD?)Z(ov&^S1>*D+Ow zyA1|QrcTxEbL~x{_Jdzf$*9C1RbouloNhr-OdZp2iuV4p>dd<3pn5~y&Rv(3jhz|Z z;3>YyeZz--VIk>E#dK@wy}vZe>@`5w7f8Z$QO-e~+0`Q3M>3c5CnhM95(E`~$Z}~X z`u&yq2xitw{N^^}PexE7C3sf&A^1VT{7ts#{om><;(j}; z>QD8RM()=1Ovjz~OpvF#f~^7)HT>+P;WmuKh{7 z?4XeyG?irr?6n%>wPLtm7uzxn7glRv3LY7z{Sgmt*b2CrK;}~5}JItY+O>!IKuxjCx>dhQ+P9M4cC4%{e zQy7+&_jm_8y92L-Pq!w8N5?$_Q7k*^Qi4nQp20JqXncUa#@f2i`q(hVTIDHUXAn6g zqDp2uz2P*2A+6YiAtwU^wGeF^m{*cyrY5v4w#YJDbU^zr!A?p9k_)Q^RcqGwf_%g? zqjYu0uj8zC6=^+$xb?K8VdX86+_(>_YZ9_z1UIy39>m7N1EPG&SDK|cKjMW2!&(12 z^U3(6qbZm3x;~W|+t^*pD$V9)E!0I~{s@`)dxj=w$+*Z0m42< $@vz03z8Z`qI{ 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

=%>>2|D73@_9Fx}<*!s;{SFX;r+XReUC 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 z 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

qm4Wk) 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 z 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�!!ybUdR4n8i&a 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≻pfc-p+kq>A@&EZJ32ii;nzX4TDQYlf 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
gy>fqEPDaO`QF}o` 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%0AO0^D-A)i$ldleqyk}TE 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 z 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

tyv*0yP}nk-pv4zbBt@DbR|3V7ZQ73LXi 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 kF-h#lNtCW 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 literal 0 HcmV?d00001 diff --git a/main.nf b/main.nf index a7f7b172..9713baff 100644 --- a/main.nf +++ b/main.nf @@ -9,156 +9,382 @@ ---------------------------------------------------------------------------------------- */ -nextflow.enable.dsl = 2 +log.info Headers.nf_core(workflow, params.monochrome_logs) //////////////////////////////////////////////////// /* -- PRINT HELP -- */ -//////////////////////////////////////////////////// - +////////////////////////////////////////////////////+ def json_schema = "$projectDir/nextflow_schema.json" if (params.help) { - // TODO nf-core: Update typical command used to run pipeline - def command = "nextflow run nf-core/cutandrun --input samplesheet.csv -profile docker" - log.info Schema.params_help(workflow, params, json_schema, command) + def command = "nextflow run nf-core/cutandrun --input '*_R{1,2}.fastq.gz' -profile docker" + log.info NfcoreSchema.params_help(workflow, params, json_schema, command) exit 0 } //////////////////////////////////////////////////// -/* -- GENOME PARAMETER VALUES -- */ -//////////////////////////////////////////////////// - -params.fasta = Checks.get_genome_attribute(params, 'fasta') - -//////////////////////////////////////////////////// -/* -- PRINT PARAMETER SUMMARY -- */ -//////////////////////////////////////////////////// - -def summary_params = Schema.params_summary_map(workflow, params, json_schema) -log.info Schema.params_summary_log(workflow, params, json_schema) +/* -- VALIDATE PARAMETERS -- */ +////////////////////////////////////////////////////+ +if (params.validate_params) { + NfcoreSchema.validateParameters(params, json_schema, log) +} //////////////////////////////////////////////////// -/* -- PARAMETER CHECKS -- */ +/* -- Collect configuration parameters -- */ //////////////////////////////////////////////////// -// Check that conda channels are set-up correctly -if (params.enable_conda) { - Checks.check_conda_channels(log) +// Check if genome exists in the config file +if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + exit 1, "The provided genome '${params.genome}' is not available in the iGenomes file. Currently the available genomes are ${params.genomes.keySet().join(', ')}" } +// TODO nf-core: Add any reference files that are needed +// Configurable reference genomes +// +// NOTE - THIS IS NOT USED IN THIS PIPELINE, EXAMPLE ONLY +// If you want to use the channel below in a process, define the following: +// input: +// file fasta from ch_fasta +// +params.fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false +if (params.fasta) { ch_fasta = file(params.fasta, checkIfExists: true) } + // Check AWS batch settings -Checks.aws_batch(workflow, params) +if (workflow.profile.contains('awsbatch')) { + // AWSBatch sanity checking + if (!params.awsqueue || !params.awsregion) exit 1, 'Specify correct --awsqueue and --awsregion parameters on AWSBatch!' + // Check outdir paths to be S3 buckets if running on AWSBatch + // related: https://github.com/nextflow-io/nextflow/issues/813 + if (!params.outdir.startsWith('s3:')) exit 1, 'Outdir not on S3 - specify S3 Bucket to run on AWSBatch!' + // Prevent trace files to be stored on S3 since S3 does not support rolling files. + if (params.tracedir.startsWith('s3:')) exit 1, 'Specify a local tracedir or run without trace! S3 cannot be used for tracefiles.' +} -// Check the hostnames against configured profiles -Checks.hostname(workflow, params, log) +// Stage config files +ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() +ch_output_docs = file("$projectDir/docs/output.md", checkIfExists: true) +ch_output_docs_images = file("$projectDir/docs/images/", checkIfExists: true) -// Check genome key exists if provided -Checks.genome_exists(params, log) +/* + * Create a channel for input read files + */ +if (params.input_paths) { + if (params.single_end) { + Channel + .from(params.input_paths) + .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true) ] ] } + .ifEmpty { exit 1, 'params.input_paths was empty - no input files supplied' } + .into { ch_read_files_fastqc; ch_read_files_trimming } + } else { + Channel + .from(params.input_paths) + .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true), file(row[1][1], checkIfExists: true) ] ] } + .ifEmpty { exit 1, 'params.input_paths was empty - no input files supplied' } + .into { ch_read_files_fastqc; ch_read_files_trimming } + } +} else { + Channel + .fromFilePairs(params.input, size: params.single_end ? 1 : 2) + .ifEmpty { exit 1, "Cannot find any reads matching: ${params.input}\nNB: Path needs to be enclosed in quotes!\nIf this is single-end data, please specify --single_end on the command line." } + .into { ch_read_files_fastqc; ch_read_files_trimming } +} //////////////////////////////////////////////////// -/* -- VALIDATE INPUTS -- */ +/* -- PRINT PARAMETER SUMMARY -- */ //////////////////////////////////////////////////// +log.info NfcoreSchema.params_summary_log(workflow, params, json_schema) + +// Header log info +def summary = [:] +if (workflow.revision) summary['Pipeline Release'] = workflow.revision +summary['Run Name'] = workflow.runName +// TODO nf-core: Report custom parameters here +summary['Input'] = params.input +summary['Fasta Ref'] = params.fasta +summary['Data Type'] = params.single_end ? 'Single-End' : 'Paired-End' +summary['Max Resources'] = "$params.max_memory memory, $params.max_cpus cpus, $params.max_time time per job" +if (workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" +summary['Output dir'] = params.outdir +summary['Launch dir'] = workflow.launchDir +summary['Working dir'] = workflow.workDir +summary['Script dir'] = workflow.projectDir +summary['User'] = workflow.userName +if (workflow.profile.contains('awsbatch')) { + summary['AWS Region'] = params.awsregion + summary['AWS Queue'] = params.awsqueue + summary['AWS CLI'] = params.awscli +} +summary['Config Profile'] = workflow.profile +if (params.config_profile_description) summary['Config Profile Description'] = params.config_profile_description +if (params.config_profile_contact) summary['Config Profile Contact'] = params.config_profile_contact +if (params.config_profile_url) summary['Config Profile URL'] = params.config_profile_url +summary['Config Files'] = workflow.configFiles.join(', ') +if (params.email || params.email_on_fail) { + summary['E-mail Address'] = params.email + summary['E-mail on failure'] = params.email_on_fail + summary['MultiQC maxsize'] = params.max_multiqc_email_size +} -// TODO nf-core: Add all file path parameters for the pipeline to the list below -// Check input path parameters to see if they exist -checkPathParamList = [ params.input, params.multiqc_config, params.fasta ] -for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } - -// Check mandatory parameters -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } +// Check the hostnames against configured profiles +checkHostname() + +Channel.from(summary.collect{ [it.key, it.value] }) + .map { k,v -> "

$k
${v ?: 'N/A'}
" } + .reduce { a, b -> return [a, b].join("\n ") } + .map { x -> """ + id: 'nf-core-cutandrun-summary' + description: " - this information is collected when the pipeline is started." + section_name: 'nf-core/cutandrun Workflow Summary' + section_href: 'https://github.com/nf-core/cutandrun' + plot_type: 'html' + data: | +
+ $x +
+ """.stripIndent() } + .set { ch_workflow_summary } -//////////////////////////////////////////////////// -/* -- CONFIG FILES -- */ -//////////////////////////////////////////////////// +/* + * Parse software version numbers + */ +process get_software_versions { + publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode, + saveAs: { filename -> + if (filename.indexOf('.csv') > 0) filename + else null + } + + output: + file 'software_versions_mqc.yaml' into ch_software_versions_yaml + file 'software_versions.csv' + + script: + // TODO nf-core: Get all tools to print their version number here + """ + echo $workflow.manifest.version > v_pipeline.txt + echo $workflow.nextflow.version > v_nextflow.txt + fastqc --version > v_fastqc.txt + multiqc --version > v_multiqc.txt + scrape_software_versions.py &> software_versions_mqc.yaml + """ +} -ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() +/* + * STEP 1 - FastQC + */ +process fastqc { + tag "$name" + label 'process_medium' + publishDir "${params.outdir}/fastqc", mode: params.publish_dir_mode, + saveAs: { filename -> + filename.indexOf('.zip') > 0 ? "zips/$filename" : "$filename" + } + + input: + set val(name), file(reads) from ch_read_files_fastqc + + output: + file '*_fastqc.{zip,html}' into ch_fastqc_results + + script: + """ + fastqc --quiet --threads $task.cpus $reads + """ +} -//////////////////////////////////////////////////// -/* -- IMPORT MODULES / SUBWORKFLOWS -- */ -//////////////////////////////////////////////////// +/* + * STEP 2 - MultiQC + */ +process multiqc { + publishDir "${params.outdir}/MultiQC", mode: params.publish_dir_mode + + input: + file (multiqc_config) from ch_multiqc_config + file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) + // TODO nf-core: Add in log files from your new processes for MultiQC to find! + file ('fastqc/*') from ch_fastqc_results.collect().ifEmpty([]) + file ('software_versions/*') from ch_software_versions_yaml.collect() + file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") + + output: + file "*multiqc_report.html" into ch_multiqc_report + file "*_data" + file "multiqc_plots" + + script: + rtitle = '' + rfilename = '' + if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { + rtitle = "--title \"${workflow.runName}\"" + rfilename = "--filename " + workflow.runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" + } + custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' + // TODO nf-core: Specify which MultiQC modules to use with -m for a faster run time + """ + multiqc -f $rtitle $rfilename $custom_config_file . + """ +} -// Don't overwrite global params.modules, create a copy instead and use that within the main script. -def modules = params.modules.clone() +/* + * STEP 3 - Output Description HTML + */ +process output_documentation { + publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode + + input: + file output_docs from ch_output_docs + file images from ch_output_docs_images + + output: + file 'results_description.html' + + script: + """ + markdown_to_html.py $output_docs -o results_description.html + """ +} -def multiqc_options = modules['multiqc'] -multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' +/* + * Completion e-mail notification + */ +workflow.onComplete { -// Local: Modules -include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) + // Set up the e-mail variables + def subject = "[nf-core/cutandrun] Successful: $workflow.runName" + if (!workflow.success) { + subject = "[nf-core/cutandrun] FAILED: $workflow.runName" + } + def email_fields = [:] + email_fields['version'] = workflow.manifest.version + email_fields['runName'] = workflow.runName + email_fields['success'] = workflow.success + email_fields['dateComplete'] = workflow.complete + email_fields['duration'] = workflow.duration + email_fields['exitStatus'] = workflow.exitStatus + email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + email_fields['errorReport'] = (workflow.errorReport ?: 'None') + email_fields['commandLine'] = workflow.commandLine + email_fields['projectDir'] = workflow.projectDir + email_fields['summary'] = summary + email_fields['summary']['Date Started'] = workflow.start + email_fields['summary']['Date Completed'] = workflow.complete + email_fields['summary']['Pipeline script file path'] = workflow.scriptFile + email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId + if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository + if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId + if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision + email_fields['summary']['Nextflow Version'] = workflow.nextflow.version + email_fields['summary']['Nextflow Build'] = workflow.nextflow.build + email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp + + // TODO nf-core: If not using MultiQC, strip out this code (including params.max_multiqc_email_size) + // On success try attach the multiqc report + def mqc_report = null + try { + if (workflow.success) { + mqc_report = ch_multiqc_report.getVal() + if (mqc_report.getClass() == ArrayList) { + log.warn "[nf-core/cutandrun] Found multiple reports from process 'multiqc', will use only one" + mqc_report = mqc_report[0] + } + } + } catch (all) { + log.warn "[nf-core/cutandrun] Could not attach MultiQC report to summary email" + } -// Local: Sub-workflows -include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) + // Check if we are only sending emails on failure + email_address = params.email + if (!params.email && params.email_on_fail && !workflow.success) { + email_address = params.email_on_fail + } -// nf-core/modules: Modules -include { FASTQC } from './modules/nf-core/software/fastqc/main' addParams( options: modules['fastqc'] ) -include { MULTIQC } from './modules/nf-core/software/multiqc/main' addParams( options: multiqc_options ) + // Render the TXT template + def engine = new groovy.text.GStringTemplateEngine() + def tf = new File("$projectDir/assets/email_template.txt") + def txt_template = engine.createTemplate(tf).make(email_fields) + def email_txt = txt_template.toString() + + // Render the HTML template + def hf = new File("$projectDir/assets/email_template.html") + def html_template = engine.createTemplate(hf).make(email_fields) + def email_html = html_template.toString() + + // Render the sendmail template + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] + def sf = new File("$projectDir/assets/sendmail_template.txt") + def sendmail_template = engine.createTemplate(sf).make(smail_fields) + def sendmail_html = sendmail_template.toString() + + // Send the HTML e-mail + if (email_address) { + try { + if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + [ 'sendmail', '-t' ].execute() << sendmail_html + log.info "[nf-core/cutandrun] Sent summary e-mail to $email_address (sendmail)" + } catch (all) { + // Catch failures and try with plaintext + def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + if ( mqc_report.size() <= params.max_multiqc_email_size.toBytes() ) { + mail_cmd += [ '-A', mqc_report ] + } + mail_cmd.execute() << email_html + log.info "[nf-core/cutandrun] Sent summary e-mail to $email_address (mail)" + } + } -//////////////////////////////////////////////////// -/* -- RUN MAIN WORKFLOW -- */ -//////////////////////////////////////////////////// + // Write summary e-mail HTML to a file + def output_d = new File("${params.outdir}/pipeline_info/") + if (!output_d.exists()) { + output_d.mkdirs() + } + def output_hf = new File(output_d, "pipeline_report.html") + output_hf.withWriter { w -> w << email_html } + def output_tf = new File(output_d, "pipeline_report.txt") + output_tf.withWriter { w -> w << email_txt } + + c_green = params.monochrome_logs ? '' : "\033[0;32m"; + c_purple = params.monochrome_logs ? '' : "\033[0;35m"; + c_red = params.monochrome_logs ? '' : "\033[0;31m"; + c_reset = params.monochrome_logs ? '' : "\033[0m"; + + if (workflow.stats.ignoredCount > 0 && workflow.success) { + log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" + log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" + log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" + } -// Info required for completion email and summary -def multiqc_report = [] - -workflow { - - ch_software_versions = Channel.empty() - - /* - * SUBWORKFLOW: Read in samplesheet, validate and stage input files - */ - INPUT_CHECK ( - ch_input - ) - - /* - * MODULE: Run FastQC - */ - FASTQC ( - INPUT_CHECK.out.reads - ) - ch_software_versions = ch_software_versions.mix(FASTQC.out.version.first().ifEmpty(null)) - - - /* - * MODULE: Pipeline reporting - */ - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() - ) - - /* - * MultiQC - */ - if (!params.skip_multiqc) { - workflow_summary = Schema.params_summary_multiqc(workflow, summary_params) - ch_workflow_summary = Channel.value(workflow_summary) - - ch_multiqc_files = Channel.empty() - ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) - ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) - ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) - ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) - - MULTIQC ( - ch_multiqc_files.collect() - ) - multiqc_report = MULTIQC.out.report.toList() - ch_software_versions = ch_software_versions.mix(MULTIQC.out.version.ifEmpty(null)) + if (workflow.success) { + log.info "-${c_purple}[nf-core/cutandrun]${c_green} Pipeline completed successfully${c_reset}-" + } else { + checkHostname() + log.info "-${c_purple}[nf-core/cutandrun]${c_red} Pipeline completed with errors${c_reset}-" } -} -//////////////////////////////////////////////////// -/* -- COMPLETION EMAIL -- */ -//////////////////////////////////////////////////// +} -workflow.onComplete { - Completion.email(workflow, params, summary_params, projectDir, log, multiqc_report) - Completion.summary(workflow, params, log) +workflow.onError { + // Print unexpected parameters - easiest is to just rerun validation + NfcoreSchema.validateParameters(params, json_schema, log) } -//////////////////////////////////////////////////// -/* -- THE END -- */ -//////////////////////////////////////////////////// +def checkHostname() { + def c_reset = params.monochrome_logs ? '' : "\033[0m" + def c_white = params.monochrome_logs ? '' : "\033[0;37m" + def c_red = params.monochrome_logs ? '' : "\033[1;91m" + def c_yellow_bold = params.monochrome_logs ? '' : "\033[1;93m" + if (params.hostnames) { + def hostname = 'hostname'.execute().text.trim() + params.hostnames.each { prof, hnames -> + hnames.each { hname -> + if (hostname.contains(hname) && !workflow.profile.contains(prof)) { + log.error '====================================================\n' + + " ${c_red}WARNING!${c_reset} You are running with `-profile $workflow.profile`\n" + + " but your machine hostname is ${c_white}'$hostname'${c_reset}\n" + + " ${c_yellow_bold}It's highly recommended that you use `-profile $prof${c_reset}`\n" + + '============================================================' + } + } + } + } +} diff --git a/modules/local/process/functions.nf b/modules/local/process/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/local/process/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/local/process/get_software_versions.nf b/modules/local/process/get_software_versions.nf deleted file mode 100644 index 7ad04057..00000000 --- a/modules/local/process/get_software_versions.nf +++ /dev/null @@ -1,32 +0,0 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - -/* - * Parse software version numbers - */ -process GET_SOFTWARE_VERSIONS { - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - container "quay.io/biocontainers/python:3.8.3" - - cache false - - input: - path versions - - output: - path "software_versions.csv" , emit: csv - path 'software_versions_mqc.yaml', emit: yaml - - script: - """ - echo $workflow.manifest.version > pipeline.version.txt - echo $workflow.nextflow.version > nextflow.version.txt - scrape_software_versions.py &> software_versions_mqc.yaml - """ -} diff --git a/modules/local/process/samplesheet_check.nf b/modules/local/process/samplesheet_check.nf deleted file mode 100644 index 65a80732..00000000 --- a/modules/local/process/samplesheet_check.nf +++ /dev/null @@ -1,50 +0,0 @@ -// Import generic module functions -include { saveFiles } from './functions' - -params.options = [:] - -/* - * Reformat design file and check validity - */ -process SAMPLESHEET_CHECK { - tag "$samplesheet" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } - - conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - container "quay.io/biocontainers/python:3.8.3" - - input: - path samplesheet - - output: - path '*.csv' - - - script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ - """ - check_samplesheet.py $samplesheet samplesheet.valid.csv - """ -} - -// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] -def get_samplesheet_paths(LinkedHashMap row) { - def meta = [:] - meta.id = row.sample - meta.single_end = row.single_end.toBoolean() - - def array = [] - if (!file(row.fastq_1).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" - } - if (meta.single_end) { - array = [ meta, [ file(row.fastq_1) ] ] - } else { - if (!file(row.fastq_2).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" - } - array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] - } - return array -} diff --git a/modules/local/subworkflow/input_check.nf b/modules/local/subworkflow/input_check.nf deleted file mode 100644 index cb6a902d..00000000 --- a/modules/local/subworkflow/input_check.nf +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Check input samplesheet and get read channels - */ - -params.options = [:] - -include { - SAMPLESHEET_CHECK; - get_samplesheet_paths } from '../process/samplesheet_check' addParams( options: params.options ) - -workflow INPUT_CHECK { - take: - samplesheet // file: /path/to/samplesheet.csv - - main: - SAMPLESHEET_CHECK ( samplesheet ) - .splitCsv ( header:true, sep:',' ) - .map { get_samplesheet_paths(it) } - .set { reads } - - emit: - reads // channel: [ val(meta), [ reads ] ] -} diff --git a/modules/nf-core/software/fastqc/functions.nf b/modules/nf-core/software/fastqc/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/nf-core/software/fastqc/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/nf-core/software/fastqc/main.nf b/modules/nf-core/software/fastqc/main.nf deleted file mode 100644 index 3cb510ac..00000000 --- a/modules/nf-core/software/fastqc/main.nf +++ /dev/null @@ -1,47 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -def options = initOptions(params.options) - -process FASTQC { - tag "$meta.id" - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - - conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0" - } else { - container "quay.io/biocontainers/fastqc:0.11.9--0" - } - - input: - tuple val(meta), path(reads) - - output: - tuple val(meta), path("*.html"), emit: html - tuple val(meta), path("*.zip") , emit: zip - path "*.version.txt" , emit: version - - script: - // Add soft-links to original FastQs for consistent naming in pipeline - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" - if (meta.single_end) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz - fastqc $options.args --threads $task.cpus ${prefix}.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt - """ - } else { - """ - [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz - [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz - fastqc $options.args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz - fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt - """ - } -} diff --git a/modules/nf-core/software/fastqc/meta.yml b/modules/nf-core/software/fastqc/meta.yml deleted file mode 100644 index 413aad8d..00000000 --- a/modules/nf-core/software/fastqc/meta.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: fastqc -description: Run FastQC on sequenced reads -keywords: - - quality control - - qc - - adapters - - fastq -tools: - - fastqc: - description: | - FastQC gives general quality metrics about your reads. - It provides information about the quality score distribution - across your reads, the per base sequence content (%A/C/G/T). - You get information about adapter contamination and other - overrepresented sequences. - homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ - documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - html: - type: file - description: FastQC report - pattern: "*_{fastqc.html}" - - zip: - type: file - description: FastQC report archive - pattern: "*_{fastqc.zip}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@drpatelh" - - "@grst" - - "@ewels" - - "@FelixKrueger" diff --git a/modules/nf-core/software/multiqc/functions.nf b/modules/nf-core/software/multiqc/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/nf-core/software/multiqc/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/nf-core/software/multiqc/main.nf b/modules/nf-core/software/multiqc/main.nf deleted file mode 100644 index ff1175fc..00000000 --- a/modules/nf-core/software/multiqc/main.nf +++ /dev/null @@ -1,35 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -def options = initOptions(params.options) - -process MULTIQC { - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename: filename, options: params.options, publish_dir: getSoftwareName(task.process), publish_id: '') } - - conda (params.enable_conda ? "bioconda::multiqc=1.9" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/multiqc:1.9--pyh9f0ad1d_0" - } else { - container "quay.io/biocontainers/multiqc:1.9--pyh9f0ad1d_0" - } - - input: - path multiqc_files - - output: - path "*multiqc_report.html", emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - """ - multiqc -f $options.args . - multiqc --version | sed -e "s/multiqc, version //g" > ${software}.version.txt - """ -} diff --git a/modules/nf-core/software/multiqc/meta.yml b/modules/nf-core/software/multiqc/meta.yml deleted file mode 100644 index 02f4b415..00000000 --- a/modules/nf-core/software/multiqc/meta.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: MultiQC -description: Aggregate results from bioinformatics analyses across many samples into a single report -keywords: - - QC - - bioinformatics tools - - Beautiful stand-alone HTML report -tools: - - multiqc: - description: | - MultiQC searches a given directory for analysis logs and compiles a HTML report. - It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. - homepage: https://multiqc.info/ - documentation: https://multiqc.info/docs/ -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. -input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC -output: - - report: - type: file - description: MultiQC report file - pattern: "multiqc_report.html" - - data: - type: dir - description: MultiQC data dir - pattern: "multiqc_data" - - plots: - type: file - description: Plots created by MultiQC - pattern: "*_data" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@abhi18av" - - "@bunop" - - "@drpatelh" diff --git a/nextflow.config b/nextflow.config index a79f38fc..35701974 100644 --- a/nextflow.config +++ b/nextflow.config @@ -8,55 +8,50 @@ // Global default params, used in configs params { + // Workflow flags // TODO nf-core: Specify your pipeline's command line flags - // Input options - input = '' - - // References - genome = '' - igenomes_base = 's3://ngi-igenomes/igenomes/' - igenomes_ignore = false - - // MultiQC options - multiqc_config = '' - multiqc_title = '' - max_multiqc_email_size = '25.MB' - skip_multiqc = false + genome = false + input = null + input_paths = null + single_end = false + outdir = './results' + publish_dir_mode = 'copy' // Boilerplate options - outdir = './results' - tracedir = "${params.outdir}/pipeline_info" - publish_dir_mode = 'copy' - email = '' - email_on_fail = '' - plaintext_email = false - monochrome_logs = false - help = false - enable_conda = false - singularity_pull_docker_container = false - - // Config options - custom_config_version = 'master' - custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - hostnames = [:] - config_profile_description = '' - config_profile_contact = '' - config_profile_url = '' + multiqc_config = false + email = false + email_on_fail = false + max_multiqc_email_size = 25.MB + plaintext_email = false + monochrome_logs = false + help = false + igenomes_base = 's3://ngi-igenomes/igenomes/' + tracedir = "${params.outdir}/pipeline_info" + igenomes_ignore = false + custom_config_version = 'master' + custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" + hostnames = false + config_profile_description = false + config_profile_contact = false + config_profile_url = false + validate_params = true + show_hidden_params = false + schema_ignore_params = 'genomes,input_paths' - // Max resource options // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' + 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/cutandrun:dev' + // 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" @@ -64,18 +59,22 @@ try { System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } -// Load igenomes.config if required -if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' -} else { - params.genomes = [:] -} - profiles { + conda { + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud = false + process.conda = "$projectDir/environment.yml" + } debug { process.beforeScript = 'echo $HOSTNAME' } - conda { params.enable_conda = true } docker { - docker.enabled = true + 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 @@ -83,21 +82,48 @@ profiles { docker.runOptions = '-u \$(id -u):\$(id -g)' } singularity { - singularity.enabled = true + 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 } - test { includeConfig 'conf/test.config' } + 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' } } +// Load igenomes.config if required +if (!params.igenomes_ignore) { + includeConfig 'conf/igenomes.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" + R_PROFILE_USER = "/.Rprofile" + R_ENVIRON_USER = "/.Renviron" } // Capture exit codes from upstream processes when piping @@ -105,29 +131,29 @@ process.shell = ['/bin/bash', '-euo', 'pipefail'] timeline { enabled = true - file = "${params.tracedir}/execution_timeline.html" + file = "${params.tracedir}/execution_timeline.html" } report { enabled = true - file = "${params.tracedir}/execution_report.html" + file = "${params.tracedir}/execution_report.html" } trace { enabled = true - file = "${params.tracedir}/execution_trace.txt" + file = "${params.tracedir}/execution_trace.txt" } dag { enabled = true - file = "${params.tracedir}/pipeline_dag.svg" + file = "${params.tracedir}/pipeline_dag.svg" } manifest { - name = 'nf-core/cutandrun' - author = 'Chris Cheshire and Charlotte West' - homePage = 'https://github.com/nf-core/cutandrun' - description = 'Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.' - mainScript = 'main.nf' - nextflowVersion = '!>=20.11.0-edge' - version = '1.0dev' + name = 'nf-core/cutandrun' + author = 'Chris Cheshire and Charlotte West' + homePage = 'https://github.com/nf-core/cutandrun' + description = 'Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.' + mainScript = 'main.nf' + nextflowVersion = '>=20.04.0' + version = '1.0dev' } // Function to ensure that resource requirements don't go beyond diff --git a/nextflow_schema.json b/nextflow_schema.json index 931d89ab..39edf48a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -16,13 +16,19 @@ "properties": { "input": { "type": "string", - "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location.", - "fa_icon": "fas fa-file-csv" + "fa_icon": "fas fa-dna", + "description": "Input FastQ files.", + "help_text": "Use this to specify the location of your input FastQ files. For example:\n\n```bash\n--input 'path/to/data/sample_*_{1,2}.fastq'\n```\n\nPlease note the following requirements:\n\n1. The path must be enclosed in quotes\n2. The path must have at least one `*` wildcard character\n3. When using the pipeline with paired end data, the path must use `{1,2}` notation to specify read pairs.\n\nIf left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz`" + }, + "single_end": { + "type": "boolean", + "description": "Specifies that the input is single-end reads.", + "fa_icon": "fas fa-align-center", + "help_text": "By default, the pipeline expects paired-end data. If you have single-end data, you need to specify `--single_end` on the command line when you launch the pipeline. A normal glob pattern, enclosed in quotation marks, can then be used for `--input`. For example:\n\n```bash\n--single_end --input '*.fastq'\n```\n\nIt is not possible to run a mixture of single-end and paired-end files in one run." }, "outdir": { "type": "string", - "description": "Path to the output directory where the results will be saved.", + "description": "The output directory where the results will be saved.", "default": "./results", "fa_icon": "fas fa-folder-open" }, @@ -39,19 +45,19 @@ "title": "Reference genome options", "type": "object", "fa_icon": "fas fa-dna", - "description": "Reference genome related files and options required for the workflow.", + "description": "Options for the reference genome indices used to align reads.", "properties": { "genome": { "type": "string", "description": "Name of iGenomes reference.", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`.\n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." }, "fasta": { "type": "string", + "fa_icon": "fas fa-font", "description": "Path to FASTA genome file.", - "help_text": "This parameter is *mandatory* if `--genome` is not specified.", - "fa_icon": "far fa-file-code" + "help_text": "If you have no genome reference available, the pipeline can build one using a FASTA file. This requires additional time and resources, so it's better to use a pre-build index if possible." }, "igenomes_base": { "type": "string", @@ -69,51 +75,91 @@ } } }, - "institutional_config_options": { - "title": "Institutional config options", + "generic_options": { + "title": "Generic options", "type": "object", - "fa_icon": "fas fa-university", - "description": "Parameters used to describe centralised config profiles. These should not be edited.", - "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", + "fa_icon": "fas fa-file-import", + "description": "Less common options for the pipeline, typically set in a config file.", + "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "custom_config_version": { - "type": "string", - "description": "Git commit id for Institutional configs.", - "default": "master", + "help": { + "type": "boolean", + "description": "Display help text.", "hidden": true, - "fa_icon": "fas fa-users-cog" + "fa_icon": "fas fa-question-circle" }, - "custom_config_base": { + "publish_dir_mode": { "type": "string", - "description": "Base directory for Institutional configs.", - "default": "https://raw.githubusercontent.com/nf-core/configs/master", + "default": "copy", "hidden": true, - "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", - "fa_icon": "fas fa-users-cog" + "description": "Method used to save pipeline results to output directory.", + "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", + "fa_icon": "fas fa-copy", + "enum": [ + "symlink", + "rellink", + "link", + "copy", + "copyNoFollow", + "move" + ] }, - "hostnames": { + "validate_params": { + "type": "boolean", + "description": "Boolean whether to validate parameters against the schema at runtime", + "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true + }, + "email_on_fail": { "type": "string", - "description": "Institutional configs hostname.", + "description": "Email address for completion summary, only when pipeline fails.", + "fa_icon": "fas fa-exclamation-triangle", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "This works exactly as with `--email`, except emails are only sent if the workflow is not successful." }, - "config_profile_description": { - "type": "string", - "description": "Institutional config description.", + "plaintext_email": { + "type": "boolean", + "description": "Send plain-text email instead of HTML.", + "fa_icon": "fas fa-remove-format", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "Set to receive plain-text e-mails instead of HTML formatted." }, - "config_profile_contact": { + "max_multiqc_email_size": { "type": "string", - "description": "Institutional config contact information.", + "description": "File size limit when attaching MultiQC reports to summary emails.", + "default": "25.MB", + "fa_icon": "fas fa-file-upload", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "If file generated by pipeline exceeds the threshold, it will not be attached." }, - "config_profile_url": { + "monochrome_logs": { + "type": "boolean", + "description": "Do not use coloured log outputs.", + "fa_icon": "fas fa-palette", + "hidden": true, + "help_text": "Set to disable colourful command line output and live life in monochrome." + }, + "multiqc_config": { "type": "string", - "description": "Institutional config URL link.", + "description": "Custom config file to supply to MultiQC.", + "fa_icon": "fas fa-cog", + "hidden": true + }, + "tracedir": { + "type": "string", + "description": "Directory to keep pipeline Nextflow logs and reports.", + "default": "${params.outdir}/pipeline_info", + "fa_icon": "fas fa-cogs", + "hidden": true + }, + "show_hidden_params": { + "type": "boolean", + "fa_icon": "far fa-eye-slash", + "description": "Show all params when using `--help`", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." } } }, @@ -126,7 +172,7 @@ "properties": { "max_cpus": { "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", + "description": "Maximum number of CPUs that can be requested for any single job.", "default": 16, "fa_icon": "fas fa-microchip", "hidden": true, @@ -137,6 +183,7 @@ "description": "Maximum amount of memory that can be requested for any single job.", "default": "128.GB", "fa_icon": "fas fa-memory", + "pattern": "^[\\d\\.]+\\s*.(K|M|G|T)?B$", "hidden": true, "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, @@ -145,102 +192,64 @@ "description": "Maximum amount of time that can be requested for any single job.", "default": "240.h", "fa_icon": "far fa-clock", + "pattern": "^[\\d\\.]+\\.*(s|m|h|d)$", "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } } }, - "generic_options": { - "title": "Generic options", + "institutional_config_options": { + "title": "Institutional config options", "type": "object", - "fa_icon": "fas fa-file-import", - "description": "Less common options for the pipeline, typically set in a config file.", - "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", + "fa_icon": "fas fa-university", + "description": "Parameters used to describe centralised config profiles. These should not be edited.", + "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, - "publish_dir_mode": { + "custom_config_version": { "type": "string", - "default": "copy", - "description": "Method used to save pipeline results to output directory.", - "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", - "fa_icon": "fas fa-copy", - "enum": [ - "symlink", - "rellink", - "link", - "copy", - "copyNoFollow", - "move" - ], - "hidden": true + "description": "Git commit id for Institutional configs.", + "default": "master", + "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default: `master`.\n\n```bash\n## Download and use config file with following git commit id\n--custom_config_version d52db660777c4bf36546ddb188ec530c3ada1b96\n```" }, - "email_on_fail": { + "custom_config_base": { "type": "string", - "description": "Email address for completion summary, only when pipeline fails.", - "fa_icon": "fas fa-exclamation-triangle", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", - "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", - "hidden": true - }, - "plaintext_email": { - "type": "boolean", - "description": "Send plain-text email instead of HTML.", - "fa_icon": "fas fa-remove-format", - "hidden": true + "description": "Base directory for Institutional configs.", + "default": "https://raw.githubusercontent.com/nf-core/configs/master", + "hidden": true, + "help_text": "If you're running offline, nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell nextflow where to find them with the `custom_config_base` option. For example:\n\n```bash\n## Download and unzip the config files\ncd /path/to/my/configs\nwget https://github.com/nf-core/configs/archive/master.zip\nunzip master.zip\n\n## Run the pipeline\ncd /path/to/my/data\nnextflow run /path/to/pipeline/ --custom_config_base /path/to/my/configs/configs-master/\n```\n\n> Note that the nf-core/tools helper package has a `download` command to download all required pipeline files + singularity containers + institutional configs in one go for you, to make this process easier.", + "fa_icon": "fas fa-users-cog" }, - "tracedir": { + "hostnames": { "type": "string", - "description": "Directory to keep pipeline Nextflow logs and reports.", - "default": "${params.outdir}/pipeline_info", - "fa_icon": "fas fa-cogs", - "hidden": true - }, - "monochrome_logs": { - "type": "boolean", - "description": "Do not use coloured log outputs.", - "fa_icon": "fas fa-palette", - "hidden": true - }, - "skip_multiqc": { - "type": "boolean", - "description": "Skip MultiQC.", - "fa_icon": "fas fa-fast-forward" + "description": "Institutional configs hostname.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "multiqc_config": { + "config_profile_name": { "type": "string", - "description": "Custom config file to supply to MultiQC.", - "fa_icon": "fas fa-cog", - "hidden": true + "description": "Institutional config name.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "multiqc_title": { + "config_profile_description": { "type": "string", - "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", - "fa_icon": "fas fa-file-signature" + "description": "Institutional config description.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "max_multiqc_email_size": { + "config_profile_contact": { "type": "string", - "description": "File size limit when attaching MultiQC reports to summary emails.", - "default": "25.MB", - "fa_icon": "fas fa-file-upload", - "hidden": true - }, - "enable_conda": { - "type": "boolean", - "description": "Run this workflow with Conda. You can also use '-profile conda' instead of providing this parameter.", + "description": "Institutional config contact information.", "hidden": true, - "fa_icon": "fas fa-bacon" + "fa_icon": "fas fa-users-cog" }, - "singularity_pull_docker_container": { - "type": "boolean", - "description": "Instead of directly downloading Singularity images for use with Singularity, force the workflow to pull and convert Docker containers instead.", + "config_profile_url": { + "type": "string", + "description": "Institutional config URL link.", "hidden": true, - "fa_icon": "fas fa-toolbox", - "help_text": "This may be useful for example if you are unable to directly pull Singularity containers to run the pipeline due to http/https proxy issues." + "fa_icon": "fas fa-users-cog" } } } @@ -253,13 +262,13 @@ "$ref": "#/definitions/reference_genome_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/definitions/generic_options" }, { "$ref": "#/definitions/max_job_request_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/definitions/institutional_config_options" } ] -} \ No newline at end of file +} From 412aa2e0f19fdb7b3409abcc036c342c91019c0d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 19 Mar 2021 10:21:17 +0000 Subject: [PATCH 051/675] Added bamtobed conversion --- bin/python/reporting/main.py | 1 + conf/modules.config | 40 +++++++ cutandrun.nf | 24 +++- modules/local/process/awk.nf | 6 +- modules/local/process/bedtools_bamtobed.nf | 36 ++++++ modules/local/process/cut.nf | 34 ++++++ .../local/subworkflow/calculate_fragments.nf | 106 ++++++++++++++++++ 7 files changed, 240 insertions(+), 7 deletions(-) create mode 100644 modules/local/process/bedtools_bamtobed.nf create mode 100644 modules/local/process/cut.nf create mode 100644 modules/local/subworkflow/calculate_fragments.nf diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index 45ffdf0d..dc11a611 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -52,6 +52,7 @@ def gen_png(parsed_args): parser_genimg.set_defaults(func=gen_png) parser_genimg.add_argument('--meta', required=True) parser_genimg.add_argument('--raw_frag', required=True) + parser_genimg.add_argument('--bed_frag', required=True) parser_genimg.add_argument('--output', required=True) parser_genimg.add_argument('--log', required=False) diff --git a/conf/modules.config b/conf/modules.config index 755639b5..10ee001e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -152,5 +152,45 @@ params { 'generate_reports' { publish_dir = "reports" } + + 'calc_frag_samtools_view' { + args = '-F 0x04' + suffix = ".mapped" + publish_dir = "calc_frag" + } + 'calc_frag_samtools' { + args = '' + suffix = ".mapped" + publish_dir = "calc_frag" + } + 'calc_frag_bamtobed' { + args = '-bedpe' + suffix = '' + publish_dir = 'calc_frag' + } + 'calc_frag_awk' { + args = "" + suffix = ".clean" + ext = "bed" + publish_dir = "calc_frag" + command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" + command2 = "" + } + 'calc_frag_cut' { + args = "-f 1,2,6" + suffix = ".frags" + ext = "bed" + publish_dir = "calc_frag" + command = "| sort -k1,1 -k2,2n -k3,3n" + } + + 'awk_frag_bin' { + args = "-v w=500" + suffix = ".frags.bin500" + ext = "bed" + publish_dir = "awk/bin500" + command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2}'" + command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1}' | sort -k1,1V -k2,2n" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index d15aaf9b..754192d0 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -106,7 +106,6 @@ if (params.publish_align_intermed || params.skip_markduplicates) { samtools_spikein_sort_options.publish_files.put('bai','') } - def samtools_view_options = modules['samtools_view'] def samtools_qfilter_options = modules['samtools_qfilter'] if (params.minimum_alignment_q_score > 0) { @@ -150,6 +149,7 @@ include { MULTIQC } from './modules/local/process/mul include { EXPORT_META } from './modules/local/process/export_meta' addParams( options: modules['export_meta'] ) include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) +include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -163,11 +163,14 @@ include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' add spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) +include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) +include { CALCULATE_FRAGMENTS } from './modules/local/subworkflow/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], samtools_view_options: modules['calc_frag_samtools_view'], bamtobed_options: modules['calc_frag_bamtobed'], awk_options: modules['calc_frag_awk'], cut_options: modules['calc_frag_cut']) + include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) -include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) + //////////////////////////////////////////////////// /* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ @@ -326,7 +329,7 @@ workflow CUTANDRUN { } /* - * SUBWORKFLOW: Annotate meta data with aligner stats and + * SUBWORKFLOW: Annotate meta data with aligner stats */ ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_spikein_log, ch_bt2_to_csv_awk) @@ -343,6 +346,8 @@ workflow CUTANDRUN { .join ( ch_spikein_bt2_meta ) .map { row -> [ row[1] << row[3], row[2] ] } .set { ch_combined_meta } + + ANNOTATE_BT2_SPIKEIN_META.out.output | view /* * CHANNEL: Calculate scale factor for each sample and join to main data flow @@ -360,11 +365,18 @@ workflow CUTANDRUN { [ row[0], row[1], row[2] ] } .set { ch_samtools_bam_scale } - //Create channel without scale as seperate value + // Create channel without scale as seperate value ch_samtools_bam_scale .map { row -> [ row[0], row[1] ] } .set { ch_samtools_bam_meta } + /* + * SUBWORKFLOW: Calculate fragment bed from bams + */ + CALCULATE_FRAGMENTS ( + ch_samtools_bam_meta + ) + if(!params.skip_coverage) { /* * MODULE: Convert to bedgraph @@ -486,6 +498,8 @@ workflow CUTANDRUN { ANNOTATE_DT_FRAG_META( ANNOTATE_DEDUP_META.out.output, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv, ch_dt_frag_to_csv_awk) //ANNOTATE_DT_FRAG_META.out.output | view + AWK_FRAG_BIN( CALCULATE_FRAGMENTS.out.bed ) + EXPORT_META ( ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) diff --git a/modules/local/process/awk.nf b/modules/local/process/awk.nf index 529744d7..5949b3be 100644 --- a/modules/local/process/awk.nf +++ b/modules/local/process/awk.nf @@ -4,6 +4,7 @@ params.options = [:] def options = initOptions(params.options) options.command = params.options.command ?: '' options.command2 = params.options.command2 ?: '' +options.ext = params.options.ext ?: '' process AWK { tag "$meta.id" @@ -22,14 +23,15 @@ process AWK { tuple val(meta), path(input) output: - tuple val(meta), path("*.awk.txt"), emit: file + tuple val(meta), path("*.awk.*"), emit: file path "*.version.txt", emit: version script: def software = getSoftwareName(task.process) def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def ext = options.ext ? "${options.ext}" : "txt" """ - awk $options.args $options.command $input $options.command2 > ${prefix}.awk.txt + awk $options.args $options.command $input $options.command2 > ${prefix}.awk.${ext} echo \$(awk --version 2>&1) | sed 's/^.*version //;' > ${software}.version.txt """ } diff --git a/modules/local/process/bedtools_bamtobed.nf b/modules/local/process/bedtools_bamtobed.nf new file mode 100644 index 00000000..a4a9dc74 --- /dev/null +++ b/modules/local/process/bedtools_bamtobed.nf @@ -0,0 +1,36 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process BEDTOOLS_BAMTOBED { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::bedtools=2.29.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.29.2--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.29.2--hc088bd4_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + + """ + bedtools bamtobed -i $bam $options.args > ${prefix}.bed + bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt + """ +} \ No newline at end of file diff --git a/modules/local/process/cut.nf b/modules/local/process/cut.nf new file mode 100644 index 00000000..8b559bf1 --- /dev/null +++ b/modules/local/process/cut.nf @@ -0,0 +1,34 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) +options.command = params.options.command ?: '' +options.ext = params.options.ext ?: '' + +process CUT { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? null : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), path(input) + + output: + tuple val(meta), path("*.cut.*"), emit: file + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def ext = options.ext ? "${options.ext}" : "txt" + """ + cut $options.args $input $options.command > ${prefix}.cut.${ext} + """ +} diff --git a/modules/local/subworkflow/calculate_fragments.nf b/modules/local/subworkflow/calculate_fragments.nf new file mode 100644 index 00000000..be529ec2 --- /dev/null +++ b/modules/local/subworkflow/calculate_fragments.nf @@ -0,0 +1,106 @@ +/* + * Calculate bed fragments from bam file + */ + +params.samtools_options = [:] +params.samtools_view_options = [:] +params.bamtobed_options = [:] +params.awk_options = [:] +params.cut_options = [:] + +include { SAMTOOLS_VIEW_SORT_STATS } from './samtools_view_sort_stats' addParams( samtools_options: params.samtools_options , samtools_view_options: params.samtools_view_options) +include { BEDTOOLS_BAMTOBED } from '../process/bedtools_bamtobed' addParams( options: params.bamtobed_options) +include { AWK } from '../process/awk' addParams( options: params.awk_options) +include { CUT } from '../process/cut' addParams( options: params.cut_options) + +workflow CALCULATE_FRAGMENTS { + take: + bam // channel: [ val(meta), [ bam ] ] + + main: + + // Filer for mapped reads only + SAMTOOLS_VIEW_SORT_STATS( bam ) + + // Convert to bed file + BEDTOOLS_BAMTOBED ( SAMTOOLS_VIEW_SORT_STATS.out.bam ) + + // Keep the read pairs that are on the same chromosome and fragment length less than 1000bp. + AWK ( BEDTOOLS_BAMTOBED.out.bed ) + + // Only extract the fragment related columns + CUT ( AWK.out.file ) + + emit: + bed = CUT.out.file + mapped_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam // channel: [ val(meta), [ bam ] ] + bai = SAMTOOLS_VIEW_SORT_STATS.out.bai // channel: [ val(meta), [ bai ] ] + stats = SAMTOOLS_VIEW_SORT_STATS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + + samtools_version = SAMTOOLS_VIEW_SORT_STATS.out.samtools_version // path: *.version.txt + bedtools_version = BEDTOOLS_BAMTOBED.out.version // path: *.version.txt + awk_version = AWK.out.version // path: *.version.txt +} + + + + + + +// params.align_options = [:] +// params.spikein_align_options = [:] +// params.samtools_options = [:] +// params.samtools_spikein_options = [:] + +// include { BOWTIE2_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) +// include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) +// include { BAM_SORT_SAMTOOLS } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_options ) +// include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) + +// workflow ALIGN_BOWTIE2 { +// take: +// reads // channel: [ val(meta), [ reads ] ] +// index // channel: /path/to/bowtie2/target/index/ +// spikein_index // channel: /path/to/bowtie2/spikein/index/ + +// main: +// /* +// * Map reads with BOWTIE2 to target genome +// */ +// BOWTIE2_ALIGN ( reads, index ) + +// /* +// * Map reads with BOWTIE2 to spike-in genome +// */ +// BOWTIE2_SPIKEIN_ALIGN ( reads, spikein_index ) + +// /* +// * Sort, index BAM file and run samtools stats, flagstat and idxstats +// */ +// BAM_SORT_SAMTOOLS ( BOWTIE2_ALIGN.out.bam ) +// BAM_SORT_SAMTOOLS_SPIKEIN ( BOWTIE2_SPIKEIN_ALIGN.out.bam ) + +// emit: +// bowtie2_version = BOWTIE2_ALIGN.out.version // path: *.version.txt +// samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt + +// orig_bam = BOWTIE2_ALIGN.out.bam // channel: [ val(meta), bam ] +// orig_spikein_bam = BOWTIE2_SPIKEIN_ALIGN.out.bam // channel: [ val(meta), bam ] + +// bowtie2_log = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log_final ] +// bowtie2_spikein_log = BOWTIE2_SPIKEIN_ALIGN.out.log // channel: [ val(meta), log_final ] + +// bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] +// bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] +// stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] +// flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] +// idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + +// spikein_bam = BAM_SORT_SAMTOOLS_SPIKEIN.out.bam // channel: [ val(meta), [ bam ] ] +// spikein_bai = BAM_SORT_SAMTOOLS_SPIKEIN.out.bai // channel: [ val(meta), [ bai ] ] +// spikein_stats = BAM_SORT_SAMTOOLS_SPIKEIN.out.stats // channel: [ val(meta), [ stats ] ] +// spikein_flagstat = BAM_SORT_SAMTOOLS_SPIKEIN.out.flagstat // channel: [ val(meta), [ flagstat ] ] +// spikein_idxstats = BAM_SORT_SAMTOOLS_SPIKEIN.out.idxstats // channel: [ val(meta), [ idxstats ] ] +// } From 6f9bd783c104d0518b5db82eb59ea36978babfd8 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 19 Mar 2021 13:07:18 +0000 Subject: [PATCH 052/675] Template update for nf-core/tools version 1.13.1 --- .github/workflows/branch.yml | 12 ++++++++++-- Dockerfile | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 535a6a06..ae838f95 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -23,11 +23,19 @@ jobs: uses: mshick/add-pr-comment@v1 with: message: | + ## This PR is against the `master` branch :x: + + * Do not close this PR + * Click _Edit_ and change the `base` to `dev` + * This CI test will remain failed until you push a new commit + + --- + Hi @${{ github.event.pull_request.user.login }}, - It looks like this pull-request is has been made against the ${{github.event.pull_request.base.repo.full_name }} `master` branch. + It looks like this pull-request is has been made against the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `master` branch. The `master` branch on nf-core repositories should always contain code from the latest release. - Because of this, PRs to `master` are only allowed if they come from the ${{github.event.pull_request.base.repo.full_name }} `dev` branch. + Because of this, PRs to `master` are only allowed if they come from the [${{github.event.pull_request.head.repo.full_name }}](https://github.com/${{github.event.pull_request.head.repo.full_name }}) `dev` branch. You do not need to close this PR, you can change the target branch to `dev` by clicking the _"Edit"_ button at the top of this page. Note that even after this, the test will continue to show as failing until you push a new commit. diff --git a/Dockerfile b/Dockerfile index 295d918b..5f6e5692 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM nfcore/base:1.13 +FROM nfcore/base:1.13.1 LABEL authors="Chris Cheshire and Charlotte West" \ description="Docker image containing all software requirements for the nf-core/cutandrun pipeline" From 6e2554dc938dc48183bbd9c71528bb22d1d98f4f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 22 Mar 2021 14:28:47 +0000 Subject: [PATCH 053/675] add blank line to end of file --- dev/docker/deseq2_diff/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/docker/deseq2_diff/Dockerfile b/dev/docker/deseq2_diff/Dockerfile index 4584c396..0f96d9d9 100644 --- a/dev/docker/deseq2_diff/Dockerfile +++ b/dev/docker/deseq2_diff/Dockerfile @@ -25,4 +25,4 @@ RUN conda update -n base -c defaults conda # Install conda packages COPY environment.yml / -RUN conda env update -f /environment.yml && conda clean -a \ No newline at end of file +RUN conda env update -f /environment.yml && conda clean -a From 99486f2b87b61b353083349948288df62bc5e8f7 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 23 Mar 2021 11:57:10 +0000 Subject: [PATCH 054/675] fix file_list bug --- bin/r/deseq2_diff.r | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index 679abe2b..810e817a 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -97,17 +97,16 @@ setwd(opt$outdir) # Init mPeak = GRanges() file_count = 0 - +file_list=vector() # Read in bed files that match the control or treatment group for(group in groups){ search_res <- str_detect(bed_list, group) - file_list <- bed_list[search_res] - - for(file in file_list) { - peakRes = read.table(file, header = FALSE, fill = TRUE) - mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = "*") %>% append(mPeak, .) - file_count = file_count + 1 - } + file_list <- bed_list[search_res] %>% append(file_list, .) +} +for(file in file_list) { + peakRes = read.table(file, header = FALSE, fill = TRUE) + mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = "*") %>% append(mPeak, .) + file_count = file_count + 1 } # Create replicate counts and names @@ -115,6 +114,7 @@ group_count = length(groups) rep_count = file_count / group_count reps = paste0("rep", 1:rep_count) +#if(FALSE) { # Create peak table and count matrix masterPeak = reduce(mPeak) countMat = matrix(NA, length(masterPeak), file_count) @@ -185,7 +185,7 @@ if (file.exists(RLogFile) == FALSE) { print(a) sink() } - +#} ################################################ ################################################ ################################################ From 3d11ddc27a208726e77a5276f9c89cda5f89e246 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 23 Mar 2021 14:28:28 +0000 Subject: [PATCH 055/675] remove merge error --- bin/r/deseq2_diff.r | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index 810e817a..642fe928 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -114,7 +114,6 @@ group_count = length(groups) rep_count = file_count / group_count reps = paste0("rep", 1:rep_count) -#if(FALSE) { # Create peak table and count matrix masterPeak = reduce(mPeak) countMat = matrix(NA, length(masterPeak), file_count) @@ -124,6 +123,7 @@ colnames(countMat) = paste(rep(groups, 2), rep(reps, each = 2), sep = "_") for(i in seq_along(groups)){ search_res <- str_detect(bam_list, groups[i]) file_list <- bam_list[search_res] + print(file_list) for(j in seq_along(file_list)) { fragment_counts <- getCounts(file_list[j], masterPeak, paired = TRUE, by_rg = FALSE, format = "bam") @@ -131,6 +131,7 @@ for(i in seq_along(groups)){ } } + ################################################ ################################################ ## RUN DESEQ2 ## @@ -140,7 +141,6 @@ for(i in seq_along(groups)){ selectR = which(rowSums(countMat) > opt$count_thresh) ## Create index list for peak count filter dataS = countMat[selectR,] ## Select data from filter condition = factor(rep(groups, each = length(reps))) - dds = DESeqDataSetFromMatrix(countData = dataS, colData = DataFrame(condition), design = ~ condition) @@ -149,6 +149,7 @@ normDDS = counts(DDS, normalized = TRUE) ## normalization with respect to the se colnames(normDDS) = paste0(colnames(normDDS), "_norm") res = results(DDS, independentFiltering = FALSE, altHypothesis = "greaterAbs") + ################################################ ################################################ ## FORMAT RESULTS ## @@ -161,9 +162,13 @@ countMatDiff peakFiltered = masterPeak[selectR,] peakFiltered -diffFinal = merge(peakFiltered, countMatDiff, by=0) -#summary(diffFinal) +################################################ +################################################ +## PLOT QC ## +################################################ +################################################ +if(FALSE) { ################################################ ################################################ ## OUTPUT RESULTS ## @@ -185,7 +190,7 @@ if (file.exists(RLogFile) == FALSE) { print(a) sink() } -#} +} ################################################ ################################################ ################################################ From ab387070e1b865cf6d4259180c3867321f9d02a7 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 23 Mar 2021 15:24:25 +0000 Subject: [PATCH 056/675] run deseq2 now formatted like nfcore pipelines --- bin/r/deseq2_diff.r | 73 ++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index 642fe928..bb2628d2 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -38,6 +38,7 @@ option_list <- list( make_option(c("-o", "--outdir" ), type="character", default='./' , metavar="path" , help="Output directory." ), make_option(c("-p", "--outprefix" ), type="character", default='deseq2', metavar="string" , help="Output prefix." ), make_option(c("-s", "--count_thresh" ), type="integer", default='5', metavar="string" , help="TODO" ), + make_option(c("-v", "--vst" ), type="logical" , default=FALSE , metavar="boolean", help="Run vst transform instead of rlog." ), make_option(c("-@", "--cores" ), type="integer" , default=1 , metavar="integer", help="Number of cores." ) ) @@ -83,17 +84,6 @@ if (length(bed_list) != length(bam_list)) { # Create group list groups = c(opt$control, opt$treatment) -if (file.exists(opt$outdir) == FALSE) { - dir.create(opt$outdir,recursive=TRUE) -} -setwd(opt$outdir) - -################################################ -################################################ -## READ IN DATA FILES ## -################################################ -################################################ - # Init mPeak = GRanges() file_count = 0 @@ -123,7 +113,6 @@ colnames(countMat) = paste(rep(groups, 2), rep(reps, each = 2), sep = "_") for(i in seq_along(groups)){ search_res <- str_detect(bam_list, groups[i]) file_list <- bam_list[search_res] - print(file_list) for(j in seq_along(file_list)) { fragment_counts <- getCounts(file_list[j], masterPeak, paired = TRUE, by_rg = FALSE, format = "bam") @@ -138,29 +127,53 @@ for(i in seq_along(groups)){ ################################################ ################################################ -selectR = which(rowSums(countMat) > opt$count_thresh) ## Create index list for peak count filter +if (file.exists(opt$outdir) == FALSE) { + dir.create(opt$outdir,recursive=TRUE) +} +setwd(opt$outdir) + +## Create index list for peak count filter +selectR = which(rowSums(countMat) > opt$count_thresh) dataS = countMat[selectR,] ## Select data from filter condition = factor(rep(groups, each = length(reps))) -dds = DESeqDataSetFromMatrix(countData = dataS, - colData = DataFrame(condition), - design = ~ condition) + +samples.vec <- sort(colnames(countMat)) +groups <- sub("_[^_]+$", "", samples.vec) +if (length(unique(groups)) == 1 || length(unique(groups)) == length(samples.vec)) { + quit(save = "no", status = 0, runLast = FALSE) +} + +DDSFile <- paste(opt$outprefix,".dds.RData",sep="") +if (file.exists(DDSFile) == FALSE) { + dds = DESeqDataSetFromMatrix(countData = dataS,colData = DataFrame(condition),design = ~ condition) + dds <- DESeq(dds, parallel=TRUE, BPPARAM=MulticoreParam(opt$cores)) + if (!opt$vst) { + vst_name <- "rlog" + rld <- rlog(dds) + } else { + vst_name <- "vst" + rld <- varianceStabilizingTransformation(dds) + } + assay(dds, vst_name) <- assay(rld) + save(dds,file=DDSFile) +} else { + load(DDSFile) + vst_name <- intersect(assayNames(dds), c("vst", "rlog")) + if (length(vst_name)==0) { # legacy might mean vst was saved as a separate object called rld + vst_name <- "loaded_rld" + assay(dds, vst_name) <- assay(rld) + } else { + vst_name==vst_name[1] + } +} + +## Normalised results DDS = DESeq(dds) normDDS = counts(DDS, normalized = TRUE) ## normalization with respect to the sequencing depth colnames(normDDS) = paste0(colnames(normDDS), "_norm") res = results(DDS, independentFiltering = FALSE, altHypothesis = "greaterAbs") - - -################################################ -################################################ -## FORMAT RESULTS ## -################################################ -################################################ - countMatDiff = cbind(dataS, normDDS, res) ## Combine deseq results -countMatDiff - -peakFiltered = masterPeak[selectR,] -peakFiltered +write.csv(countMatDiff, paste(opt$outprefix, "count_mat_diff.csv", sep=""), row.names=FALSE) ################################################ ################################################ @@ -168,14 +181,12 @@ peakFiltered ################################################ ################################################ -if(FALSE) { ################################################ ################################################ ## OUTPUT RESULTS ## ################################################ ################################################ -#write.csv(countMatDiff,"count_mat_diff.csv", row.names=FALSE) ################################################ ################################################ @@ -190,7 +201,7 @@ if (file.exists(RLogFile) == FALSE) { print(a) sink() } -} + ################################################ ################################################ ################################################ From e6419ef0a5abd2434b0a113c6d4218a6f6d19205 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 23 Mar 2021 15:32:50 +0000 Subject: [PATCH 057/675] Template update for nf-core/tools version 1.13.2 --- .github/workflows/ci.yml | 2 +- .github/workflows/linting.yml | 57 ++++++++++++++++++++++++++++++++- Dockerfile | 2 +- bin/markdown_to_html.py | 0 bin/scrape_software_versions.py | 0 lib/NfcoreSchema.groovy | 2 +- 6 files changed, 59 insertions(+), 4 deletions(-) mode change 100644 => 100755 bin/markdown_to_html.py mode change 100644 => 100755 bin/scrape_software_versions.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a4249351..604add2e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['20.04.0', ''] + nxf_ver: ['20.04.0', '21.03.0-edge'] steps: - name: Check out pipeline code uses: actions/checkout@v2 diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 58e281df..fcde400c 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -19,6 +19,34 @@ jobs: run: npm install -g markdownlint-cli - name: Run Markdownlint run: markdownlint ${GITHUB_WORKSPACE} -c ${GITHUB_WORKSPACE}/.github/markdownlint.yml + + # If the above check failed, post a comment on the PR explaining the failure + - name: Post PR comment + if: failure() + uses: mshick/add-pr-comment@v1 + with: + message: | + ## Markdown linting is failing + + To keep the code consistent with lots of contributors, we run automated code consistency checks. + To fix this CI test, please run: + + * Install `markdownlint-cli` + * On Mac: `brew install markdownlint-cli` + * Everything else: [Install `npm`](https://www.npmjs.com/get-npm) then [install `markdownlint-cli`](https://www.npmjs.com/package/markdownlint-cli) (`npm install -g markdownlint-cli`) + * Fix the markdown errors + * Automatically: `markdownlint . --config .github/markdownlint.yml --fix` + * Manually resolve anything left from `markdownlint . --config .github/markdownlint.yml` + + Once you push these changes the test should pass, and you can hide this comment :+1: + + We highly recommend setting up markdownlint in your code editor so that this formatting is done automatically on save. Ask about it on Slack for help! + + Thanks again for your contribution! + repo-token: ${{ secrets.GITHUB_TOKEN }} + allow-repeats: false + + YAML: runs-on: ubuntu-latest steps: @@ -29,7 +57,34 @@ jobs: - name: Install yaml-lint run: npm install -g yaml-lint - name: Run yaml-lint - run: yamllint $(find ${GITHUB_WORKSPACE} -type f -name "*.yml") + run: yamllint $(find ${GITHUB_WORKSPACE} -type f -name "*.yml" -o -name "*.yaml") + + # If the above check failed, post a comment on the PR explaining the failure + - name: Post PR comment + if: failure() + uses: mshick/add-pr-comment@v1 + with: + message: | + ## YAML linting is failing + + To keep the code consistent with lots of contributors, we run automated code consistency checks. + To fix this CI test, please run: + + * Install `yaml-lint` + * [Install `npm`](https://www.npmjs.com/get-npm) then [install `yaml-lint`](https://www.npmjs.com/package/yaml-lint) (`npm install -g yaml-lint`) + * Fix the markdown errors + * Run the test locally: `yamllint $(find . -type f -name "*.yml" -o -name "*.yaml")` + * Fix any reported errors in your YAML files + + Once you push these changes the test should pass, and you can hide this comment :+1: + + We highly recommend setting up yaml-lint in your code editor so that this formatting is done automatically on save. Ask about it on Slack for help! + + Thanks again for your contribution! + repo-token: ${{ secrets.GITHUB_TOKEN }} + allow-repeats: false + + nf-core: runs-on: ubuntu-latest steps: diff --git a/Dockerfile b/Dockerfile index 5f6e5692..c3677d0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM nfcore/base:1.13.1 +FROM nfcore/base:1.13.2 LABEL authors="Chris Cheshire and Charlotte West" \ description="Docker image containing all software requirements for the nf-core/cutandrun pipeline" diff --git a/bin/markdown_to_html.py b/bin/markdown_to_html.py old mode 100644 new mode 100755 diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py old mode 100644 new mode 100755 diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 78e8c65d..54935ec8 100644 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -219,7 +219,7 @@ class NfcoreSchema { } } } - if(rawSchema.keySet().contains('properties') && rawSchema.get('properties').containsKey(ignore_param)) { + if(rawSchema.keySet().contains('properties') && rawSchema.get('properties').keySet().contains(ignore_param)) { rawSchema.get("properties").remove(ignore_param) } if(rawSchema.keySet().contains('required') && rawSchema.required.contains(ignore_param)) { From 8dfaf71572fec14f5ce25b0a52f622ef7cdabcca Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 09:21:17 +0000 Subject: [PATCH 058/675] add plotting section copied from nfcore --- bin/r/deseq2_diff.r | 136 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index bb2628d2..ca026973 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -23,6 +23,9 @@ library(magrittr) library(GenomicRanges) library(chromVAR) library(DESeq2) +library(ggplot2) +library(RColorBrewer) +#library(pheatmap) ################################################ ################################################ @@ -181,6 +184,139 @@ write.csv(countMatDiff, paste(opt$outprefix, "count_mat_diff.csv", sep=""), row. ################################################ ################################################ +##' PCA pre-processeor +##' +##' Generate all the necessary information to plot PCA from a DESeq2 object +##' in which an assay containing a variance-stabilised matrix of counts is +##' stored. Copied from DESeq2::plotPCA, but with additional ability to +##' say which assay to run the PCA on, and adds an assessment of how well +##' each PC explains the experimental grouping of the data. +##' +##' @param object The DESeq2DataSet object. +##' @param intgroup interesting groups: a character vector of names in 'colData(x)' to use for grouping. +##' @param ntop number of top genes to use for principla components, selected by highest row variance. +##' @param assay the name or index of the assay that stores the variance-stabilised data. +##' @return A data.frame containing the projected data alongside the grouping columns. +##' A 'percentVar' attribute is set which includes the percentage of variation each PC explains, +##' and additionally how much the variation within that PC is explained by the grouping variable. +##' @author Gavin Kelly +plotPCA_vst <- function (object, intgroup = "condition", ntop = 500, assay=length(assays(object))) { + rv <- rowVars(assay(object, assay)) + select <- order(rv, decreasing = TRUE)[seq_len(min(ntop, length(rv)))] + pca <- prcomp(t(assay(object, assay)[select, ])) + percentVar <- pca$sdev^2/sum(pca$sdev^2) + if (!all(intgroup %in% names(colData(object)))) { + stop("the argument 'intgroup' should specify columns of colData(dds)") + } + intgroup.df <- as.data.frame(colData(object)[, intgroup, drop = FALSE]) + group <- if (length(intgroup) > 1) { + factor(apply(intgroup.df, 1, paste, collapse = ":")) + } else { + colData(object)[[intgroup]] + } + d <- cbind(pca$x, group = group, intgroup.df, name = colnames(object)) + percentFrame <- data.frame(PC=seq(along=percentVar), percentVar=100*percentVar, groupR=0.0) + for (ipc in seq(along=percentVar)) { + fit1 <- lm(pca$x[,ipc] ~ group) + percentFrame$groupR[ipc] <- 100*summary(fit1)$r.squared + } + attr(d, "percentVar") <- percentFrame + return(d) +} + +PlotFile <- paste(opt$outprefix,".plots.pdf",sep="") +if (file.exists(PlotFile) == FALSE) { + pdf(file=PlotFile,onefile=TRUE,width=7,height=7) + + ## PCA + ntop <- c(500, Inf) + for (n_top_var in ntop) { + pca.data <- plotPCA_vst(dds, assay=vst_name,intgroup=c("condition"),ntop=n_top_var) + percentVar <- round(attr(pca.data, "percentVar")$percentVar) + plot_subtitle <- ifelse(n_top_var==Inf, "All peaks", paste("Top", n_top_var, "peaks")) + pl <- ggplot(pca.data, aes(PC1, PC2, color=condition)) + + geom_point(size=3) + + xlab(paste0("PC1: ",percentVar[1],"% variance")) + + ylab(paste0("PC2: ",percentVar[2],"% variance")) + + labs(title = paste0("First PCs on ", vst_name, "-transformed data"), subtitle = plot_subtitle) + + theme(legend.position="top", + panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + panel.background = element_blank(), + panel.border = element_rect(colour = "black", fill=NA, size=1)) + print(pl) + + pl <- ggplot(attr(pca.data, "percentVar"), aes(x=PC, y=percentVar)) + + geom_line(aes(colour="explained by PC")) + + geom_line(aes(y=groupR, colour="of PC explained by condition")) + + scale_x_continuous(breaks=seq(along=percentVar), minor_breaks=NULL) + + labs(title="Diagnostics of PCs", subtitle=plot_subtitle, x="Component", y="Percentage explaned", colour="Percentage variation") + + theme_bw() + + theme(legend.position="top") + print(pl) + + pc_r <- order(attr(pca.data, "percentVar")$groupR, decreasing=TRUE) + pl <- ggplot(pca.data, aes_string(paste0("PC", pc_r[1]), paste0("PC", pc_r[2]), color="condition")) + + geom_point(size=3) + + xlab(paste0("PC", pc_r[1], ": ",percentVar[pc_r[1]],"% variance")) + + ylab(paste0("PC", pc_r[2], ": ",percentVar[pc_r[2]],"% variance")) + + labs(title = paste0("Group-Explanatory PCs of ", vst_name, "-tranformed data"), subtitle = plot_subtitle) + + theme(legend.position="top", + panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + panel.background = element_blank(), + panel.border = element_rect(colour = "black", fill=NA, size=1)) + print(pl) + } # at end of loop, we'll be using the user-defined ntop if any, else all peaks + + ## WRITE PC1 vs PC2 VALUES TO FILE + pca.vals <- pca.data[,1:2] + colnames(pca.vals) <- paste0(colnames(pca.vals), ": ", percentVar[1:2], '% variance') + pca.vals <- cbind(sample = rownames(pca.vals), pca.vals) + write.table(pca.vals,file=paste(opt$outprefix,".pca.vals.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) + + ## SAMPLE CORRELATION HEATMAP + sampleDists <- dist(t(assay(dds, vst_name))) + sampleDistMatrix <- as.matrix(sampleDists) + colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) + pheatmap( + sampleDistMatrix, + clustering_distance_rows=sampleDists, + clustering_distance_cols=sampleDists, + col=colors, + main=paste("Euclidean distance between", vst_name, "of samples") + ) + + ## WRITE SAMPLE DISTANCES TO FILE + write.table(cbind(sample = rownames(sampleDistMatrix), sampleDistMatrix),file=paste(opt$outprefix,".sample.dists.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=FALSE) + + dev.off() +} + +################################################ +################################################ +## SAVE SIZE FACTORS ## +################################################ +################################################ +if(FALSE){ +SizeFactorsDir <- "size_factors/" +if (file.exists(SizeFactorsDir) == FALSE) { + dir.create(SizeFactorsDir,recursive=TRUE) +} + +NormFactorsFile <- paste(SizeFactorsDir,opt$outprefix,".size_factors.RData",sep="") +if (file.exists(NormFactorsFile) == FALSE) { + normFactors <- sizeFactors(dds) + save(normFactors,file=NormFactorsFile) + + for (name in names(sizeFactors(dds))) { + sizeFactorFile <- paste(SizeFactorsDir,name,".txt",sep="") + if (file.exists(sizeFactorFile) == FALSE) { + write(as.numeric(sizeFactors(dds)[name]),file=sizeFactorFile) + } + } +} +} ################################################ ################################################ ## OUTPUT RESULTS ## From a616e908abb02ba7afd45d998e18c23e2f2c2a11 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 24 Mar 2021 09:57:39 +0000 Subject: [PATCH 059/675] Updated deseq 2 to working env --- dev/docker/deseq2_diff/environment.yml | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/dev/docker/deseq2_diff/environment.yml b/dev/docker/deseq2_diff/environment.yml index f5a154da..5b441bdc 100644 --- a/dev/docker/deseq2_diff/environment.yml +++ b/dev/docker/deseq2_diff/environment.yml @@ -5,10 +5,23 @@ channels: - defaults dependencies: - conda-forge::r-optparse=1.6.6 + - conda-forge::r-ggplot2=3.3.2 + - conda-forge::r-rcolorbrewer=1.1_2 + - conda-forge::r-pheatmap=1.0.12 + - bioconda::bioconductor-deseq2=1.28.0 + - bioconda::bioconductor-biocparallel=1.22.0 - conda-forge::r-stringr=1.4.0 - conda-forge::r-magrittr=2.0.1 - - bioconda::bioconductor-biocparallel=1.24.0 - - bioconda::bioconductor-genomicranges=1.42.0 - - bioconda::bioconductor-chromvar=1.12.0 - - bioconda::bioconductor-deseq2=1.30.0 + - bioconda::bioconductor-chromvar=1.10.0 + - bioconda::bioconductor-genomicranges=1.40.0 + + + # - conda-forge::r-optparse=1.6.6 + # - conda-forge::r-stringr=1.4.0 + # - conda-forge::r-magrittr=2.0.1 + # - conda-forge::r-ggplot2=3.1.1 + # - bioconda::bioconductor-biocparallel=1.24.0 + # - bioconda::bioconductor-genomicranges=1.42.0 + # - bioconda::bioconductor-chromvar=1.12.0 + # - bioconda::bioconductor-deseq2=1.30.0 \ No newline at end of file From e48f7a6f71b03fa4f8b2959be58d0475b0e70dda Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 10:45:17 +0000 Subject: [PATCH 060/675] volcano plot added --- bin/r/deseq2_diff.r | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index ca026973..02aac797 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -25,7 +25,7 @@ library(chromVAR) library(DESeq2) library(ggplot2) library(RColorBrewer) -#library(pheatmap) +library(pheatmap) ################################################ ################################################ @@ -269,6 +269,9 @@ if (file.exists(PlotFile) == FALSE) { print(pl) } # at end of loop, we'll be using the user-defined ntop if any, else all peaks + ## VOLCANO PLOT + plotMA(dds) + ## WRITE PC1 vs PC2 VALUES TO FILE pca.vals <- pca.data[,1:2] colnames(pca.vals) <- paste0(colnames(pca.vals), ": ", percentVar[1:2], '% variance') @@ -298,7 +301,7 @@ if (file.exists(PlotFile) == FALSE) { ## SAVE SIZE FACTORS ## ################################################ ################################################ -if(FALSE){ +#if(FALSE){ SizeFactorsDir <- "size_factors/" if (file.exists(SizeFactorsDir) == FALSE) { dir.create(SizeFactorsDir,recursive=TRUE) @@ -316,13 +319,7 @@ if (file.exists(NormFactorsFile) == FALSE) { } } } -} -################################################ -################################################ -## OUTPUT RESULTS ## -################################################ -################################################ - +#} ################################################ ################################################ From a7903d0f3c46493d67411ace4578419d97e2c626 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 11:01:22 +0000 Subject: [PATCH 061/675] tidy up --- bin/r/deseq2_diff.r | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index 02aac797..9b5eb27f 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -6,9 +6,9 @@ ################################################ ################################################ -## TODO - -## TODO: TIDY CAMEL CASE AND SNAKE CASE +## DIFFERENTIAL ANALYSIS, SCATTERPLOTS, HEATMAP AND PCA FROM COUNT FILE + ## - COUNT FILE IS PRODUCED FROM SEACR PEAK BED FILES AND ALIGNMENT BAMS + ## - PACKAGES BELOW NEED TO BE AVAILABLE TO LOAD WHEN RUNNING R ################################################ ################################################ @@ -123,7 +123,6 @@ for(i in seq_along(groups)){ } } - ################################################ ################################################ ## RUN DESEQ2 ## @@ -301,7 +300,7 @@ if (file.exists(PlotFile) == FALSE) { ## SAVE SIZE FACTORS ## ################################################ ################################################ -#if(FALSE){ + SizeFactorsDir <- "size_factors/" if (file.exists(SizeFactorsDir) == FALSE) { dir.create(SizeFactorsDir,recursive=TRUE) @@ -319,7 +318,6 @@ if (file.exists(NormFactorsFile) == FALSE) { } } } -#} ################################################ ################################################ From b8bc5bf7f5cfb6f9d2f55c94e425262fff62a215 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 11:02:06 +0000 Subject: [PATCH 062/675] working conda env for deseq2 --- dev/docker/deseq2_diff/environment.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dev/docker/deseq2_diff/environment.yml b/dev/docker/deseq2_diff/environment.yml index f5a154da..aef167a3 100644 --- a/dev/docker/deseq2_diff/environment.yml +++ b/dev/docker/deseq2_diff/environment.yml @@ -5,10 +5,12 @@ channels: - defaults dependencies: - conda-forge::r-optparse=1.6.6 + - conda-forge::r-ggplot2=3.3.2 + - conda-forge::r-rcolorbrewer=1.1_2 + - conda-forge::r-pheatmap=1.0.12 + - bioconda::bioconductor-deseq2=1.28.0 + - bioconda::bioconductor-biocparallel=1.22.0 - conda-forge::r-stringr=1.4.0 - conda-forge::r-magrittr=2.0.1 - - bioconda::bioconductor-biocparallel=1.24.0 - - bioconda::bioconductor-genomicranges=1.42.0 - - bioconda::bioconductor-chromvar=1.12.0 - - bioconda::bioconductor-deseq2=1.30.0 - \ No newline at end of file + - bioconda::bioconductor-chromvar=1.10.0 + - bioconda::bioconductor-genomicranges=1.40.0 \ No newline at end of file From 2d46beebc135f97ad4d1cefbb3963b367f708c0c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 11:14:58 +0000 Subject: [PATCH 063/675] initialise new deseq2 module --- modules/local/process/deseq2_qc.nf | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 modules/local/process/deseq2_qc.nf diff --git a/modules/local/process/deseq2_qc.nf b/modules/local/process/deseq2_qc.nf new file mode 100644 index 00000000..c98b31fc --- /dev/null +++ b/modules/local/process/deseq2_qc.nf @@ -0,0 +1,4 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) \ No newline at end of file From 67abdf84e256ca167c0e32c812727b622932317a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 11:21:04 +0000 Subject: [PATCH 064/675] add conda env and module skeleton --- modules/local/process/deseq2_qc.nf | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/local/process/deseq2_qc.nf b/modules/local/process/deseq2_qc.nf index c98b31fc..394beb4c 100644 --- a/modules/local/process/deseq2_qc.nf +++ b/modules/local/process/deseq2_qc.nf @@ -1,4 +1,22 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) \ No newline at end of file +def options = initOptions(params.options) + +process DESEQ2_QC { + tag "DESeq2" + label "process_medium" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } + + conda (params.enable_conda ? "conda-forge::r-optparse=1.6.6 conda-forge::r-ggplot2=3.3.2 conda-forge::r-rcolorbrewer=1.1_2 conda-forge::r-pheatmap=1.0.12 bioconda::bioconductor-deseq2=1.28.0 bioconda::bioconductor-biocparallel=1.22.0 conda-forge::r-stringr=1.4.0 conda-forge::r-magrittr=2.0.1 bioconda::bioconductor-chromvar=1.10.0 bioconda::bioconductor-genomicranges=1.40.0" : null) + container "luslab/cutrun-ds2-dev" + + input: + + output: + + script: + +} \ No newline at end of file From 14124d47852fe7e3337e81747e7b069cf65fec96 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 14:31:31 +0000 Subject: [PATCH 065/675] view channel --- cutandrun.nf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index 754192d0..3caa07a6 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -341,13 +341,15 @@ workflow CUTANDRUN { .map { row -> [row[0].id, row[0] ].flatten()} .set { ch_spikein_bt2_meta } + ANNOTATE_BT2_META.out.output | view + ANNOTATE_BT2_META.out.output .map { row -> [row[0].id, row ].flatten()} .join ( ch_spikein_bt2_meta ) .map { row -> [ row[1] << row[3], row[2] ] } .set { ch_combined_meta } - ANNOTATE_BT2_SPIKEIN_META.out.output | view + // ANNOTATE_BT2_SPIKEIN_META.out.output | view /* * CHANNEL: Calculate scale factor for each sample and join to main data flow From 0585c4cf388a05d9f663591455b1f931b878bcb8 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 14:31:49 +0000 Subject: [PATCH 066/675] deseq2 module progress --- modules/local/process/deseq2_qc.nf | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/modules/local/process/deseq2_qc.nf b/modules/local/process/deseq2_qc.nf index 394beb4c..a203f6b1 100644 --- a/modules/local/process/deseq2_qc.nf +++ b/modules/local/process/deseq2_qc.nf @@ -1,6 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] +params.multiqc_label = '' def options = initOptions(params.options) process DESEQ2_QC { @@ -14,9 +15,31 @@ process DESEQ2_QC { container "luslab/cutrun-ds2-dev" input: + path peak_beds + path bams output: + path "*.pdf" , optional:true, emit: pdf + path "*.RData" , optional:true, emit: rdata + path "*pca.vals.txt" , optional:true, emit: pca_txt + path "*pca.vals_mqc.tsv" , optional:true, emit: pca_multiqc + path "*sample.dists.txt" , optional:true, emit: dists_txt + path "*sample.dists_mqc.tsv", optional:true, emit: dists_multiqc + path "*.log" , optional:true, emit: log + path "size_factors" , optional:true, emit: size_factors + path "*.version.txt" , emit: version script: - + def software = getSoftwareName(task.process) + def label_lower = params.multiqc_label.toLowerCase() + def label_upper = params.multiqc_label.toUpperCase() + """ + deseq2_diff.r \\ + --control \\ + --treatment \\ + --bed \\ + --bam \\ + --cores $task.cpus \\ + $options.args + """ } \ No newline at end of file From 19b610a7cdd982caf46ffb2b18bca6549ea7e060 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 14:43:59 +0000 Subject: [PATCH 067/675] port in atacseq pairwise comparisons --- bin/r/deseq2_diff.r | 152 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 2 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index 9b5eb27f..e52e2ac4 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -177,12 +177,160 @@ res = results(DDS, independentFiltering = FALSE, altHypothesis = "greaterAbs") countMatDiff = cbind(dataS, normDDS, res) ## Combine deseq results write.csv(countMatDiff, paste(opt$outprefix, "count_mat_diff.csv", sep=""), row.names=FALSE) + ################################################ ################################################ -## PLOT QC ## +## NEW PLOT QC ## +################################################ +################################################ + +PlotFile <- paste(opt$outprefix,".plots.pdf",sep="") +if (file.exists(PlotFile) == FALSE) { + pdf(file=PlotFile,onefile=TRUE,width=7,height=7) + + ## PCA + pca.data <- DESeq2::plotPCA(rld,intgroup=c("condition"),returnData=TRUE) + percentVar <- round(100 * attr(pca.data, "percentVar")) + plot <- ggplot(pca.data, aes(PC1, PC2, color=condition)) + + geom_point(size=3) + + xlab(paste0("PC1: ",percentVar[1],"% variance")) + + ylab(paste0("PC2: ",percentVar[2],"% variance")) + + theme(panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + panel.background = element_blank(), + panel.border = element_rect(colour = "black", fill=NA, size=1)) + print(plot) + + ## WRITE PC1 vs PC2 VALUES TO FILE + pca.vals <- pca.data[,1:2] + colnames(pca.vals) <- paste(colnames(pca.vals),paste(percentVar,'% variance',sep=""), sep=": ") + pca.vals <- cbind(sample = rownames(pca.vals), pca.vals) + write.table(pca.vals,file=paste(opt$outprefix,".pca.vals.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) + + ## SAMPLE CORRELATION HEATMAP + sampleDists <- dist(t(assay(rld))) + sampleDistMatrix <- as.matrix(sampleDists) + colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) + pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) + + ## WRITE SAMPLE DISTANCES TO FILE + write.table(cbind(sample = rownames(sampleDistMatrix), sampleDistMatrix),file=paste(opt$outprefix,".sample.dists.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=FALSE) + + dev.off() +} + ################################################ ################################################ +## LOOP THROUGH COMPARISONS ## +################################################ +################################################ + +if (FALSE) { +ResultsFile <- paste(opt$outprefix,".results.txt",sep="") +if (file.exists(ResultsFile) == FALSE) { + + raw.counts <- counts(dds,normalized=FALSE) + colnames(raw.counts) <- paste(colnames(raw.counts),'raw',sep='.') + pseudo.counts <- counts(dds,normalized=TRUE) + colnames(pseudo.counts) <- paste(colnames(pseudo.counts),'pseudo',sep='.') + + deseq2_results_list <- list() + comparisons <- combn(unique(groups),2) + for (idx in 1:ncol(comparisons)) { + + control.group <- comparisons[1,idx] + treat.group <- comparisons[2,idx] + CompPrefix <- paste(control.group,treat.group,sep="vs") + cat("Saving results for ",CompPrefix," ...\n",sep="") + + CompOutDir <- paste(CompPrefix,'/',sep="") + if (file.exists(CompOutDir) == FALSE) { + dir.create(CompOutDir,recursive=TRUE) + } + + control.samples <- samples.vec[which(groups == control.group)] + treat.samples <- samples.vec[which(groups == treat.group)] + comp.samples <- c(control.samples,treat.samples) + + comp.results <- results(dds,contrast=c("condition",c(control.group,treat.group))) + comp.df <- as.data.frame(comp.results) + comp.table <- cbind(interval.table, as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) + + ## WRITE RESULTS FILE + CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.results.txt",sep="") + write.table(comp.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + + ## FILTER RESULTS BY FDR & LOGFC AND WRITE RESULTS FILE + pdf(file=paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.plots.pdf",sep=""),width=10,height=8) + if (length(comp.samples) > 2) { + for (MIN_FDR in c(0.01,0.05)) { + + ## SUBSET RESULTS BY FDR + pass.fdr.table <- subset(comp.table, padj < MIN_FDR) + pass.fdr.up.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange > 0) + pass.fdr.down.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange < 0) + + ## SUBSET RESULTS BY FDR AND LOGFC + pass.fdr.logFC.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1) + pass.fdr.logFC.up.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange > 0) + pass.fdr.logFC.down.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange < 0) + + ## WRITE RESULTS FILE + CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.txt",sep="") + CompBEDFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.bed",sep="") + write.table(pass.fdr.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + write.table(pass.fdr.table[,c("Chr","Start","End","Geneid","log2FoldChange","Strand")], file=CompBEDFile, col.names=FALSE, row.names=FALSE, sep='\t', quote=FALSE) + + ## MA PLOT & VOLCANO PLOT + DESeq2::plotMA(comp.results, main=paste("MA plot FDR <= ",MIN_FDR,sep=""), ylim=c(-2,2),alpha=MIN_FDR) + plot(comp.table$log2FoldChange, -1*log10(comp.table$padj), col=ifelse(comp.table$padj<=MIN_FDR, "red", "black"), xlab="logFC", ylab="-1*log10(FDR)", main=paste("Volcano plot FDR <=",MIN_FDR,sep=" "), pch=20) + + ## ADD COUNTS TO LOGFILE + cat(CompPrefix," genes with FDR <= ",MIN_FDR,": ",nrow(pass.fdr.table)," (up=",nrow(pass.fdr.up.table),", down=",nrow(pass.fdr.down.table),")","\n",file=LogFile,append=TRUE,sep="") + cat(CompPrefix," genes with FDR <= ",MIN_FDR," & FC > 2: ",nrow(pass.fdr.logFC.table)," (up=",nrow(pass.fdr.logFC.up.table),", down=",nrow(pass.fdr.logFC.down.table),")","\n",file=LogFile,append=TRUE,sep="") + + } + cat("\n",file=LogFile,append=TRUE,sep="") + } + + ## SAMPLE CORRELATION HEATMAP + rld.subset <- assay(rld)[,comp.samples] + sampleDists <- dist(t(rld.subset)) + sampleDistMatrix <- as.matrix(sampleDists) + colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) + pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) + + ## SCATTER PLOT FOR RLOG COUNTS + combs <- combn(comp.samples,2,simplify=FALSE) + clabels <- sapply(combs,function(x){paste(x,collapse=' & ')}) + plotdat <- data.frame(x=unlist(lapply(combs, function(x){rld.subset[, x[1] ]})),y=unlist(lapply(combs, function(y){rld.subset[, y[2] ]})),comp=rep(clabels, each=nrow(rld.subset))) + plot <- xyplot(y~x|comp,plotdat, + panel=function(...){ + panel.xyplot(...) + panel.abline(0,1,col="red") + }, + par.strip.text=list(cex=0.5)) + print(plot) + dev.off() + + colnames(comp.df) <- paste(CompPrefix,".",colnames(comp.df),sep="") + deseq2_results_list[[idx]] <- comp.df + + } + + ## WRITE RESULTS FROM ALL COMPARISONS TO FILE + deseq2_results_table <- cbind(interval.table,do.call(cbind, deseq2_results_list),raw.counts,pseudo.counts) + write.table(deseq2_results_table, file=ResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + +} +} +################################################ +################################################ +## PLOT QC ## +################################################ +################################################ +if (FALSE) { ##' PCA pre-processeor ##' ##' Generate all the necessary information to plot PCA from a DESeq2 object @@ -294,7 +442,7 @@ if (file.exists(PlotFile) == FALSE) { dev.off() } - +} ################################################ ################################################ ## SAVE SIZE FACTORS ## From 88f6cae38bcf275bb82ab26312635dbd3d884950 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 15:40:11 +0000 Subject: [PATCH 068/675] changing param input names and accounting for include/exclude lists --- bin/r/deseq2_diff.r | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index e52e2ac4..51429e0a 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -34,6 +34,9 @@ library(pheatmap) ################################################ option_list <- list( + make_option(c("-g", "--groups"), type="character", default=NULL , metavar="string" , help="comma-separated list of experimental group names" ), + make_option(c("-i", "--include"), type="character", default=NULL , metavar="string" , help="experimental groups to include in analysis"), + make_option(c("-e", "--exclude"), type="character", default=NULL , metavar="string" , help="experimental groups to exclude in analysis"), make_option(c("-c", "--control" ), type="character", default=NULL , metavar="path" , help="TODO" ), make_option(c("-t", "--treatment" ), type="character", default=NULL , metavar="path" , help="TODO" ), make_option(c("-b", "--bed" ), type="character", default=NULL , metavar="path" , help="TODO" ), @@ -48,15 +51,20 @@ option_list <- list( opt_parser <- OptionParser(option_list=option_list) opt <- parse_args(opt_parser) -if (is.null(opt$control)){ +if (is.null(opt$groups)){ print_help(opt_parser) - stop("Please provide a control group name.", call.=FALSE) + stop("Please provide group names for analysis.", call.=FALSE) } -if (is.null(opt$treatment)){ - print_help(opt_parser) - stop("Please provide a treatment group name.", call.=FALSE) -} +#if (is.null(opt$control)){ +# print_help(opt_parser) +# stop("Please provide a control group name.", call.=FALSE) +#} +# +#if (is.null(opt$treatment)){ +# print_help(opt_parser) +# stop("Please provide a treatment group name.", call.=FALSE) +#} if (is.null(opt$bed)){ print_help(opt_parser) @@ -72,7 +80,7 @@ if (is.null(opt$bam)){ bed_list <- unlist(strsplit(opt$bed, ",")) bam_list <- unlist(strsplit(opt$bam, ",")) -# Check same length +# Check same length <- MAYBE TAKE THIS OUT IF WE SIMPLY PASS THE ALIGNMENT CHANNEL AS IT WILL CONTAIN IGG if (length(bed_list) != length(bam_list)) { print_help(opt_parser) stop("Bed and bam file list are different lengths", call.=FALSE) @@ -85,7 +93,16 @@ if (length(bed_list) != length(bam_list)) { ################################################ # Create group list -groups = c(opt$control, opt$treatment) +# groups = c(opt$control, opt$treatment) <- groups is now just opt$group +groups = strsplit(opt$groups, split=",") +if (!is.null(opt$include)) { + groups = strsplit(opt$include, split=",") +} +if (!is.null(opt$exclude)) { + exclude_vec = strsplit(opt$exclude, split=",") + matching = match(groups, exclude_vec) + groups = groups[!matching] +} # Init mPeak = GRanges() From d32b793902b045f2e459929b2c30cca167918e28 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 16:42:27 +0000 Subject: [PATCH 069/675] edits to deseq --- bin/r/deseq2_diff.r | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index 51429e0a..bc5f67b3 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -35,12 +35,10 @@ library(pheatmap) option_list <- list( make_option(c("-g", "--groups"), type="character", default=NULL , metavar="string" , help="comma-separated list of experimental group names" ), - make_option(c("-i", "--include"), type="character", default=NULL , metavar="string" , help="experimental groups to include in analysis"), - make_option(c("-e", "--exclude"), type="character", default=NULL , metavar="string" , help="experimental groups to exclude in analysis"), - make_option(c("-c", "--control" ), type="character", default=NULL , metavar="path" , help="TODO" ), - make_option(c("-t", "--treatment" ), type="character", default=NULL , metavar="path" , help="TODO" ), make_option(c("-b", "--bed" ), type="character", default=NULL , metavar="path" , help="TODO" ), make_option(c("-a", "--bam" ), type="character", default=NULL , metavar="path" , help="TODO" ), + make_option(c("-i", "--include"), type="character", default=NULL , metavar="string" , help="experimental groups to include in analysis"), + make_option(c("-e", "--exclude"), type="character", default=NULL , metavar="string" , help="experimental groups to exclude in analysis"), make_option(c("-o", "--outdir" ), type="character", default='./' , metavar="path" , help="Output directory." ), make_option(c("-p", "--outprefix" ), type="character", default='deseq2', metavar="string" , help="Output prefix." ), make_option(c("-s", "--count_thresh" ), type="integer", default='5', metavar="string" , help="TODO" ), @@ -48,6 +46,8 @@ option_list <- list( make_option(c("-@", "--cores" ), type="integer" , default=1 , metavar="integer", help="Number of cores." ) ) +#make_option(c("-c", "--control" ), type="character", default=NULL , metavar="path" , help="TODO" ), +#make_option(c("-t", "--treatment" ), type="character", default=NULL , metavar="path" , help="TODO" ), opt_parser <- OptionParser(option_list=option_list) opt <- parse_args(opt_parser) @@ -94,12 +94,12 @@ if (length(bed_list) != length(bam_list)) { # Create group list # groups = c(opt$control, opt$treatment) <- groups is now just opt$group -groups = strsplit(opt$groups, split=",") +groups = unlist(strsplit(opt$groups, split=",")) if (!is.null(opt$include)) { - groups = strsplit(opt$include, split=",") + groups = unlist(strsplit(opt$include, split=",")) } if (!is.null(opt$exclude)) { - exclude_vec = strsplit(opt$exclude, split=",") + exclude_vec = unlist(strsplit(opt$exclude, split=",")) matching = match(groups, exclude_vec) groups = groups[!matching] } @@ -111,6 +111,9 @@ file_list=vector() # Read in bed files that match the control or treatment group for(group in groups){ search_res <- str_detect(bed_list, group) + if (!any(search_res)) { + stop(paste("group", group, "was not found amongst bed files")) + } file_list <- bed_list[search_res] %>% append(file_list, .) } for(file in file_list) { @@ -127,25 +130,40 @@ reps = paste0("rep", 1:rep_count) # Create peak table and count matrix masterPeak = reduce(mPeak) countMat = matrix(NA, length(masterPeak), file_count) +countMat[1:10,] colnames(countMat) = paste(rep(groups, 2), rep(reps, each = 2), sep = "_") # Read in bam files that match the control or treatment group +print("seq along groups") +print(seq_along(groups)) +print("seq along file_list") +print(seq_along(file_list)) for(i in seq_along(groups)){ search_res <- str_detect(bam_list, groups[i]) + print("search res") + print(search_res) + if (!any(search_res)) { + stop(paste("group", i, "was not found amongst bam files")) + } file_list <- bam_list[search_res] + print("file list") + print(file_list) for(j in seq_along(file_list)) { + print("index") + print((((i-1)*group_count) + (j-1)) + 1) fragment_counts <- getCounts(file_list[j], masterPeak, paired = TRUE, by_rg = FALSE, format = "bam") countMat[, (((i-1)*group_count) + (j-1)) + 1] = counts(fragment_counts)[,1] + print(countMat[1:10,]) } } - +print("got here") ################################################ ################################################ ## RUN DESEQ2 ## ################################################ ################################################ - +if (FALSE) { if (file.exists(opt$outdir) == FALSE) { dir.create(opt$outdir,recursive=TRUE) } @@ -235,7 +253,7 @@ if (file.exists(PlotFile) == FALSE) { dev.off() } - +} ################################################ ################################################ ## LOOP THROUGH COMPARISONS ## From aafdee8bd79528b1f9c32f82d5b3b16a940ea053 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 24 Mar 2021 16:42:41 +0000 Subject: [PATCH 070/675] setting up deseq in pipeline --- cutandrun.nf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index 3caa07a6..aa971698 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -413,6 +413,12 @@ workflow CUTANDRUN { ch_seacr_bed = SEACR_CALLPEAK.out.bed ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + /* + * MODULE: DESeq2 + */ + + + /* * MODULE: Clip off-chromosome peaks */ @@ -507,7 +513,7 @@ workflow CUTANDRUN { //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) - GENERATE_REPORTS(EXPORT_META.out.csv, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}) + // GENERATE_REPORTS(EXPORT_META.out.csv, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}) } } From b7f6ad72e6e93d33d2440372f83bc22ab652e100 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 25 Mar 2021 16:12:31 +0000 Subject: [PATCH 071/675] working deseq2 script --- bin/r/deseq2_diff.r | 247 ++++++++++++++++++++++---------------------- 1 file changed, 121 insertions(+), 126 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index bc5f67b3..08f01812 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -26,6 +26,7 @@ library(DESeq2) library(ggplot2) library(RColorBrewer) library(pheatmap) +library(lattice) ################################################ ################################################ @@ -126,44 +127,35 @@ for(file in file_list) { group_count = length(groups) rep_count = file_count / group_count reps = paste0("rep", 1:rep_count) +expected_rep_str = paste0("_R", 1:rep_count) # Create peak table and count matrix masterPeak = reduce(mPeak) countMat = matrix(NA, length(masterPeak), file_count) -countMat[1:10,] -colnames(countMat) = paste(rep(groups, 2), rep(reps, each = 2), sep = "_") +colnames(countMat) = paste(rep(groups, 2), rep(reps, each = group_count, sep = "_")) # Read in bam files that match the control or treatment group -print("seq along groups") -print(seq_along(groups)) -print("seq along file_list") -print(seq_along(file_list)) for(i in seq_along(groups)){ search_res <- str_detect(bam_list, groups[i]) - print("search res") - print(search_res) if (!any(search_res)) { stop(paste("group", i, "was not found amongst bam files")) } file_list <- bam_list[search_res] - print("file list") - print(file_list) for(j in seq_along(file_list)) { - print("index") - print((((i-1)*group_count) + (j-1)) + 1) - fragment_counts <- getCounts(file_list[j], masterPeak, paired = TRUE, by_rg = FALSE, format = "bam") - countMat[, (((i-1)*group_count) + (j-1)) + 1] = counts(fragment_counts)[,1] - print(countMat[1:10,]) + rep_search <- str_detect(file_list, expected_rep_str[j]) + file_now <- file_list[rep_search] + fragment_counts <- getCounts(file_now, masterPeak, paired = TRUE, by_rg = FALSE, format = "bam") + countMat[, ((j*group_count) - (group_count - i))] = counts(fragment_counts)[,1] } } -print("got here") + ################################################ ################################################ ## RUN DESEQ2 ## ################################################ ################################################ -if (FALSE) { + if (file.exists(opt$outdir) == FALSE) { dir.create(opt$outdir,recursive=TRUE) } @@ -175,7 +167,7 @@ dataS = countMat[selectR,] ## Select data from filter condition = factor(rep(groups, each = length(reps))) samples.vec <- sort(colnames(countMat)) -groups <- sub("_[^_]+$", "", samples.vec) +#groups <- sub("_[^_]+$", "", samples.vec) if (length(unique(groups)) == 1 || length(unique(groups)) == length(samples.vec)) { quit(save = "no", status = 0, runLast = FALSE) } @@ -218,7 +210,7 @@ write.csv(countMatDiff, paste(opt$outprefix, "count_mat_diff.csv", sep=""), row. ## NEW PLOT QC ## ################################################ ################################################ - +if (FALSE) { PlotFile <- paste(opt$outprefix,".plots.pdf",sep="") if (file.exists(PlotFile) == FALSE) { pdf(file=PlotFile,onefile=TRUE,width=7,height=7) @@ -254,118 +246,13 @@ if (file.exists(PlotFile) == FALSE) { dev.off() } } -################################################ -################################################ -## LOOP THROUGH COMPARISONS ## -################################################ -################################################ - -if (FALSE) { -ResultsFile <- paste(opt$outprefix,".results.txt",sep="") -if (file.exists(ResultsFile) == FALSE) { - - raw.counts <- counts(dds,normalized=FALSE) - colnames(raw.counts) <- paste(colnames(raw.counts),'raw',sep='.') - pseudo.counts <- counts(dds,normalized=TRUE) - colnames(pseudo.counts) <- paste(colnames(pseudo.counts),'pseudo',sep='.') - - deseq2_results_list <- list() - comparisons <- combn(unique(groups),2) - for (idx in 1:ncol(comparisons)) { - - control.group <- comparisons[1,idx] - treat.group <- comparisons[2,idx] - CompPrefix <- paste(control.group,treat.group,sep="vs") - cat("Saving results for ",CompPrefix," ...\n",sep="") - - CompOutDir <- paste(CompPrefix,'/',sep="") - if (file.exists(CompOutDir) == FALSE) { - dir.create(CompOutDir,recursive=TRUE) - } - - control.samples <- samples.vec[which(groups == control.group)] - treat.samples <- samples.vec[which(groups == treat.group)] - comp.samples <- c(control.samples,treat.samples) - - comp.results <- results(dds,contrast=c("condition",c(control.group,treat.group))) - comp.df <- as.data.frame(comp.results) - comp.table <- cbind(interval.table, as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) - - ## WRITE RESULTS FILE - CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.results.txt",sep="") - write.table(comp.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) - - ## FILTER RESULTS BY FDR & LOGFC AND WRITE RESULTS FILE - pdf(file=paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.plots.pdf",sep=""),width=10,height=8) - if (length(comp.samples) > 2) { - for (MIN_FDR in c(0.01,0.05)) { - - ## SUBSET RESULTS BY FDR - pass.fdr.table <- subset(comp.table, padj < MIN_FDR) - pass.fdr.up.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange > 0) - pass.fdr.down.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange < 0) - - ## SUBSET RESULTS BY FDR AND LOGFC - pass.fdr.logFC.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1) - pass.fdr.logFC.up.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange > 0) - pass.fdr.logFC.down.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange < 0) - - ## WRITE RESULTS FILE - CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.txt",sep="") - CompBEDFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.bed",sep="") - write.table(pass.fdr.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) - write.table(pass.fdr.table[,c("Chr","Start","End","Geneid","log2FoldChange","Strand")], file=CompBEDFile, col.names=FALSE, row.names=FALSE, sep='\t', quote=FALSE) - - ## MA PLOT & VOLCANO PLOT - DESeq2::plotMA(comp.results, main=paste("MA plot FDR <= ",MIN_FDR,sep=""), ylim=c(-2,2),alpha=MIN_FDR) - plot(comp.table$log2FoldChange, -1*log10(comp.table$padj), col=ifelse(comp.table$padj<=MIN_FDR, "red", "black"), xlab="logFC", ylab="-1*log10(FDR)", main=paste("Volcano plot FDR <=",MIN_FDR,sep=" "), pch=20) - - ## ADD COUNTS TO LOGFILE - cat(CompPrefix," genes with FDR <= ",MIN_FDR,": ",nrow(pass.fdr.table)," (up=",nrow(pass.fdr.up.table),", down=",nrow(pass.fdr.down.table),")","\n",file=LogFile,append=TRUE,sep="") - cat(CompPrefix," genes with FDR <= ",MIN_FDR," & FC > 2: ",nrow(pass.fdr.logFC.table)," (up=",nrow(pass.fdr.logFC.up.table),", down=",nrow(pass.fdr.logFC.down.table),")","\n",file=LogFile,append=TRUE,sep="") - - } - cat("\n",file=LogFile,append=TRUE,sep="") - } - - ## SAMPLE CORRELATION HEATMAP - rld.subset <- assay(rld)[,comp.samples] - sampleDists <- dist(t(rld.subset)) - sampleDistMatrix <- as.matrix(sampleDists) - colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) - pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) - - ## SCATTER PLOT FOR RLOG COUNTS - combs <- combn(comp.samples,2,simplify=FALSE) - clabels <- sapply(combs,function(x){paste(x,collapse=' & ')}) - plotdat <- data.frame(x=unlist(lapply(combs, function(x){rld.subset[, x[1] ]})),y=unlist(lapply(combs, function(y){rld.subset[, y[2] ]})),comp=rep(clabels, each=nrow(rld.subset))) - plot <- xyplot(y~x|comp,plotdat, - panel=function(...){ - panel.xyplot(...) - panel.abline(0,1,col="red") - }, - par.strip.text=list(cex=0.5)) - print(plot) - dev.off() - - colnames(comp.df) <- paste(CompPrefix,".",colnames(comp.df),sep="") - deseq2_results_list[[idx]] <- comp.df - - } - - ## WRITE RESULTS FROM ALL COMPARISONS TO FILE - deseq2_results_table <- cbind(interval.table,do.call(cbind, deseq2_results_list),raw.counts,pseudo.counts) - write.table(deseq2_results_table, file=ResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) - -} -} ################################################ ################################################ ## PLOT QC ## ################################################ ################################################ -if (FALSE) { + ##' PCA pre-processeor ##' ##' Generate all the necessary information to plot PCA from a DESeq2 object @@ -413,7 +300,7 @@ if (file.exists(PlotFile) == FALSE) { ## PCA ntop <- c(500, Inf) for (n_top_var in ntop) { - pca.data <- plotPCA_vst(dds, assay=vst_name,intgroup=c("condition"),ntop=n_top_var) + pca.data <- plotPCA_vst(dds, assay=vst_name,intgroup="condition",ntop=n_top_var) percentVar <- round(attr(pca.data, "percentVar")$percentVar) plot_subtitle <- ifelse(n_top_var==Inf, "All peaks", paste("Top", n_top_var, "peaks")) pl <- ggplot(pca.data, aes(PC1, PC2, color=condition)) + @@ -477,7 +364,115 @@ if (file.exists(PlotFile) == FALSE) { dev.off() } + +################################################ +################################################ +## LOOP THROUGH COMPARISONS ## +################################################ +################################################ + +if (FALSE) { + +ResultsFile <- paste(opt$outprefix,".results.txt",sep="") +if (file.exists(ResultsFile) == FALSE) { + + raw.counts <- counts(dds,normalized=FALSE) + colnames(raw.counts) <- paste(colnames(raw.counts),'raw',sep='.') + pseudo.counts <- counts(dds,normalized=TRUE) + colnames(pseudo.counts) <- paste(colnames(pseudo.counts),'pseudo',sep='.') + + deseq2_results_list <- list() + comparisons <- combn(unique(groups),2) + for (idx in 1:ncol(comparisons)) { + + control.group <- comparisons[1,idx] + treat.group <- comparisons[2,idx] + CompPrefix <- paste(control.group,treat.group,sep="vs") + cat("Saving results for ",CompPrefix," ...\n",sep="") + + CompOutDir <- paste(CompPrefix,'/',sep="") + if (file.exists(CompOutDir) == FALSE) { + dir.create(CompOutDir,recursive=TRUE) + } + + control.samples <- samples.vec[which(groups == control.group)] + treat.samples <- samples.vec[which(groups == treat.group)] + comp.samples <- c(control.samples,treat.samples) + + comp.results <- results(dds,contrast=c("condition",c(control.group,treat.group))) + comp.df <- as.data.frame(comp.results) + #comp.table <- cbind(interval.table, as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) + comp.table <- cbind(as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) + + ## WRITE RESULTS FILE + CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.results.txt",sep="") + write.table(comp.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + + ## FILTER RESULTS BY FDR & LOGFC AND WRITE RESULTS FILE + pdf(file=paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.plots.pdf",sep=""),width=10,height=8) + if (length(comp.samples) > 2) { + for (MIN_FDR in c(0.01,0.05)) { + + ## SUBSET RESULTS BY FDR + #pass.fdr.table <- subset(comp.table, padj < MIN_FDR) + #pass.fdr.up.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange > 0) + #pass.fdr.down.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange < 0) + + ## SUBSET RESULTS BY FDR AND LOGFC + #pass.fdr.logFC.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1) + #pass.fdr.logFC.up.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange > 0) + #pass.fdr.logFC.down.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange < 0) + + ## WRITE RESULTS FILE + #CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.txt",sep="") + #CompBEDFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.bed",sep="") + #write.table(pass.fdr.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + #write.table(pass.fdr.table[,c("Chr","Start","End","Geneid","log2FoldChange","Strand")], file=CompBEDFile, col.names=FALSE, row.names=FALSE, sep='\t', quote=FALSE) + + ## MA PLOT & VOLCANO PLOT + DESeq2::plotMA(comp.results, main=paste("MA plot FDR <= ",MIN_FDR,sep=""), ylim=c(-2,2),alpha=MIN_FDR) + #plot(comp.table$log2FoldChange, -1*log10(comp.table$padj), col=ifelse(comp.table$padj<=MIN_FDR, "red", "black"), xlab="logFC", ylab="-1*log10(FDR)", main=paste("Volcano plot FDR <=",MIN_FDR,sep=" "), pch=20) + + ## ADD COUNTS TO LOGFILE + #cat(CompPrefix," genes with FDR <= ",MIN_FDR,": ",nrow(pass.fdr.table)," (up=",nrow(pass.fdr.up.table),", down=",nrow(pass.fdr.down.table),")","\n",file=LogFile,append=TRUE,sep="") + #cat(CompPrefix," genes with FDR <= ",MIN_FDR," & FC > 2: ",nrow(pass.fdr.logFC.table)," (up=",nrow(pass.fdr.logFC.up.table),", down=",nrow(pass.fdr.logFC.down.table),")","\n",file=LogFile,append=TRUE,sep="") + + } + cat("\n",file=LogFile,append=TRUE,sep="") + } + + ## SAMPLE CORRELATION HEATMAP + rld.subset <- assay(rld)[,comp.samples] + sampleDists <- dist(t(rld.subset)) + sampleDistMatrix <- as.matrix(sampleDists) + colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) + pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) + + ## SCATTER PLOT FOR RLOG COUNTS + combs <- combn(comp.samples,2,simplify=FALSE) + clabels <- sapply(combs,function(x){paste(x,collapse=' & ')}) + plotdat <- data.frame(x=unlist(lapply(combs, function(x){rld.subset[, x[1] ]})),y=unlist(lapply(combs, function(y){rld.subset[, y[2] ]})),comp=rep(clabels, each=nrow(rld.subset))) + plot <- xyplot(y~x|comp,plotdat, + panel=function(...){ + panel.xyplot(...) + panel.abline(0,1,col="red") + }, + par.strip.text=list(cex=0.5)) + print(plot) + dev.off() + + colnames(comp.df) <- paste(CompPrefix,".",colnames(comp.df),sep="") + deseq2_results_list[[idx]] <- comp.df + + } + + ## WRITE RESULTS FROM ALL COMPARISONS TO FILE + deseq2_results_table <- cbind(do.call(cbind, deseq2_results_list),raw.counts,pseudo.counts) + write.table(deseq2_results_table, file=ResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + +} } + ################################################ ################################################ ## SAVE SIZE FACTORS ## From 79e5294c3ac11b0a33e7a8fffbadecfdc44cde59 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 25 Mar 2021 16:21:02 +0000 Subject: [PATCH 072/675] updates module for new deseq2 script parse format --- modules/local/process/deseq2_qc.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/process/deseq2_qc.nf b/modules/local/process/deseq2_qc.nf index a203f6b1..16c3a446 100644 --- a/modules/local/process/deseq2_qc.nf +++ b/modules/local/process/deseq2_qc.nf @@ -15,6 +15,7 @@ process DESEQ2_QC { container "luslab/cutrun-ds2-dev" input: + val groups path peak_beds path bams @@ -25,7 +26,7 @@ process DESEQ2_QC { path "*pca.vals_mqc.tsv" , optional:true, emit: pca_multiqc path "*sample.dists.txt" , optional:true, emit: dists_txt path "*sample.dists_mqc.tsv", optional:true, emit: dists_multiqc - path "*.log" , optional:true, emit: log + //path "*.log" , optional:true, emit: log path "size_factors" , optional:true, emit: size_factors path "*.version.txt" , emit: version @@ -35,10 +36,9 @@ process DESEQ2_QC { def label_upper = params.multiqc_label.toUpperCase() """ deseq2_diff.r \\ - --control \\ - --treatment \\ - --bed \\ - --bam \\ + --groups $groups \\ + --bed $peak_beds \\ + --bam $bams \\ --cores $task.cpus \\ $options.args """ From 982b59db9abdcb8e4cdaa3c0e2b0648824f437f2 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 25 Mar 2021 16:49:55 +0000 Subject: [PATCH 073/675] start organising channels for deseq2 input --- cutandrun.nf | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index aa971698..a670afc7 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -413,10 +413,31 @@ workflow CUTANDRUN { ch_seacr_bed = SEACR_CALLPEAK.out.bed ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + /* + * CHANNEL: Collect group names and remove igg + */ + ch_seacr_bed + .map {row -> row[0].group} + .collect() + .set { ch_groups_no_igg } + + + /* + * CHANNEL: Collect bams and remove igg + */ + ch_samtools_bam.branch { it -> + no_igg: it[0].group != 'igg' + } + + /* * MODULE: DESeq2 */ - + DESEQ2_QC { + ch_groups_no_igg + ch_seacr_bed.collect() + ch_samtools_bam.no_igg.collect() + } /* From 8cfa20ce7963105c78baa79c63418f04c2b6a48d Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 25 Mar 2021 16:50:10 +0000 Subject: [PATCH 074/675] input structure change --- modules/local/process/deseq2_qc.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/process/deseq2_qc.nf b/modules/local/process/deseq2_qc.nf index 16c3a446..8f0ae985 100644 --- a/modules/local/process/deseq2_qc.nf +++ b/modules/local/process/deseq2_qc.nf @@ -16,8 +16,8 @@ process DESEQ2_QC { input: val groups - path peak_beds - path bams + tuple val(meta) path (peak_beds) + tuple val(meta) path (bams) output: path "*.pdf" , optional:true, emit: pdf From ccd92eecfba96518a24786c7443959baf42eb94a Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Thu, 25 Mar 2021 18:17:34 +0000 Subject: [PATCH 075/675] Template update for nf-core/tools version 1.13.3 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c3677d0d..e119b872 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM nfcore/base:1.13.2 +FROM nfcore/base:1.13.3 LABEL authors="Chris Cheshire and Charlotte West" \ description="Docker image containing all software requirements for the nf-core/cutandrun pipeline" From 4209357ca759c35e068a20025f645bf2496301e5 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 09:29:18 +0000 Subject: [PATCH 076/675] include module in mainscript and view input channels --- cutandrun.nf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index a670afc7..44132fae 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -150,6 +150,8 @@ include { EXPORT_META } from './modules/local/process include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) +include { DESEQ2_QC } from './modules/local/process/deseq2_qc' addParams( options: [:] ) + /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -428,6 +430,11 @@ workflow CUTANDRUN { ch_samtools_bam.branch { it -> no_igg: it[0].group != 'igg' } + .set { ch_bam_split } + + ch_groups_no_igg | view + ch_seacr_bed.collect() | view + ch_bam_split.no_igg.collect() | view /* @@ -436,7 +443,7 @@ workflow CUTANDRUN { DESEQ2_QC { ch_groups_no_igg ch_seacr_bed.collect() - ch_samtools_bam.no_igg.collect() + ch_bam_split.no_igg.collect() } From 7b6c8faa95bec433d7d9e2b9ed4c5e2c3646b557 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 09:41:07 +0000 Subject: [PATCH 077/675] correct syntax --- cutandrun.nf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 44132fae..57828b58 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -152,7 +152,6 @@ include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) include { DESEQ2_QC } from './modules/local/process/deseq2_qc' addParams( options: [:] ) - /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ @@ -438,13 +437,13 @@ workflow CUTANDRUN { /* - * MODULE: DESeq2 + * MODULE: DESeq2 QC Analysis */ - DESEQ2_QC { + DESEQ2_QC ( ch_groups_no_igg ch_seacr_bed.collect() ch_bam_split.no_igg.collect() - } + ) /* From 1e34dc5a4c2cd9e3af1a32812c85f9a061dadc5d Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 09:48:47 +0000 Subject: [PATCH 078/675] correct syntax --- cutandrun.nf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 57828b58..c73af4f8 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -417,9 +417,9 @@ workflow CUTANDRUN { /* * CHANNEL: Collect group names and remove igg */ - ch_seacr_bed - .map {row -> row[0].group} - .collect() + SEACR_CALLPEAK.out.bed + //.map {row -> row[0].group} + //.collect() .set { ch_groups_no_igg } @@ -431,17 +431,17 @@ workflow CUTANDRUN { } .set { ch_bam_split } - ch_groups_no_igg | view + // ch_groups_no_igg | view ch_seacr_bed.collect() | view - ch_bam_split.no_igg.collect() | view + // ch_bam_split.no_igg.collect() | view /* * MODULE: DESeq2 QC Analysis */ DESEQ2_QC ( - ch_groups_no_igg - ch_seacr_bed.collect() + ch_groups_no_igg, + ch_seacr_bed.collect(), ch_bam_split.no_igg.collect() ) From 9d2246cc11f21976015efa45ca7563e33b48c49a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 10:08:55 +0000 Subject: [PATCH 079/675] renaming --- cutandrun.nf | 6 +++--- modules/local/process/{deseq2_qc.nf => deseq2_diff.nf} | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename modules/local/process/{deseq2_qc.nf => deseq2_diff.nf} (97%) diff --git a/cutandrun.nf b/cutandrun.nf index c73af4f8..93a7b54b 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -150,7 +150,7 @@ include { EXPORT_META } from './modules/local/process include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) -include { DESEQ2_QC } from './modules/local/process/deseq2_qc' addParams( options: [:] ) +include { DESEQ2_DIFF } from './modules/local/process/deseq2_diff' addParams( options: [:] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -432,14 +432,14 @@ workflow CUTANDRUN { .set { ch_bam_split } // ch_groups_no_igg | view - ch_seacr_bed.collect() | view + // ch_seacr_bed.collect() | view // ch_bam_split.no_igg.collect() | view /* * MODULE: DESeq2 QC Analysis */ - DESEQ2_QC ( + DESEQ2_DIFF ( ch_groups_no_igg, ch_seacr_bed.collect(), ch_bam_split.no_igg.collect() diff --git a/modules/local/process/deseq2_qc.nf b/modules/local/process/deseq2_diff.nf similarity index 97% rename from modules/local/process/deseq2_qc.nf rename to modules/local/process/deseq2_diff.nf index 8f0ae985..e6dfcf7d 100644 --- a/modules/local/process/deseq2_qc.nf +++ b/modules/local/process/deseq2_diff.nf @@ -4,8 +4,8 @@ params.options = [:] params.multiqc_label = '' def options = initOptions(params.options) -process DESEQ2_QC { - tag "DESeq2" +process DESEQ2_DIFF { + //tag "DESeq2" label "process_medium" publishDir "${params.outdir}", mode: params.publish_dir_mode, From f9cb85bf6ccb913cd1536c288e4c50b690deb2fd Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 13:51:21 +0000 Subject: [PATCH 080/675] channels setup for deseq2 --- cutandrun.nf | 30 ++++++++-------------------- modules/local/process/deseq2_diff.nf | 6 +++--- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 93a7b54b..9f377917 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -150,7 +150,7 @@ include { EXPORT_META } from './modules/local/process include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) -include { DESEQ2_DIFF } from './modules/local/process/deseq2_diff' addParams( options: [:] ) +include { DESEQ2_DIFF } from './modules/local/process/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -342,7 +342,7 @@ workflow CUTANDRUN { .map { row -> [row[0].id, row[0] ].flatten()} .set { ch_spikein_bt2_meta } - ANNOTATE_BT2_META.out.output | view + // ANNOTATE_BT2_META.out.output | view ANNOTATE_BT2_META.out.output .map { row -> [row[0].id, row ].flatten()} @@ -415,37 +415,23 @@ workflow CUTANDRUN { ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) /* - * CHANNEL: Collect group names and remove igg + * CHANNEL: Collect SEACR group names */ SEACR_CALLPEAK.out.bed - //.map {row -> row[0].group} - //.collect() + .map {row -> row[0].group} + .unique() + .collect() .set { ch_groups_no_igg } - - /* - * CHANNEL: Collect bams and remove igg - */ - ch_samtools_bam.branch { it -> - no_igg: it[0].group != 'igg' - } - .set { ch_bam_split } - - // ch_groups_no_igg | view - // ch_seacr_bed.collect() | view - // ch_bam_split.no_igg.collect() | view - - /* * MODULE: DESeq2 QC Analysis */ DESEQ2_DIFF ( ch_groups_no_igg, - ch_seacr_bed.collect(), - ch_bam_split.no_igg.collect() + ch_seacr_bed.collect{it[1]}, + ch_samtools_bam.collect{it[1]} ) - /* * MODULE: Clip off-chromosome peaks */ diff --git a/modules/local/process/deseq2_diff.nf b/modules/local/process/deseq2_diff.nf index e6dfcf7d..bd950a60 100644 --- a/modules/local/process/deseq2_diff.nf +++ b/modules/local/process/deseq2_diff.nf @@ -16,8 +16,8 @@ process DESEQ2_DIFF { input: val groups - tuple val(meta) path (peak_beds) - tuple val(meta) path (bams) + path peak_beds + path bams output: path "*.pdf" , optional:true, emit: pdf @@ -35,7 +35,7 @@ process DESEQ2_DIFF { def label_lower = params.multiqc_label.toLowerCase() def label_upper = params.multiqc_label.toUpperCase() """ - deseq2_diff.r \\ + $baseDir/bin/r/deseq2_diff.r \\ --groups $groups \\ --bed $peak_beds \\ --bam $bams \\ From e0c51faf683b23bfb609d7ff98bae1658522786f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 14:14:59 +0000 Subject: [PATCH 081/675] extracting values may be this mapping --- cutandrun.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index 9f377917..fc439f36 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -418,7 +418,8 @@ workflow CUTANDRUN { * CHANNEL: Collect SEACR group names */ SEACR_CALLPEAK.out.bed - .map {row -> row[0].group} + //.map{ row -> row[0].find{ it.key == "group" }?.value() } + .map{ row -> row[0].group} .unique() .collect() .set { ch_groups_no_igg } From a4cf6112bc2f05ae21990c9e6e18e8ecce8b223c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 14:22:05 +0000 Subject: [PATCH 082/675] only have paths for files currently being emitted --- modules/local/process/deseq2_diff.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/process/deseq2_diff.nf b/modules/local/process/deseq2_diff.nf index bd950a60..ec030b83 100644 --- a/modules/local/process/deseq2_diff.nf +++ b/modules/local/process/deseq2_diff.nf @@ -23,9 +23,9 @@ process DESEQ2_DIFF { path "*.pdf" , optional:true, emit: pdf path "*.RData" , optional:true, emit: rdata path "*pca.vals.txt" , optional:true, emit: pca_txt - path "*pca.vals_mqc.tsv" , optional:true, emit: pca_multiqc + // path "*pca.vals_mqc.tsv" , optional:true, emit: pca_multiqc path "*sample.dists.txt" , optional:true, emit: dists_txt - path "*sample.dists_mqc.tsv", optional:true, emit: dists_multiqc + // path "*sample.dists_mqc.tsv", optional:true, emit: dists_multiqc //path "*.log" , optional:true, emit: log path "size_factors" , optional:true, emit: size_factors path "*.version.txt" , emit: version From e2bd77cb4272503dc8533a7e1c60b2ac0c48bc8c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 14:31:32 +0000 Subject: [PATCH 083/675] versioning for deseq added --- modules/local/process/deseq2_diff.nf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/local/process/deseq2_diff.nf b/modules/local/process/deseq2_diff.nf index ec030b83..c5719494 100644 --- a/modules/local/process/deseq2_diff.nf +++ b/modules/local/process/deseq2_diff.nf @@ -41,5 +41,7 @@ process DESEQ2_DIFF { --bam $bams \\ --cores $task.cpus \\ $options.args + + Rscript -e "library(DESeq2); write(x=as.character(packageVersion('DESeq2')), file='${software}.version.txt')" """ } \ No newline at end of file From b76e3942cf3660ce83f86a19657e0b626669d5fb Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 26 Mar 2021 14:36:35 +0000 Subject: [PATCH 084/675] comment out length check, now redundant --- bin/r/deseq2_diff.r | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index 08f01812..ccaf1a4c 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -82,10 +82,10 @@ bed_list <- unlist(strsplit(opt$bed, ",")) bam_list <- unlist(strsplit(opt$bam, ",")) # Check same length <- MAYBE TAKE THIS OUT IF WE SIMPLY PASS THE ALIGNMENT CHANNEL AS IT WILL CONTAIN IGG -if (length(bed_list) != length(bam_list)) { - print_help(opt_parser) - stop("Bed and bam file list are different lengths", call.=FALSE) -} +#if (length(bed_list) != length(bam_list)) { +# print_help(opt_parser) +# stop("Bed and bam file list are different lengths", call.=FALSE) +#} ################################################ ################################################ From e70aae0130db3a56d94198afd2238d20e8ad28b7 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 14 Apr 2021 11:34:50 +0100 Subject: [PATCH 085/675] update to deseq2 --- cutandrun.nf | 2 +- modules/local/process/deseq2_diff.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 modules/local/process/deseq2_diff.nf diff --git a/cutandrun.nf b/cutandrun.nf index fc439f36..0ce26eab 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -350,7 +350,7 @@ workflow CUTANDRUN { .map { row -> [ row[1] << row[3], row[2] ] } .set { ch_combined_meta } - // ANNOTATE_BT2_SPIKEIN_META.out.output | view + ANNOTATE_BT2_SPIKEIN_META.out.output | view /* * CHANNEL: Calculate scale factor for each sample and join to main data flow diff --git a/modules/local/process/deseq2_diff.nf b/modules/local/process/deseq2_diff.nf old mode 100644 new mode 100755 index c5719494..269310b2 --- a/modules/local/process/deseq2_diff.nf +++ b/modules/local/process/deseq2_diff.nf @@ -35,7 +35,7 @@ process DESEQ2_DIFF { def label_lower = params.multiqc_label.toLowerCase() def label_upper = params.multiqc_label.toUpperCase() """ - $baseDir/bin/r/deseq2_diff.r \\ + Rscript $baseDir/bin/r/deseq2_diff.r \\ --groups $groups \\ --bed $peak_beds \\ --bam $bams \\ From 51a553a0838b263bc7c71f5cf7102c66fdef589f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 19 Apr 2021 17:19:36 +0100 Subject: [PATCH 086/675] deseq2 now working and producing plots --- cutandrun.nf | 2 +- modules/local/process/deseq2_diff.nf | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 0ce26eab..fc439f36 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -350,7 +350,7 @@ workflow CUTANDRUN { .map { row -> [ row[1] << row[3], row[2] ] } .set { ch_combined_meta } - ANNOTATE_BT2_SPIKEIN_META.out.output | view + // ANNOTATE_BT2_SPIKEIN_META.out.output | view /* * CHANNEL: Calculate scale factor for each sample and join to main data flow diff --git a/modules/local/process/deseq2_diff.nf b/modules/local/process/deseq2_diff.nf index 269310b2..653648e4 100755 --- a/modules/local/process/deseq2_diff.nf +++ b/modules/local/process/deseq2_diff.nf @@ -34,11 +34,17 @@ process DESEQ2_DIFF { def software = getSoftwareName(task.process) def label_lower = params.multiqc_label.toLowerCase() def label_upper = params.multiqc_label.toUpperCase() + + // Convert to comma separated strings + String str_groups = groups.join(",") + String str_beds = peak_beds.join(",") + String str_bams = bams.join(",") + """ Rscript $baseDir/bin/r/deseq2_diff.r \\ - --groups $groups \\ - --bed $peak_beds \\ - --bam $bams \\ + --groups $str_groups \\ + --bed $str_beds \\ + --bam $str_bams \\ --cores $task.cpus \\ $options.args From 7b83e6c5a464e396123e46ead590702170c75368 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 20 Apr 2021 10:58:24 +0100 Subject: [PATCH 087/675] typo --- modules/local/subworkflow/calculate_fragments.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/subworkflow/calculate_fragments.nf b/modules/local/subworkflow/calculate_fragments.nf index be529ec2..8f2c05e6 100644 --- a/modules/local/subworkflow/calculate_fragments.nf +++ b/modules/local/subworkflow/calculate_fragments.nf @@ -19,7 +19,7 @@ workflow CALCULATE_FRAGMENTS { main: - // Filer for mapped reads only + // Filter for mapped reads only SAMTOOLS_VIEW_SORT_STATS( bam ) // Convert to bed file From 3d3bf7cdf3f1b101ff291a81ba84be2a35fd8dd3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 20 Apr 2021 15:43:38 +0100 Subject: [PATCH 088/675] add file name to bin500 frags count files for sample identification --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 10ee001e..c1ea4be2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -189,8 +189,8 @@ params { suffix = ".frags.bin500" ext = "bed" publish_dir = "awk/bin500" - command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2}'" - command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1}' | sort -k1,1V -k2,2n" + command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" + command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" } } } From c4706f381838dcba2b575e0b15f790d497b0649b Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 20 Apr 2021 15:44:09 +0100 Subject: [PATCH 089/675] progress with adding reproducibility plot --- bin/python/reporting/lib/figures.py | 25 +++++++++++++++++++++++-- bin/python/reporting/main.py | 3 ++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 42c417ef..7e6d6299 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -16,11 +16,13 @@ class Figures: data_table = None frag_hist = None frag_violin = None + frag_bin500 = None - def __init__(self, logger, meta, frags): + def __init__(self, logger, meta, frags, bin_frag): self.logger = logger self.meta_path = meta self.frag_path = frags + self.bin_frag_path = bin_frag sns.set() sns.set_theme() @@ -69,6 +71,20 @@ def load_data(self): self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) + # create full join data frame for count data + # start by creating list of bin500 files + dt_bin_frag_list = glob.glob(self.bin_frag_path) + + for i in list(range(len(dt_bin_frag_list))): + dt_bin_frag_i = pd.read_csv(dt_bin_frag_list[i], sep='\t', header=None, names=['chrom','bin','count','sample']) + + if i==0: + self.frag_bin500 = dt_bin_frag_i + else: + self.frag_bin500 = pd.merge(self.frag_bin500, dt_bin_frag_i, on=['chrom','bin'], how='outer') + + + def annotate_data(self): # Make new perctenage alignment columns self.data_table['target_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_target')] / self.data_table.loc[:, ('bt2_total_reads_target')] * 100 @@ -248,4 +264,9 @@ def alignment_summary_ex(self): ax = px.box(df_data, x="group", y="bt2_total_reads_target") - return ax, df_data \ No newline at end of file + return ax, df_data + + + # ---------- Plot 5 - Replicate Reproducibility Heatmap --------- # + def replicate_heatmap(self): + diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index dc11a611..5afe6394 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -35,6 +35,7 @@ def gen_png(parsed_args): frag_path = parsed_args.raw_frag output_path = parsed_args.output logger = init_logger('gen_img', parsed_args.log) + bin_frag_path = parsed_args.bed_frag logger.info('Generating plots to output folder') fig = Figures(logger, meta_path, frag_path) @@ -52,9 +53,9 @@ def gen_png(parsed_args): parser_genimg.set_defaults(func=gen_png) parser_genimg.add_argument('--meta', required=True) parser_genimg.add_argument('--raw_frag', required=True) - parser_genimg.add_argument('--bed_frag', required=True) parser_genimg.add_argument('--output', required=True) parser_genimg.add_argument('--log', required=False) + parser_genimg.add_argument('--bed_frag', required=True) # Parse parsed_args = parser.parse_args() From 4bc576ee35e4dfc73d1cd2343c8d6681d7d3ed1a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 20 Apr 2021 15:47:16 +0100 Subject: [PATCH 090/675] more prog --- bin/python/reporting/lib/figures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 7e6d6299..55194703 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -83,7 +83,7 @@ def load_data(self): else: self.frag_bin500 = pd.merge(self.frag_bin500, dt_bin_frag_i, on=['chrom','bin'], how='outer') - + # add log2 transformed count data column def annotate_data(self): # Make new perctenage alignment columns From 7f197da3f623fbc311126a56e3e4eadc0638d17f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 20 Apr 2021 15:51:47 +0100 Subject: [PATCH 091/675] place holder for heatmap function --- bin/python/reporting/lib/figures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 55194703..4050c325 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -269,4 +269,4 @@ def alignment_summary_ex(self): # ---------- Plot 5 - Replicate Reproducibility Heatmap --------- # def replicate_heatmap(self): - + ax = sns.heatmap(self.frag_bin500, annot=True) From 3fd7bfec890783a21f7715205c038eae3c04aed9 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 21 Apr 2021 12:35:36 +0100 Subject: [PATCH 092/675] now have merged frag log2 counts dataframe --- bin/python/reporting/lib/figures.py | 13 +++++++++++-- bin/python/reporting/main.py | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 4050c325..20035fee 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -74,16 +74,23 @@ def load_data(self): # create full join data frame for count data # start by creating list of bin500 files dt_bin_frag_list = glob.glob(self.bin_frag_path) - for i in list(range(len(dt_bin_frag_list))): - dt_bin_frag_i = pd.read_csv(dt_bin_frag_list[i], sep='\t', header=None, names=['chrom','bin','count','sample']) + dt_bin_frag_i_read = pd.read_csv(dt_bin_frag_list[i], sep='\t', header=None, names=['chrom','bin','count','sample']) + sample_name = dt_bin_frag_i_read['sample'].iloc[0] + dt_bin_frag_i = dt_bin_frag_i_read[['chrom','bin','count']] + dt_bin_frag_i.columns = ['chrom','bin',sample_name] + # print(dt_bin_frag_i.head(5)) if i==0: self.frag_bin500 = dt_bin_frag_i else: self.frag_bin500 = pd.merge(self.frag_bin500, dt_bin_frag_i, on=['chrom','bin'], how='outer') + # print(self.frag_bin500.head(5)) # add log2 transformed count data column + log2_counts = self.frag_bin500[self.frag_bin500.columns[-(len(dt_bin_frag_list)):]].transform(lambda x: np.log2(x)) + chrom_bin_cols = self.frag_bin500[['chrom','bin']] + self.frag_bin500 = pd.concat([chrom_bin_cols,log2_counts], axis=1) def annotate_data(self): # Make new perctenage alignment columns @@ -269,4 +276,6 @@ def alignment_summary_ex(self): # ---------- Plot 5 - Replicate Reproducibility Heatmap --------- # def replicate_heatmap(self): + print("hello world") + fig, ax = plt.subplots() ax = sns.heatmap(self.frag_bin500, annot=True) diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index 5afe6394..4219a81e 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -38,7 +38,7 @@ def gen_png(parsed_args): bin_frag_path = parsed_args.bed_frag logger.info('Generating plots to output folder') - fig = Figures(logger, meta_path, frag_path) + fig = Figures(logger, meta_path, frag_path, bin_frag_path) fig.gen_plots_to_folder(output_path) logger.info('Completed') From ccce2af64c92ce4480f5992cf644db6becb0e9d7 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 21 Apr 2021 14:32:56 +0100 Subject: [PATCH 093/675] replicate reproducibility plot done --- bin/python/reporting/lib/figures.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 20035fee..634cf130 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -76,7 +76,7 @@ def load_data(self): dt_bin_frag_list = glob.glob(self.bin_frag_path) for i in list(range(len(dt_bin_frag_list))): dt_bin_frag_i_read = pd.read_csv(dt_bin_frag_list[i], sep='\t', header=None, names=['chrom','bin','count','sample']) - sample_name = dt_bin_frag_i_read['sample'].iloc[0] + sample_name = dt_bin_frag_i_read['sample'].iloc[0].split(".")[0] dt_bin_frag_i = dt_bin_frag_i_read[['chrom','bin','count']] dt_bin_frag_i.columns = ['chrom','bin',sample_name] # print(dt_bin_frag_i.head(5)) @@ -128,6 +128,11 @@ def generate_plots(self): plot4, data4 = self.fraglen_summary_histogram() plots["frag_hist"] = plot4 data["frag_hist"] = data4 + + # Plot 5 + plot5, data5 = self.replicate_heatmap() + plots["replicate_heatmap"] = plot5 + data["replicate_heatmap"] = data5 return (plots, data) @@ -276,6 +281,11 @@ def alignment_summary_ex(self): # ---------- Plot 5 - Replicate Reproducibility Heatmap --------- # def replicate_heatmap(self): - print("hello world") + sns.set(font_scale=0.6) fig, ax = plt.subplots() - ax = sns.heatmap(self.frag_bin500, annot=True) + plot_data = self.frag_bin500[self.frag_bin500.columns[-(len(self.frag_bin500.columns)-2):]] + corr_mat = plot_data.corr() + ax = sns.heatmap(corr_mat, annot=True) + + return fig, self.frag_bin500 + From d170f5fc9ef6a99ee19f90a4ad561a409f26e371 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 21 Apr 2021 17:01:45 +0100 Subject: [PATCH 094/675] scale factor plot in --- bin/python/reporting/lib/figures.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 634cf130..2fdfecfb 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -133,6 +133,11 @@ def generate_plots(self): plot5, data5 = self.replicate_heatmap() plots["replicate_heatmap"] = plot5 data["replicate_heatmap"] = data5 + + # Plot 6 + plot6, data6 = self.scale_factor_summary() + plots["scale_factor_summary"] = plot6 + data["scale_factor_summary"] = data6 return (plots, data) @@ -289,3 +294,26 @@ def replicate_heatmap(self): return fig, self.frag_bin500 + # ---------- Plot 6 - Replicate Reproducibility Heatmap --------- # + def scale_factor_summary(self): + fig, scale_summary = plt.subplots(1,2) + fig.suptitle("Scaling Factor") + + # Get normalised count data + df_normalised_frags = self.data_table.loc[:, ('id', 'group')] + df_normalised_frags['normalised_frags'] = self.data_table['bt2_total_reads_target']*self.data_table['scale_factor'] + print(df_normalised_frags) + + # Subset meta data + df_data_scale = self.data_table.loc[:, ('id', 'group','scale_factor')] + + # Scale factor + sns.boxplot(data=df_data_scale, x='group', y='scale_factor', ax=scale_summary[0]) + scale_summary[0].set_ylabel('Scale Factor') + + # Normalised fragment count + sns.boxplot(data=df_normalised_frags, x='group', y='normalised_frags', ax=scale_summary[1]) + scale_summary[1].set_ylabel('Normalised Fragment Count') + + return fig, df_data_scale + \ No newline at end of file From c21396785cd011a2d6b4310f4769ee13049ba09c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 22 Apr 2021 15:16:20 +0100 Subject: [PATCH 095/675] structure data load --- bin/python/reporting/lib/figures.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 2fdfecfb..1e62309a 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -37,8 +37,10 @@ def format_thousands(self, x, pos): return '%1.1fK' % (x * 1e-3) def load_data(self): + # ---------- Data - data_table --------- # self.data_table = pd.read_csv(self.meta_path, sep=',') + # ---------- Data - frag_hist --------- # # Create list of deeptools raw fragment files dt_frag_list = glob.glob(self.frag_path) @@ -59,6 +61,7 @@ def load_data(self): sample_arr = np.append(sample_arr, dt_sample_i_long) self.frag_hist = self.frag_hist.append(dt_frag_i) + # ---------- Data - frag_violin --------- # # create hue array using regex pattern matching for i in list(range(0,len(sample_arr))): sample_i = sample_arr[i] @@ -71,6 +74,7 @@ def load_data(self): self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) + # ---------- Data - frag_bin500 --------- # # create full join data frame for count data # start by creating list of bin500 files dt_bin_frag_list = glob.glob(self.bin_frag_path) @@ -92,6 +96,11 @@ def load_data(self): chrom_bin_cols = self.frag_bin500[['chrom','bin']] self.frag_bin500 = pd.concat([chrom_bin_cols,log2_counts], axis=1) + + # create dataframe for seacr peaks + # self.data_table = pd.read_csv(self.meta_path, sep=',') + + def annotate_data(self): # Make new perctenage alignment columns self.data_table['target_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_target')] / self.data_table.loc[:, ('bt2_total_reads_target')] * 100 @@ -316,4 +325,6 @@ def scale_factor_summary(self): scale_summary[1].set_ylabel('Normalised Fragment Count') return fig, df_data_scale - \ No newline at end of file + + # ---------- Plot 7 - Peak Analysis --------- # + From cf56d12db1831b6a635a17b1412b9752cebd17fd Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 22 Apr 2021 15:23:11 +0100 Subject: [PATCH 096/675] add seacr_bed to required input --- bin/python/reporting/lib/figures.py | 6 ++++-- bin/python/reporting/main.py | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 1e62309a..26ce20fd 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -17,12 +17,14 @@ class Figures: frag_hist = None frag_violin = None frag_bin500 = None + seacr_bed = None - def __init__(self, logger, meta, frags, bin_frag): + def __init__(self, logger, meta, frags, bin_frag, seacr_bed): self.logger = logger self.meta_path = meta self.frag_path = frags self.bin_frag_path = bin_frag + self.seacr_bed_path = seacr_bed sns.set() sns.set_theme() @@ -96,7 +98,7 @@ def load_data(self): chrom_bin_cols = self.frag_bin500[['chrom','bin']] self.frag_bin500 = pd.concat([chrom_bin_cols,log2_counts], axis=1) - + # create dataframe for seacr peaks # self.data_table = pd.read_csv(self.meta_path, sep=',') diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index 4219a81e..29ac95fb 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -36,6 +36,7 @@ def gen_png(parsed_args): output_path = parsed_args.output logger = init_logger('gen_img', parsed_args.log) bin_frag_path = parsed_args.bed_frag + seacr_bed_path = parsed_args.seacr_bed logger.info('Generating plots to output folder') fig = Figures(logger, meta_path, frag_path, bin_frag_path) @@ -56,6 +57,7 @@ def gen_png(parsed_args): parser_genimg.add_argument('--output', required=True) parser_genimg.add_argument('--log', required=False) parser_genimg.add_argument('--bed_frag', required=True) + parser_genimg.add_argument('--seacr_bed', required=True) # Parse parsed_args = parser.parse_args() From 75cd6dda515e4f508cff79fa05d8096ecbdae962 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 22 Apr 2021 15:29:25 +0100 Subject: [PATCH 097/675] added seacr_bed --- bin/python/reporting/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index 29ac95fb..3fca15b2 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -39,7 +39,7 @@ def gen_png(parsed_args): seacr_bed_path = parsed_args.seacr_bed logger.info('Generating plots to output folder') - fig = Figures(logger, meta_path, frag_path, bin_frag_path) + fig = Figures(logger, meta_path, frag_path, bin_frag_path, seacr_bed_path) fig.gen_plots_to_folder(output_path) logger.info('Completed') From 44ba39cedaca71687dada13cf6994c45e763c4c1 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 22 Apr 2021 17:28:58 +0100 Subject: [PATCH 098/675] made dataframe of seacr bed of all groups and replicates --- bin/python/reporting/lib/figures.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 26ce20fd..36db56fe 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -17,7 +17,7 @@ class Figures: frag_hist = None frag_violin = None frag_bin500 = None - seacr_bed = None + seacr_beds = None def __init__(self, logger, meta, frags, bin_frag, seacr_bed): self.logger = logger @@ -98,10 +98,25 @@ def load_data(self): chrom_bin_cols = self.frag_bin500[['chrom','bin']] self.frag_bin500 = pd.concat([chrom_bin_cols,log2_counts], axis=1) - + # ---------- Data - seacr_bed --------- # # create dataframe for seacr peaks - # self.data_table = pd.read_csv(self.meta_path, sep=',') + seacr_bed_list = glob.glob(self.seacr_bed_path) + + # combine all seacr bed files into one df including group and replicate info + for i in list(range(len(seacr_bed_list))): + seacr_bed_i = pd.read_csv(seacr_bed_list[i], sep='\t', header=None, usecols=[0,1,2,3,4], names=['chrom','start','end','total_signal','max_signal']) + bed_base_i = os.path.basename(seacr_bed_list[i]) + sample_id = bed_base_i.split(".")[0] + [group_i,rep_i] = sample_id.split("_") + seacr_bed_i['group'] = np.repeat(group_i, seacr_bed_i.shape[0]) + seacr_bed_i['replicate'] = np.repeat(rep_i, seacr_bed_i.shape[0]) + + if i==0: + self.seacr_beds = seacr_bed_i + else: + self.seacr_beds = self.seacr_beds.append(seacr_bed_i) + def annotate_data(self): # Make new perctenage alignment columns @@ -313,7 +328,6 @@ def scale_factor_summary(self): # Get normalised count data df_normalised_frags = self.data_table.loc[:, ('id', 'group')] df_normalised_frags['normalised_frags'] = self.data_table['bt2_total_reads_target']*self.data_table['scale_factor'] - print(df_normalised_frags) # Subset meta data df_data_scale = self.data_table.loc[:, ('id', 'group','scale_factor')] From ff90a863c11624c7fc31dbbab1b041ecef7ce04b Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 23 Apr 2021 17:16:25 +0100 Subject: [PATCH 099/675] first peak plot done --- bin/python/reporting/lib/figures.py | 38 ++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 36db56fe..2ecf9181 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -116,7 +116,6 @@ def load_data(self): else: self.seacr_beds = self.seacr_beds.append(seacr_bed_i) - def annotate_data(self): # Make new perctenage alignment columns @@ -165,6 +164,11 @@ def generate_plots(self): plots["scale_factor_summary"] = plot6 data["scale_factor_summary"] = data6 + # Plot 7 + plot7, data7 = self.no_of_peaks() + plots["no_of_peaks"] = plot7 + data["no_of_peaks"] = data7 + return (plots, data) def generate_dash_plots(self): @@ -343,4 +347,36 @@ def scale_factor_summary(self): return fig, df_data_scale # ---------- Plot 7 - Peak Analysis --------- # + def no_of_peaks(self): + # 7a - Number of peaks + fig, ax = plt.subplots() + fig.suptitle("Total Peaks") + + ## create number of peaks df + unique_groups = self.seacr_beds.group.unique() + unique_replicates = self.seacr_beds.replicate.unique() + df_no_peaks = pd.DataFrame(index=range(0,(len(unique_groups)*len(unique_replicates))), columns=['group','replicate','all_peaks']) + k=0 # counter + print(df_no_peaks) + for i in list(range(len(unique_groups))): + for j in list(range(len(unique_replicates))): + df_no_peaks.at[k,'all_peaks'] = self.seacr_beds[(self.seacr_beds['group']==unique_groups[i]) & (self.seacr_beds['replicate']==unique_replicates[j])].shape[0] + df_no_peaks.at[k,'group'] = unique_groups[i] + df_no_peaks.at[k,'replicate'] = unique_replicates[j] + k=k+1 + print(df_no_peaks.head(5)) + + ax = sns.boxplot(data=df_no_peaks, x='group', y='all_peaks') + ax.set_ylabel("No. of Peaks") + # seq_summary[0,0].set_title("Sequencing Depth") + # seq_summary[0,0].set_ylabel("Total Reads") + + return fig, df_no_peaks + + # 7b - Width of peaks + + # 7c - Peaks reproduced + + # 7d - Fragments within peaks + From 46b1dc550b8d71c9579b665a2d65e3b4f53748e4 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 26 Apr 2021 18:26:06 +0100 Subject: [PATCH 100/675] added pyranges to env --- dev/docker/static_reports/environment.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/docker/static_reports/environment.yml b/dev/docker/static_reports/environment.yml index 01431bcf..443ed06e 100644 --- a/dev/docker/static_reports/environment.yml +++ b/dev/docker/static_reports/environment.yml @@ -12,4 +12,5 @@ dependencies: - numpy=1.20.* - pandas=1.2.* - seaborn=0.11.* - - plotly:plotly_express=0.4.* \ No newline at end of file + - plotly:plotly_express=0.4.* + - pyranges=0.0.96 \ No newline at end of file From c36b37892d538a44b60b78d159b710a75ee942b3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 26 Apr 2021 18:26:46 +0100 Subject: [PATCH 101/675] start and some fill to peaks reproduced plot --- bin/python/reporting/lib/figures.py | 87 ++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 15 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 2ecf9181..067938c6 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -11,6 +11,7 @@ from matplotlib.ticker import FuncFormatter import seaborn as sns import plotly.express as px +import pyranges as pr class Figures: data_table = None @@ -164,10 +165,20 @@ def generate_plots(self): plots["scale_factor_summary"] = plot6 data["scale_factor_summary"] = data6 - # Plot 7 - plot7, data7 = self.no_of_peaks() - plots["no_of_peaks"] = plot7 - data["no_of_peaks"] = data7 + # Plot 7a + plot7a, data7a = self.no_of_peaks() + plots["no_of_peaks"] = plot7a + data["no_of_peaks"] = data7a + + # Plot 7b + plot7b, data7b = self.peak_widths() + plots["peak_widths"] = plot7b + data["peak_widths"] = data7b + + # Plot 7c + plot7c, data7c = self.reproduced_peaks() + plots["reproduced_peaks"] = plot7c + data["reproduced_peaks"] = data7c return (plots, data) @@ -355,28 +366,74 @@ def no_of_peaks(self): ## create number of peaks df unique_groups = self.seacr_beds.group.unique() unique_replicates = self.seacr_beds.replicate.unique() - df_no_peaks = pd.DataFrame(index=range(0,(len(unique_groups)*len(unique_replicates))), columns=['group','replicate','all_peaks']) + self.df_no_peaks = pd.DataFrame(index=range(0,(len(unique_groups)*len(unique_replicates))), columns=['group','replicate','all_peaks']) k=0 # counter - print(df_no_peaks) + for i in list(range(len(unique_groups))): for j in list(range(len(unique_replicates))): - df_no_peaks.at[k,'all_peaks'] = self.seacr_beds[(self.seacr_beds['group']==unique_groups[i]) & (self.seacr_beds['replicate']==unique_replicates[j])].shape[0] - df_no_peaks.at[k,'group'] = unique_groups[i] - df_no_peaks.at[k,'replicate'] = unique_replicates[j] + self.df_no_peaks.at[k,'all_peaks'] = self.seacr_beds[(self.seacr_beds['group']==unique_groups[i]) & (self.seacr_beds['replicate']==unique_replicates[j])].shape[0] + self.df_no_peaks.at[k,'group'] = unique_groups[i] + self.df_no_peaks.at[k,'replicate'] = unique_replicates[j] k=k+1 - print(df_no_peaks.head(5)) - - ax = sns.boxplot(data=df_no_peaks, x='group', y='all_peaks') + ax = sns.boxplot(data=self.df_no_peaks, x='group', y='all_peaks') ax.set_ylabel("No. of Peaks") - # seq_summary[0,0].set_title("Sequencing Depth") - # seq_summary[0,0].set_ylabel("Total Reads") - return fig, df_no_peaks + return fig, self.df_no_peaks # 7b - Width of peaks + def peak_widths(self): + fig, ax = plt.subplots() + + ## add peak width column + self.seacr_beds['peak_width'] = self.seacr_beds['end'] - self.seacr_beds['start'] + self.seacr_beds['peak_width'] = self.seacr_beds['peak_width'].abs() + + ax = sns.violinplot(data=self.seacr_beds, x="group", y="peak_width", hue="replicate") + + return fig, self.seacr_beds + # 7c - Peaks reproduced + def reproduced_peaks(self): + fig, ax = plt.subplots() + ## empty dataframe to fill in loop + reprod_peak_stats = self.df_no_peaks + reprod_peak_stats = reprod_peak_stats.reindex(columns=reprod_peak_stats.columns.tolist() + ['no_peaks_reproduced','peak_reproduced_rate']) + + ## create pyranges objects and fill df + unique_groups = self.seacr_beds.group.unique() + unique_replicates = self.seacr_beds.replicate.unique() + # pyr_overlap = pr.PyRanges(chromosomes="chr1", starts=(1, 5), ends=[3, 149], + # strands=("+", "-"), int64=True) + # print(len(pyr_overlap)) + + # peak_ranges = pr.PyRanges(chromosomes=self.seacr_beds['chrom'], starts=self.seacr_beds['start'], ends=self.seacr_beds['end']) + # print(peak_ranges) + # fill_no_peaks = np.empty((0,)) + for i in list(range(len(unique_groups))): + pyr_query = pr.PyRanges() + group_i = unique_groups[i] + for j in list(range(len(unique_replicates))): + rep_i = unique_replicates[j] + peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] + pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) + if(len(pyr_query) > 0): + pyr_overlap = pyr_query.join(pyr_subject) + pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) + pyr_query = pyr_overlap + else: + pyr_query = pyr_subject + # fill_no_peaks + + # idx = ((j)*len(unique_groups)) - (len(unique_groups) - (i+1)) + # print(idx) + # reprod_peak_stats.at[idx, 'no_peaks_reproduced'] = len(pyr_overlap) + # reprod_peak_stats.at[idx+1, 'no_peaks_reproduced'] = len(pyr_overlap) + + + + return fig, reprod_peak_stats # 7d - Fragments within peaks From c1f31fef642ac61f9d3a805f033fe22edf9db10a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 27 Apr 2021 12:53:28 +0100 Subject: [PATCH 102/675] 7d peak reproduced rate figure done --- bin/python/reporting/lib/figures.py | 74 +++++++++++++++++++---------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 067938c6..717a3c7d 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -180,6 +180,11 @@ def generate_plots(self): plots["reproduced_peaks"] = plot7c data["reproduced_peaks"] = data7c + # Plot 7d + plot7d, data7d = self.frags_in_peaks() + plots["frags_in_peaks"] = plot7d + data["frags_in_peaks"] = data7d + return (plots, data) def generate_dash_plots(self): @@ -401,39 +406,56 @@ def reproduced_peaks(self): reprod_peak_stats = self.df_no_peaks reprod_peak_stats = reprod_peak_stats.reindex(columns=reprod_peak_stats.columns.tolist() + ['no_peaks_reproduced','peak_reproduced_rate']) + # create permutations list + def array_permutate(x): + arr_len=len(x) + loop_list = x + out_list = x + for i in range(arr_len-1): + i_list = np.roll(loop_list, -1) + out_list = np.vstack((out_list, i_list)) + loop_list = i_list + return out_list + ## create pyranges objects and fill df unique_groups = self.seacr_beds.group.unique() unique_replicates = self.seacr_beds.replicate.unique() - # pyr_overlap = pr.PyRanges(chromosomes="chr1", starts=(1, 5), ends=[3, 149], - # strands=("+", "-"), int64=True) - # print(len(pyr_overlap)) - - # peak_ranges = pr.PyRanges(chromosomes=self.seacr_beds['chrom'], starts=self.seacr_beds['start'], ends=self.seacr_beds['end']) - # print(peak_ranges) - # fill_no_peaks = np.empty((0,)) + rep_permutations = array_permutate(range(len(unique_replicates))) + idx_count=0 for i in list(range(len(unique_groups))): - pyr_query = pr.PyRanges() group_i = unique_groups[i] - for j in list(range(len(unique_replicates))): - rep_i = unique_replicates[j] - peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] - pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) - if(len(pyr_query) > 0): - pyr_overlap = pyr_query.join(pyr_subject) - pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) - pyr_query = pyr_overlap - else: - pyr_query = pyr_subject - # fill_no_peaks - - # idx = ((j)*len(unique_groups)) - (len(unique_groups) - (i+1)) - # print(idx) - # reprod_peak_stats.at[idx, 'no_peaks_reproduced'] = len(pyr_overlap) - # reprod_peak_stats.at[idx+1, 'no_peaks_reproduced'] = len(pyr_overlap) - - + for k in list(range(len(unique_replicates))): + pyr_query = pr.PyRanges() + rep_perm = rep_permutations[k] + for j in rep_perm: + rep_i = unique_replicates[j] + peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] + pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) + if(len(pyr_query) > 0): + pyr_overlap = pyr_query.join(pyr_subject) + pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) + pyr_query = pyr_overlap + + else: + pyr_query = pyr_subject + + pyr_starts = pyr_overlap.values()[0]['Start'] + unique_pyr_starts = pyr_starts.unique() + reprod_peak_stats.at[idx_count, 'no_peaks_reproduced'] = len(unique_pyr_starts) + idx_count = idx_count + 1 + + fill_reprod_rate = (reprod_peak_stats['no_peaks_reproduced'] / reprod_peak_stats['all_peaks'])*100 + reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate + + # plot + ax = sns.barplot(data=reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate") return fig, reprod_peak_stats + # 7d - Fragments within peaks + def frags_in_peaks(self): + fig, ax = plt.subplots() + + return fig, self.seacr_beds From 38eb9d274e93c5702113518b72982f1552160dbb Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 27 Apr 2021 16:42:22 +0100 Subject: [PATCH 103/675] add bam reader to env --- dev/docker/static_reports/environment.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/docker/static_reports/environment.yml b/dev/docker/static_reports/environment.yml index 443ed06e..d2bdce6c 100644 --- a/dev/docker/static_reports/environment.yml +++ b/dev/docker/static_reports/environment.yml @@ -13,4 +13,5 @@ dependencies: - pandas=1.2.* - seaborn=0.11.* - plotly:plotly_express=0.4.* - - pyranges=0.0.96 \ No newline at end of file + - pyranges=0.0.96 + - bamread=0.0.7 \ No newline at end of file From 5c7201bd3bb9a215a40c81e3b873b88ab2c0271f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 27 Apr 2021 16:42:43 +0100 Subject: [PATCH 104/675] figure 7d of percentage frags in peaks done --- bin/python/reporting/lib/figures.py | 40 +++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 717a3c7d..1305b61f 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -19,13 +19,15 @@ class Figures: frag_violin = None frag_bin500 = None seacr_beds = None + bams = None - def __init__(self, logger, meta, frags, bin_frag, seacr_bed): + def __init__(self, logger, meta, frags, bin_frag, seacr_bed, bams): self.logger = logger self.meta_path = meta self.frag_path = frags self.bin_frag_path = bin_frag self.seacr_bed_path = seacr_bed + self.bam_path = bams sns.set() sns.set_theme() @@ -118,6 +120,22 @@ def load_data(self): else: self.seacr_beds = self.seacr_beds.append(seacr_bed_i) + # ---------- Data - target histone mark bams --------- # + bam_list = glob.glob(self.bam_path) + self.bam_df_list = list() + self.frip = pd.DataFrame(data=None, index=range(len(bam_list)), columns=['group','replicate','mapped_frags','frags_in_peaks','percentage_frags_in_peaks']) + k = 0 #counter + for bam in bam_list: + bam_now = pr.read_bam(bam, as_df=True, filter_flag=0) # no frags filtered + self.bam_df_list.append(bam_now) + bam_base = os.path.basename(bam) + sample_id = bam_base.split(".")[0] + [group_now,rep_now] = sample_id.split("_") + self.frip.at[k, 'group'] = group_now + self.frip.at[k, 'replicate'] = rep_now + self.frip.at[k, 'mapped_frags'] = bam_now.shape[0] + k=k+1 + def annotate_data(self): # Make new perctenage alignment columns self.data_table['target_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_target')] / self.data_table.loc[:, ('bt2_total_reads_target')] * 100 @@ -457,5 +475,23 @@ def array_permutate(x): def frags_in_peaks(self): fig, ax = plt.subplots() - return fig, self.seacr_beds + for i in range(len(self.bam_df_list)): + bam_i = self.bam_df_list[i] + self.frip.at[i,'mapped_frags'] = bam_i.shape[0] + group_i = self.frip.at[i,'group'] + rep_i = self.frip.at[i,'replicate'] + seacr_bed_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] + pyr_seacr = pr.PyRanges(chromosomes=seacr_bed_i['chrom'], starts=seacr_bed_i['start'], ends=seacr_bed_i['end']) + pyr_bam = pr.PyRanges(df=bam_i) + sample_id = group_i + "_" + rep_i + pyr_bam_dict = {sample_id : pyr_bam} + frag_count_pyr = pr.count_overlaps(pyr_bam_dict, pyr_seacr) + frag_counts = frag_count_pyr.items()[0][1][sample_id].sum() + self.frip.at[i,'frags_in_peaks'] = frag_counts + + self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 + + ax = sns.boxplot(data=self.frip, x='group', y='percentage_frags_in_peaks') + + return fig, self.frip From 36935d3f32aaac57b3d2839ab06789f09e9d8d1f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 28 Apr 2021 09:24:42 +0100 Subject: [PATCH 105/675] add new inputs and glob patterns for input files --- modules/local/process/generate_reports.nf | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index 1c3e23a4..01dfb32a 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -24,6 +24,14 @@ process GENERATE_REPORTS { script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - $baseDir/bin/python/reporting/main.py genimg --meta $meta_data --raw_frag "*_raw.csv" --output . --log log.txt + $baseDir/bin/python/reporting/main.py genimg \\ + --meta $meta_data \\ + --raw_frag "*_raw.csv" \\ + --bed_frag "*bin500.awk.bed" \\ + --seacr_bed "*bed.*.bed" \\ + --bams "*.bam" \\ + --output . \\ + --log log.txt """ + } \ No newline at end of file From f884095f49042e8a1fdb4549fa7b9d1b5df4e54c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 28 Apr 2021 09:25:10 +0100 Subject: [PATCH 106/675] add bams to required input --- bin/python/reporting/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/python/reporting/main.py b/bin/python/reporting/main.py index 3fca15b2..0da6d828 100755 --- a/bin/python/reporting/main.py +++ b/bin/python/reporting/main.py @@ -37,9 +37,10 @@ def gen_png(parsed_args): logger = init_logger('gen_img', parsed_args.log) bin_frag_path = parsed_args.bed_frag seacr_bed_path = parsed_args.seacr_bed + bams_path = parsed_args.bams logger.info('Generating plots to output folder') - fig = Figures(logger, meta_path, frag_path, bin_frag_path, seacr_bed_path) + fig = Figures(logger, meta_path, frag_path, bin_frag_path, seacr_bed_path, bams_path) fig.gen_plots_to_folder(output_path) logger.info('Completed') @@ -58,6 +59,7 @@ def gen_png(parsed_args): parser_genimg.add_argument('--log', required=False) parser_genimg.add_argument('--bed_frag', required=True) parser_genimg.add_argument('--seacr_bed', required=True) + parser_genimg.add_argument('--bams', required=True) # Parse parsed_args = parser.parse_args() From 0c261b8de34335dee8d35140e73057f031223e8a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 28 Apr 2021 10:00:56 +0100 Subject: [PATCH 107/675] add channels to reporting module in main script --- cutandrun.nf | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index fc439f36..d92266af 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -527,7 +527,23 @@ workflow CUTANDRUN { //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) - // GENERATE_REPORTS(EXPORT_META.out.csv, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}) + // Filter bam bai channels for non-igg only + ch_samtools_bam + .filter { it[0].group != 'igg' } + .set { ch_no_igg_bam } + + ch_samtools_bam_bai + .filter { it[0].group != 'igg' } + .set { ch_no_igg_bai } + + GENERATE_REPORTS( + EXPORT_META.out.csv, + DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}, + AWK_FRAG_BIN.out.file.collect{it[1]}, + SEACR_CALLPEAK.out.bed.collect{it[1]}, + ch_no_igg_bam, + ch_no_igg_bai + ) } } From b2d161bfdd775a80147bff122c283725ba9ff8f1 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 28 Apr 2021 11:33:23 +0100 Subject: [PATCH 108/675] charting reports done and working in pipeline --- cutandrun.nf | 10 +++------- modules/local/process/generate_reports.nf | 3 +++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index d92266af..ca3e4037 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -528,21 +528,17 @@ workflow CUTANDRUN { ) // Filter bam bai channels for non-igg only - ch_samtools_bam - .filter { it[0].group != 'igg' } - .set { ch_no_igg_bam } - ch_samtools_bam_bai .filter { it[0].group != 'igg' } - .set { ch_no_igg_bai } + .set { ch_no_igg_bam_bai } + GENERATE_REPORTS( EXPORT_META.out.csv, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}, AWK_FRAG_BIN.out.file.collect{it[1]}, SEACR_CALLPEAK.out.bed.collect{it[1]}, - ch_no_igg_bam, - ch_no_igg_bai + ch_no_igg_bam_bai.collect{it[1]} ) } } diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index 01dfb32a..8b752b3b 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -16,6 +16,9 @@ process GENERATE_REPORTS { input: path meta_data path raw_fragments + path bed_fragments + path seacr_beds + path bam_bais output: path '*.pdf', emit: pdf From 5c8b2f0c295fe02529795d38eed8634ea4f09650 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 28 Apr 2021 12:18:55 +0100 Subject: [PATCH 109/675] indent syntax --- cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index ca3e4037..18f8182d 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -539,7 +539,7 @@ workflow CUTANDRUN { AWK_FRAG_BIN.out.file.collect{it[1]}, SEACR_CALLPEAK.out.bed.collect{it[1]}, ch_no_igg_bam_bai.collect{it[1]} - ) + ) } } From 9594eb9547f9f9e23e809f443f472889f856a9a6 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 28 Apr 2021 13:25:39 +0100 Subject: [PATCH 110/675] added nf-core dt module tools computematrix and plotheatmap --- .../deeptools/computematrix/functions.nf | 70 +++++++++++++++++++ .../software/deeptools/computematrix/main.nf | 44 ++++++++++++ .../software/deeptools/computematrix/meta.yml | 58 +++++++++++++++ .../deeptools/plotheatmap/functions.nf | 70 +++++++++++++++++++ .../software/deeptools/plotheatmap/main.nf | 41 +++++++++++ .../software/deeptools/plotheatmap/meta.yml | 55 +++++++++++++++ 6 files changed, 338 insertions(+) create mode 100644 modules/nf-core/software/deeptools/computematrix/functions.nf create mode 100644 modules/nf-core/software/deeptools/computematrix/main.nf create mode 100644 modules/nf-core/software/deeptools/computematrix/meta.yml create mode 100644 modules/nf-core/software/deeptools/plotheatmap/functions.nf create mode 100644 modules/nf-core/software/deeptools/plotheatmap/main.nf create mode 100644 modules/nf-core/software/deeptools/plotheatmap/meta.yml diff --git a/modules/nf-core/software/deeptools/computematrix/functions.nf b/modules/nf-core/software/deeptools/computematrix/functions.nf new file mode 100644 index 00000000..9d0137e3 --- /dev/null +++ b/modules/nf-core/software/deeptools/computematrix/functions.nf @@ -0,0 +1,70 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/deeptools/computematrix/main.nf b/modules/nf-core/software/deeptools/computematrix/main.nf new file mode 100644 index 00000000..bee16d3c --- /dev/null +++ b/modules/nf-core/software/deeptools/computematrix/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DEEPTOOLS_COMPUTEMATRIX { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/deeptools:3.5.0--py_0" + } else { + container "quay.io/biocontainers/deeptools:3.5.0--py_0" + } + + input: + tuple val(meta), path(bigwig) + path bed + + output: + tuple val(meta), path("*.mat.gz") , emit: matrix + tuple val(meta), path("*.mat.tab"), emit: table + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + computeMatrix \\ + $options.args \\ + --regionsFileName $bed \\ + --scoreFileName $bigwig \\ + --outFileName ${prefix}.computeMatrix.mat.gz \\ + --outFileNameMatrix ${prefix}.computeMatrix.vals.mat.tab \\ + --numberOfProcessors $task.cpus + + computeMatrix --version | sed -e "s/computeMatrix //g" > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/deeptools/computematrix/meta.yml b/modules/nf-core/software/deeptools/computematrix/meta.yml new file mode 100644 index 00000000..d6fd78c7 --- /dev/null +++ b/modules/nf-core/software/deeptools/computematrix/meta.yml @@ -0,0 +1,58 @@ +name: deeptools_computematrix +description: calculates scores per genome regions for other deeptools plotting utilities +keywords: + - genome + - regions + - scores + - matrix +tools: + - deeptools: + description: A set of user-friendly tools for normalization and visualization of deep-sequencing data + homepage: + documentation: https://deeptools.readthedocs.io/en/develop/index.html + tool_dev_url: https://github.com/deeptools/deepTools + doi: "10.1093/nar/gku365" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - bigwig: + type: file + description: bigwig file containing genomic scores + pattern: "*.{bw,bigwig}" + - bed: + type: file + description: bed file containing genomic regions + pattern: "*.{bed}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - matrix: + type: file + description: | + gzipped matrix file needed by the plotHeatmap and plotProfile + deeptools utilities + pattern: "*.{computeMatrix.mat.gz}" + - table: + type: file + description: | + tabular file containing the scores of the generated matrix + pattern: "*.{computeMatrix.vals.mat.tab}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@jeremy1805" + - "@emiller88" + - "@drpatelh" + - "@joseespinosa" diff --git a/modules/nf-core/software/deeptools/plotheatmap/functions.nf b/modules/nf-core/software/deeptools/plotheatmap/functions.nf new file mode 100644 index 00000000..9d0137e3 --- /dev/null +++ b/modules/nf-core/software/deeptools/plotheatmap/functions.nf @@ -0,0 +1,70 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/deeptools/plotheatmap/main.nf b/modules/nf-core/software/deeptools/plotheatmap/main.nf new file mode 100644 index 00000000..552dc117 --- /dev/null +++ b/modules/nf-core/software/deeptools/plotheatmap/main.nf @@ -0,0 +1,41 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process DEEPTOOLS_PLOTHEATMAP { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/deeptools:3.5.0--py_0" + } else { + container "quay.io/biocontainers/deeptools:3.5.0--py_0" + } + + input: + tuple val(meta), path(matrix) + + output: + tuple val(meta), path("*.pdf"), emit: pdf + tuple val(meta), path("*.tab"), emit: table + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + plotHeatmap \\ + $options.args \\ + --matrixFile $matrix \\ + --outFileName ${prefix}.plotHeatmap.pdf \\ + --outFileNameMatrix ${prefix}.plotHeatmap.mat.tab + + plotHeatmap --version | sed -e "s/plotHeatmap //g" > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/deeptools/plotheatmap/meta.yml b/modules/nf-core/software/deeptools/plotheatmap/meta.yml new file mode 100644 index 00000000..14311332 --- /dev/null +++ b/modules/nf-core/software/deeptools/plotheatmap/meta.yml @@ -0,0 +1,55 @@ +name: deeptools_plotheatmap +description: plots values produced by deeptools_computematrix as a heatmap +keywords: + - plot + - heatmap + - scores + - matrix +tools: + - deeptools: + description: A set of user-friendly tools for normalization and visualization of deep-sequencing data + homepage: + documentation: https://deeptools.readthedocs.io/en/develop/index.html + tool_dev_url: https://github.com/deeptools/deepTools + doi: "10.1093/nar/gku365" + licence: ['GPL v3'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] + - matrix: + type: file + description: | + gzipped matrix file produced by deeptools_ + computematrix deeptools utility + pattern: "*.{mat.gz}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - pdf: + type: file + description: | + Output figure containing resulting plot + pattern: "*.{plotHeatmap.pdf}" + - matrix: + type: file + description: | + File containing the matrix of values + used to generate the heatmap + pattern: "*.{plotHeatmap.mat.tab}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + +authors: + - "@emiller88" + - "@drpatelh" + - "@joseespinosa" From 1ddd2c16af7f7e7f5ee343a51f7de4bd772e8602 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 28 Apr 2021 15:45:27 +0100 Subject: [PATCH 111/675] setup for deeptools heatmap processes --- conf/modules.config | 24 ++++++++++++++++++++++++ cutandrun.nf | 43 +++++++++++++++++++++++++++++++++++++++++++ main.nf | 1 + 3 files changed, 68 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index c1ea4be2..57da044c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -192,5 +192,29 @@ params { command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" } + + 'awk_edit_peak_bed' { + command = "'{split(\$6, summit, \":\"); split(summit[2], region, \"-\"); print summit[1]\"\\t\"region[1]\"\\t\"region[2]}'" + suffix = ".max_signal" + } + + 'dt_compute_mat_gene' { + args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZero" + publish_dir = "deeptools/heatmaps/gene" + } + 'dt_compute_mat_peaks' { + args = "reference-point -a 3000 -b 3000 --referencePoint center --skipZeros" + publish_dir = "deeptools/heatmaps/peaks" + } + + 'dt_plotheatmap_gene' { + args = "--sortUsing sum" + publish_dir = "deeptools/heatmaps/gene" + } + + 'dt_plotheatmap_peaks' { + args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\" --samplesLabel \"\$meta.id\"" + publish_dir = "deeptools/heatmaps/peaks" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 18f8182d..e944fb1f 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -14,6 +14,7 @@ checkPathParamList = [ params.fasta, params.gtf, params.blacklist, + params.gene_bed, params.bowtie2_index, params.spikein_fasta, params.spikein_bowtie2_index @@ -25,6 +26,7 @@ if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input sample if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } if (params.gtf) { ch_gtf = file(params.gtf) } else { exit 1, 'Genome GTF file not specified!' } if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, 'Genome blacklist file not specified!' } +if (params.gene_bed) { ch_gene_bed = file(params.gene_bed) } else { exit 1, 'Genome gene bed file not specified!' } // Resolve spike-in genome def spikein_fasta = params.spikein_fasta @@ -150,6 +152,7 @@ include { EXPORT_META } from './modules/local/process include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) +include { AWK as AWK_EDIT_PEAK_BED } from './modules/local/process/awk' addParams( options: modules['awk_edit_peak_bed'] ) include { DESEQ2_DIFF } from './modules/local/process/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) /* @@ -181,6 +184,11 @@ include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from './modules/local/sub * MODULES */ include { UCSC_BEDGRAPHTOBIGWIG } from './modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: modules['ucsc_bedgraphtobigwig'] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from './modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_gene'] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from './modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_peaks'] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from './modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from './modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) + /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -493,6 +501,41 @@ workflow CUTANDRUN { multiqc_report = MULTIQC.out.report.toList() } + // filter igg from bigwigs + UCSC_BEDGRAPHTOBIGWIG.out.bigwig + .filter { it[0].group != 'igg' } + .set { ch_bigwig_no_igg } + + //DEEPTOOLS HEATMAPS + //HEATMAP OVER TRANSCRIPTION UNITS + DEEPTOOLS_COMPUTEMATRIX_GENE ( + ch_bigwig_no_igg, + ch_gene_bed + ) + + DEEPTOOLS_PLOTHEATMAP_GENE ( + DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix + ) + + //HEATMAP ON PEAKS + // extract max signal region from SEACR bed + AWK_EDIT_PEAK_BED ( + SEACR_CALLPEAK.out.bed + ) + + // ch_bigwig_no_igg | view + // AWK_EDIT_PEAK_BED.out.file | view + + DEEPTOOLS_COMPUTEMATRIX_PEAKS ( + ch_bigwig_no_igg, + AWK_EDIT_PEAK_BED.out.file + ) + + DEEPTOOLS_PLOTHEATMAP_PEAKS ( + DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix + ) + + /* * MODULE: Reporting */ diff --git a/main.nf b/main.nf index 44a53495..64b619b6 100644 --- a/main.nf +++ b/main.nf @@ -29,6 +29,7 @@ if (params.help) { params.fasta = Checks.get_genome_attribute(params, 'fasta') params.gtf = Checks.get_genome_attribute(params, 'gtf') params.blacklist = Checks.get_genome_attribute(params, 'blacklist') +params.gene_bed = Checks.get_genome_attribute(params, 'bed12') log.info 'test-' + params.blacklist From fee6ae7e11456b6414b50726951ed0d235dab50e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 10:57:44 +0100 Subject: [PATCH 112/675] setup channels for matching samples in dt heatmap --- cutandrun.nf | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index e944fb1f..ec62f64f 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -516,6 +516,7 @@ workflow CUTANDRUN { DEEPTOOLS_PLOTHEATMAP_GENE ( DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix ) + //HEATMAP ON PEAKS // extract max signal region from SEACR bed @@ -523,12 +524,33 @@ workflow CUTANDRUN { SEACR_CALLPEAK.out.bed ) + // order bigwig and bed channels such that they match on id + ch_bigwig_no_igg + .map { row -> [row[0].id, row ].flatten()} + .set { ch_bigwig_no_igg_id } + + AWK_EDIT_PEAK_BED.out.file + .map { row -> [row[0].id, row ].flatten()} + .set { ch_seacr_max_id } + + ch_bigwig_no_igg_id + .join ( ch_seacr_max_id ) + .set { ch_dt_peaks } + + ch_dt_peaks + .map { row -> row[0,1] } + .set { ch_ordered_bigwig } + + ch_dt_peaks + .map { row -> row[-1] } + .set { ch_ordered_seacr_max } + // ch_bigwig_no_igg | view // AWK_EDIT_PEAK_BED.out.file | view DEEPTOOLS_COMPUTEMATRIX_PEAKS ( - ch_bigwig_no_igg, - AWK_EDIT_PEAK_BED.out.file + ch_ordered_bigwig, + ch_ordered_seacr_max ) DEEPTOOLS_PLOTHEATMAP_PEAKS ( From 7372f4f616295b8ba3cf54b3f286bda6e881be2d Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 10:58:36 +0100 Subject: [PATCH 113/675] set singularity_pull_docker_container to true --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index f8902d1f..88aceda7 100644 --- a/nextflow.config +++ b/nextflow.config @@ -72,7 +72,7 @@ params { igenomes_base = 's3://ngi-igenomes/igenomes/' tracedir = "${params.outdir}/pipeline_info" igenomes_ignore = false - singularity_pull_docker_container = false + singularity_pull_docker_container = true // Config options custom_config_version = 'master' From e5731620027d144c6a3f7f8e204b1751c3fb5e65 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 11:29:06 +0100 Subject: [PATCH 114/675] checks --- cutandrun.nf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cutandrun.nf b/cutandrun.nf index ec62f64f..c30e4a8b 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -548,6 +548,9 @@ workflow CUTANDRUN { // ch_bigwig_no_igg | view // AWK_EDIT_PEAK_BED.out.file | view + ch_ordered_bigwig | view + ch_ordered_seacr_max | view + DEEPTOOLS_COMPUTEMATRIX_PEAKS ( ch_ordered_bigwig, ch_ordered_seacr_max From 6b957e0ec96c94ae35603d1a9684f6f5ea446870 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 11:39:38 +0100 Subject: [PATCH 115/675] update docker image --- modules/local/process/deseq2_diff.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/process/deseq2_diff.nf b/modules/local/process/deseq2_diff.nf index 653648e4..495479b2 100755 --- a/modules/local/process/deseq2_diff.nf +++ b/modules/local/process/deseq2_diff.nf @@ -12,7 +12,7 @@ process DESEQ2_DIFF { saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } conda (params.enable_conda ? "conda-forge::r-optparse=1.6.6 conda-forge::r-ggplot2=3.3.2 conda-forge::r-rcolorbrewer=1.1_2 conda-forge::r-pheatmap=1.0.12 bioconda::bioconductor-deseq2=1.28.0 bioconda::bioconductor-biocparallel=1.22.0 conda-forge::r-stringr=1.4.0 conda-forge::r-magrittr=2.0.1 bioconda::bioconductor-chromvar=1.10.0 bioconda::bioconductor-genomicranges=1.40.0" : null) - container "luslab/cutrun-ds2-dev" + container "luslab/cutandrun-deseq2:latest" input: val groups From 966ac01c21947d7b959afc56f968ade0135a59ab Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 11:46:20 +0100 Subject: [PATCH 116/675] try different row mapping --- cutandrun.nf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index c30e4a8b..994b1c9d 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -538,15 +538,13 @@ workflow CUTANDRUN { .set { ch_dt_peaks } ch_dt_peaks - .map { row -> row[0,1] } + .map { row -> row[1] } .set { ch_ordered_bigwig } ch_dt_peaks .map { row -> row[-1] } .set { ch_ordered_seacr_max } - // ch_bigwig_no_igg | view - // AWK_EDIT_PEAK_BED.out.file | view ch_ordered_bigwig | view ch_ordered_seacr_max | view From c25316a75dd32cb993c54079199c16c4ba0401f5 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 11:53:02 +0100 Subject: [PATCH 117/675] meta data and bw file mapping --- cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index 994b1c9d..a71b0323 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -538,7 +538,7 @@ workflow CUTANDRUN { .set { ch_dt_peaks } ch_dt_peaks - .map { row -> row[1] } + .map { row -> row[1,2] } .set { ch_ordered_bigwig } ch_dt_peaks From 2176d93698b4cc28be89d944b474dff9913a0a60 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 12:03:01 +0100 Subject: [PATCH 118/675] can't state meta.id variable in modules config --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 57da044c..c144d2ee 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -213,7 +213,7 @@ params { } 'dt_plotheatmap_peaks' { - args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\" --samplesLabel \"\$meta.id\"" + args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\"" publish_dir = "deeptools/heatmaps/peaks" } } From 5bdb4c2f3dfd8994ed75302b60fb4e7a3753bcf0 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 12:04:37 +0100 Subject: [PATCH 119/675] remove channel views --- cutandrun.nf | 3 --- 1 file changed, 3 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index a71b0323..5c3c6bac 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -546,9 +546,6 @@ workflow CUTANDRUN { .set { ch_ordered_seacr_max } - ch_ordered_bigwig | view - ch_ordered_seacr_max | view - DEEPTOOLS_COMPUTEMATRIX_PEAKS ( ch_ordered_bigwig, ch_ordered_seacr_max From 53045ed169d0a96933b0294b8b940db0846bbd7a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 12:36:12 +0100 Subject: [PATCH 120/675] edit profile configs --- conf/test_full.config | 1 + conf/test_hg38_chr7.config | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index 8d107252..051c819b 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -12,5 +12,6 @@ params { config_profile_description = 'Full test dataset to check pipeline function' input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" genome = 'GRCh38' } diff --git a/conf/test_hg38_chr7.config b/conf/test_hg38_chr7.config index 97e935d0..4146fa2b 100644 --- a/conf/test_hg38_chr7.config +++ b/conf/test_hg38_chr7.config @@ -8,8 +8,8 @@ */ params { - config_profile_name = 'Full test profile' - config_profile_description = 'Full test dataset to check pipeline function' + config_profile_name = 'Subset test profile' + config_profile_description = 'Subset test dataset to check pipeline function' input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' From 5244c9a6b5871f93090496cc59bf6186451ca924 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 14:34:40 +0100 Subject: [PATCH 121/675] need to pass both bam and bai --- cutandrun.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 5c3c6bac..6cc09cdf 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -575,7 +575,7 @@ workflow CUTANDRUN { .join( ch_samtools_bai_id ) .map { row -> [row[1], row[2], row[4] ] } .set { ch_samtools_bam_bai } - //ch_samtools_bam_bai | view + // ch_samtools_bam_bai | view DEEPTOOLS_BAMPEFRAGMENTSIZE(ch_samtools_bam_bai, ch_blacklist) //DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv | view @@ -601,7 +601,7 @@ workflow CUTANDRUN { DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}, AWK_FRAG_BIN.out.file.collect{it[1]}, SEACR_CALLPEAK.out.bed.collect{it[1]}, - ch_no_igg_bam_bai.collect{it[1]} + ch_no_igg_bam_bai.collect{it[1,2]} ) } } From 8256549be2a2aab982d1b86a722cc55e87d392f0 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 29 Apr 2021 14:51:24 +0100 Subject: [PATCH 122/675] cleanup comments --- bin/python/reporting/lib/figures.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 1305b61f..dc84934d 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -88,13 +88,11 @@ def load_data(self): sample_name = dt_bin_frag_i_read['sample'].iloc[0].split(".")[0] dt_bin_frag_i = dt_bin_frag_i_read[['chrom','bin','count']] dt_bin_frag_i.columns = ['chrom','bin',sample_name] - # print(dt_bin_frag_i.head(5)) if i==0: self.frag_bin500 = dt_bin_frag_i else: self.frag_bin500 = pd.merge(self.frag_bin500, dt_bin_frag_i, on=['chrom','bin'], how='outer') - # print(self.frag_bin500.head(5)) # add log2 transformed count data column log2_counts = self.frag_bin500[self.frag_bin500.columns[-(len(dt_bin_frag_list)):]].transform(lambda x: np.log2(x)) @@ -140,9 +138,6 @@ def annotate_data(self): # Make new perctenage alignment columns self.data_table['target_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_target')] / self.data_table.loc[:, ('bt2_total_reads_target')] * 100 self.data_table['spikein_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_spikein')] / self.data_table.loc[:, ('bt2_total_reads_spikein')] * 100 - # self.data_table.describe() - # print(self.data_table) - # self.data_table.info() def generate_plots(self): # Init From 76d7041f89c31cfeeb7606511cb522534bd9d544 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 30 Apr 2021 11:56:06 +0100 Subject: [PATCH 123/675] move data manipulation into dataload instead of figure functions --- bin/python/reporting/lib/figures.py | 181 +++++++++++++++------------- 1 file changed, 100 insertions(+), 81 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index dc84934d..fe497f02 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -134,6 +134,100 @@ def load_data(self): self.frip.at[k, 'mapped_frags'] = bam_now.shape[0] k=k+1 + # ---------- Data - Peak stats --------- # + ## create number of peaks df + unique_groups = self.seacr_beds.group.unique() + unique_replicates = self.seacr_beds.replicate.unique() + self.df_no_peaks = pd.DataFrame(index=range(0,(len(unique_groups)*len(unique_replicates))), columns=['group','replicate','all_peaks']) + k=0 # counter + + for i in list(range(len(unique_groups))): + for j in list(range(len(unique_replicates))): + self.df_no_peaks.at[k,'all_peaks'] = self.seacr_beds[(self.seacr_beds['group']==unique_groups[i]) & (self.seacr_beds['replicate']==unique_replicates[j])].shape[0] + self.df_no_peaks.at[k,'group'] = unique_groups[i] + self.df_no_peaks.at[k,'replicate'] = unique_replicates[j] + k=k+1 + + + # ---------- Data - Reproducibility of peaks between replicates --------- # + ## empty dataframe to fill in loop + self.reprod_peak_stats = self.df_no_peaks + self.reprod_peak_stats = self.reprod_peak_stats.reindex(columns=self.reprod_peak_stats.columns.tolist() + ['no_peaks_reproduced','peak_reproduced_rate']) + + # create permutations list + def array_permutate(x): + arr_len=len(x) + loop_list = x + out_list = x + for i in range(arr_len-1): + i_list = np.roll(loop_list, -1) + out_list = np.vstack((out_list, i_list)) + loop_list = i_list + return out_list + + ## create pyranges objects and fill df + unique_groups = self.seacr_beds.group.unique() + unique_replicates = self.seacr_beds.replicate.unique() + rep_permutations = array_permutate(range(len(unique_replicates))) + idx_count=0 + + for i in list(range(len(unique_groups))): + group_i = unique_groups[i] + for k in list(range(len(unique_replicates))): + pyr_query = pr.PyRanges() + rep_perm = rep_permutations[k] + for j in rep_perm: + rep_i = unique_replicates[j] + peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] + pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) + if(len(pyr_query) > 0): + pyr_overlap = pyr_query.join(pyr_subject) + pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) + pyr_query = pyr_overlap + + else: + pyr_query = pyr_subject + + pyr_starts = pyr_overlap.values()[0]['Start'] + unique_pyr_starts = pyr_starts.unique() + self.reprod_peak_stats.at[idx_count, 'no_peaks_reproduced'] = len(unique_pyr_starts) + idx_count = idx_count + 1 + + fill_reprod_rate = (self.reprod_peak_stats['no_peaks_reproduced'] / self.reprod_peak_stats['all_peaks'])*100 + self.reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate + + # ---------- Data - Percentage of fragments in peaks --------- # + # test_query = pr.PyRanges(chromosomes="chr1", starts=[1,7,15], ends=[3,8,20]) + # test_subject = pr.PyRanges(chromosomes="chr1", starts=[25,28,31], ends=[26,29,37]) + # test_query_dict = {'test_query' : test_query } + # test_overlap = pr.count_overlaps(test_query_dict, test_subject) + # print(test_overlap) + + for i in range(len(self.bam_df_list)): + bam_i = self.bam_df_list[i] + self.frip.at[i,'mapped_frags'] = bam_i.shape[0] + group_i = self.frip.at[i,'group'] + rep_i = self.frip.at[i,'replicate'] + seacr_bed_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] + # bam_i.to_csv('test_bam.csv', index=False) + # seacr_bed_i.to_csv('test_bed.csv', index=False) + # seacr_bed_prep = seacr_bed_i.drop(['total_signal','max_signal','group','replicate'],axis=1) + # seacr_bed_prep = seacr_bed_prep.rename(columns={"chrom":"Chromosome","start":"Start","end":"End"}) + # pyr_seacr = pr.PyRanges(df=seacr_bed_prep) + pyr_seacr = pr.PyRanges(chromosomes=seacr_bed_i['chrom'], starts=seacr_bed_i['start'], ends=seacr_bed_i['end']) + pyr_bam = pr.PyRanges(df=bam_i) + # pyr_bam = pyr_bam.apply(lambda df: df.drop(['Strand','Flag'], axis=1)) + sample_id = group_i + "_" + rep_i + pyr_bam_dict = {sample_id : pyr_bam} + print(pyr_bam_dict) + print(pyr_seacr) + # frag_count_pyr = pr.count_overlaps(pyr_bam_dict, pyr_seacr) + # print(frag_count_pyr) + # frag_counts = frag_count_pyr.items()[0][1][sample_id].sum() + # self.frip.at[i,'frags_in_peaks'] = frag_counts + + # self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 + def annotate_data(self): # Make new perctenage alignment columns self.data_table['target_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_target')] / self.data_table.loc[:, ('bt2_total_reads_target')] * 100 @@ -377,29 +471,16 @@ def scale_factor_summary(self): # ---------- Plot 7 - Peak Analysis --------- # def no_of_peaks(self): - # 7a - Number of peaks + # 7a - Number of peaks fig, ax = plt.subplots() fig.suptitle("Total Peaks") - ## create number of peaks df - unique_groups = self.seacr_beds.group.unique() - unique_replicates = self.seacr_beds.replicate.unique() - self.df_no_peaks = pd.DataFrame(index=range(0,(len(unique_groups)*len(unique_replicates))), columns=['group','replicate','all_peaks']) - k=0 # counter - - for i in list(range(len(unique_groups))): - for j in list(range(len(unique_replicates))): - self.df_no_peaks.at[k,'all_peaks'] = self.seacr_beds[(self.seacr_beds['group']==unique_groups[i]) & (self.seacr_beds['replicate']==unique_replicates[j])].shape[0] - self.df_no_peaks.at[k,'group'] = unique_groups[i] - self.df_no_peaks.at[k,'replicate'] = unique_replicates[j] - k=k+1 - ax = sns.boxplot(data=self.df_no_peaks, x='group', y='all_peaks') ax.set_ylabel("No. of Peaks") return fig, self.df_no_peaks - # 7b - Width of peaks + # 7b - Width of peaks def peak_widths(self): fig, ax = plt.subplots() @@ -412,81 +493,19 @@ def peak_widths(self): return fig, self.seacr_beds - # 7c - Peaks reproduced + # 7c - Peaks reproduced def reproduced_peaks(self): fig, ax = plt.subplots() - ## empty dataframe to fill in loop - reprod_peak_stats = self.df_no_peaks - reprod_peak_stats = reprod_peak_stats.reindex(columns=reprod_peak_stats.columns.tolist() + ['no_peaks_reproduced','peak_reproduced_rate']) - - # create permutations list - def array_permutate(x): - arr_len=len(x) - loop_list = x - out_list = x - for i in range(arr_len-1): - i_list = np.roll(loop_list, -1) - out_list = np.vstack((out_list, i_list)) - loop_list = i_list - return out_list - - ## create pyranges objects and fill df - unique_groups = self.seacr_beds.group.unique() - unique_replicates = self.seacr_beds.replicate.unique() - rep_permutations = array_permutate(range(len(unique_replicates))) - idx_count=0 - - for i in list(range(len(unique_groups))): - group_i = unique_groups[i] - for k in list(range(len(unique_replicates))): - pyr_query = pr.PyRanges() - rep_perm = rep_permutations[k] - for j in rep_perm: - rep_i = unique_replicates[j] - peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] - pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) - if(len(pyr_query) > 0): - pyr_overlap = pyr_query.join(pyr_subject) - pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) - pyr_query = pyr_overlap - - else: - pyr_query = pyr_subject - - pyr_starts = pyr_overlap.values()[0]['Start'] - unique_pyr_starts = pyr_starts.unique() - reprod_peak_stats.at[idx_count, 'no_peaks_reproduced'] = len(unique_pyr_starts) - idx_count = idx_count + 1 - - fill_reprod_rate = (reprod_peak_stats['no_peaks_reproduced'] / reprod_peak_stats['all_peaks'])*100 - reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate # plot - ax = sns.barplot(data=reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate") + # ax = sns.barplot(data=self.reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate") - return fig, reprod_peak_stats + return fig, self.reprod_peak_stats - # 7d - Fragments within peaks + # 7d - Fragments within peaks def frags_in_peaks(self): fig, ax = plt.subplots() - for i in range(len(self.bam_df_list)): - bam_i = self.bam_df_list[i] - self.frip.at[i,'mapped_frags'] = bam_i.shape[0] - group_i = self.frip.at[i,'group'] - rep_i = self.frip.at[i,'replicate'] - seacr_bed_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] - pyr_seacr = pr.PyRanges(chromosomes=seacr_bed_i['chrom'], starts=seacr_bed_i['start'], ends=seacr_bed_i['end']) - pyr_bam = pr.PyRanges(df=bam_i) - sample_id = group_i + "_" + rep_i - pyr_bam_dict = {sample_id : pyr_bam} - frag_count_pyr = pr.count_overlaps(pyr_bam_dict, pyr_seacr) - frag_counts = frag_count_pyr.items()[0][1][sample_id].sum() - self.frip.at[i,'frags_in_peaks'] = frag_counts - - self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 - ax = sns.boxplot(data=self.frip, x='group', y='percentage_frags_in_peaks') return fig, self.frip - From a24e3c052fbd05300a4cea5b393455198ff5abd7 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 30 Apr 2021 15:43:23 +0100 Subject: [PATCH 124/675] cover case for only 1 replicate --- bin/python/reporting/lib/figures.py | 80 ++++++++++++++--------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index fe497f02..9f2b410f 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -169,32 +169,34 @@ def array_permutate(x): unique_groups = self.seacr_beds.group.unique() unique_replicates = self.seacr_beds.replicate.unique() rep_permutations = array_permutate(range(len(unique_replicates))) - idx_count=0 - - for i in list(range(len(unique_groups))): - group_i = unique_groups[i] - for k in list(range(len(unique_replicates))): - pyr_query = pr.PyRanges() - rep_perm = rep_permutations[k] - for j in rep_perm: - rep_i = unique_replicates[j] - peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] - pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) - if(len(pyr_query) > 0): - pyr_overlap = pyr_query.join(pyr_subject) - pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) - pyr_query = pyr_overlap - - else: - pyr_query = pyr_subject - - pyr_starts = pyr_overlap.values()[0]['Start'] - unique_pyr_starts = pyr_starts.unique() - self.reprod_peak_stats.at[idx_count, 'no_peaks_reproduced'] = len(unique_pyr_starts) - idx_count = idx_count + 1 - - fill_reprod_rate = (self.reprod_peak_stats['no_peaks_reproduced'] / self.reprod_peak_stats['all_peaks'])*100 - self.reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate + self.replicate_number = len(unique_replicates) + + if self.replicate_number > 1: + idx_count=0 + for i in list(range(len(unique_groups))): + group_i = unique_groups[i] + for k in list(range(len(unique_replicates))): + pyr_query = pr.PyRanges() + rep_perm = rep_permutations[k] + for j in rep_perm: + rep_i = unique_replicates[j] + peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] + pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) + if(len(pyr_query) > 0): + pyr_overlap = pyr_query.join(pyr_subject) + pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) + pyr_query = pyr_overlap + + else: + pyr_query = pyr_subject + + pyr_starts = pyr_overlap.values()[0]['Start'] + unique_pyr_starts = pyr_starts.unique() + self.reprod_peak_stats.at[idx_count, 'no_peaks_reproduced'] = len(unique_pyr_starts) + idx_count = idx_count + 1 + + fill_reprod_rate = (self.reprod_peak_stats['no_peaks_reproduced'] / self.reprod_peak_stats['all_peaks'])*100 + self.reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate # ---------- Data - Percentage of fragments in peaks --------- # # test_query = pr.PyRanges(chromosomes="chr1", starts=[1,7,15], ends=[3,8,20]) @@ -209,24 +211,21 @@ def array_permutate(x): group_i = self.frip.at[i,'group'] rep_i = self.frip.at[i,'replicate'] seacr_bed_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] - # bam_i.to_csv('test_bam.csv', index=False) - # seacr_bed_i.to_csv('test_bed.csv', index=False) # seacr_bed_prep = seacr_bed_i.drop(['total_signal','max_signal','group','replicate'],axis=1) # seacr_bed_prep = seacr_bed_prep.rename(columns={"chrom":"Chromosome","start":"Start","end":"End"}) - # pyr_seacr = pr.PyRanges(df=seacr_bed_prep) pyr_seacr = pr.PyRanges(chromosomes=seacr_bed_i['chrom'], starts=seacr_bed_i['start'], ends=seacr_bed_i['end']) pyr_bam = pr.PyRanges(df=bam_i) # pyr_bam = pyr_bam.apply(lambda df: df.drop(['Strand','Flag'], axis=1)) sample_id = group_i + "_" + rep_i pyr_bam_dict = {sample_id : pyr_bam} - print(pyr_bam_dict) - print(pyr_seacr) - # frag_count_pyr = pr.count_overlaps(pyr_bam_dict, pyr_seacr) - # print(frag_count_pyr) - # frag_counts = frag_count_pyr.items()[0][1][sample_id].sum() - # self.frip.at[i,'frags_in_peaks'] = frag_counts + # print(pyr_bam_dict) + # print(pyr_seacr) + frag_count_pyr = pr.count_overlaps(pyr_bam_dict, pyr_seacr) + # print(frag_count_pyr) + frag_counts = frag_count_pyr.items()[0][1][sample_id].sum() + self.frip.at[i,'frags_in_peaks'] = frag_counts - # self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 + self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 def annotate_data(self): # Make new perctenage alignment columns @@ -283,9 +282,10 @@ def generate_plots(self): data["peak_widths"] = data7b # Plot 7c - plot7c, data7c = self.reproduced_peaks() - plots["reproduced_peaks"] = plot7c - data["reproduced_peaks"] = data7c + if self.replicate_number > 1: + plot7c, data7c = self.reproduced_peaks() + plots["reproduced_peaks"] = plot7c + data["reproduced_peaks"] = data7c # Plot 7d plot7d, data7d = self.frags_in_peaks() @@ -498,7 +498,7 @@ def reproduced_peaks(self): fig, ax = plt.subplots() # plot - # ax = sns.barplot(data=self.reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate") + ax = sns.barplot(data=self.reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate") return fig, self.reprod_peak_stats From cecbc7688a026f1f00ddb33fab762c7a837ae4ae Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 4 May 2021 11:03:04 +0100 Subject: [PATCH 125/675] fixing charting plot1 titles --- bin/python/reporting/lib/figures.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 9f2b410f..63136891 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -364,12 +364,12 @@ def alignment_summary(self): # Alignment rate hg38 sns.boxplot(data=df_data, x='group', y='target_alignment_rate', ax=seq_summary[1,0]) - seq_summary[1,0].set_title("Alignment Rate (hg38)") + seq_summary[1,0].set_title("Alignment Rate (Target)") seq_summary[1,0].set_ylabel("Percent of Fragments Aligned") # Alignment rate e.coli sns.boxplot(data=df_data, x='group', y='spikein_alignment_rate', ax=seq_summary[1,1]) - seq_summary[1,1].set_title("Alignment Rate (e.coli)") + seq_summary[1,1].set_title("Alignment Rate (Spike-in)") seq_summary[1,1].set_ylabel("Percent of Fragments Aligned") plt.subplots_adjust(wspace=0.5, hspace=0.5) From 058cf634fbf712b13c2d39ffe9c2c32f9c52b00f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 4 May 2021 11:40:16 +0100 Subject: [PATCH 126/675] edit frag violin df in order to edit plot --- bin/python/reporting/lib/figures.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 63136891..6d37701f 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -65,20 +65,31 @@ def load_data(self): frags_arr = np.append(frags_arr, dt_frag_i_long) sample_arr = np.append(sample_arr, dt_sample_i_long) self.frag_hist = self.frag_hist.append(dt_frag_i) + print(sample_arr[1:10,]) + print(self.frag_hist.head(10)) # ---------- Data - frag_violin --------- # # create hue array using regex pattern matching for i in list(range(0,len(sample_arr))): sample_i = sample_arr[i] - sample_exp = re.findall("^[^_]*", sample_i) + # sample_exp = re.findall("^[^_]*", sample_i) + sample_exp = sample_i.split(".")[0] + group_exp = sample_exp.split("_")[0] + rep_exp = sample_exp.split("_")[1] + if i==0: - sample_exp_arr = np.array(sample_exp[0]) + # sample_exp_arr = np.array(sample_exp[0]) + group_arr = np.array(group_exp) + rep_arr = np.array(rep_exp) else: - sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) - - self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) + # sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) + group_arr = np.append(group_arr, group_exp) + rep_arr = np.append(rep_arr, rep_exp) + self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "group" : group_arr , "replicate": rep_arr}, index = np.arange(len(frags_arr))) + # self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) + print(self.frag_violin.head(10)) # ---------- Data - frag_bin500 --------- # # create full join data frame for count data # start by creating list of bin500 files @@ -418,7 +429,8 @@ def duplication_summary(self): # ---------- Plot 3 - Fragment Distribution Violin --------- # def fraglen_summary_violin(self): fig, ax = plt.subplots() - ax = sns.violinplot(data=self.frag_violin, x="sample", y="fragment_size", hue="histone_mark") + ax = sns.violinplot(data=self.frag_violin, x="group", y="fragment_size", hue="replicate") + ax.set(ylabel="Fragment Size") return fig, self.frag_violin From 9772050fd249486ae8fb419d3bb1dfb5d1db3c7b Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 4 May 2021 17:02:46 +0100 Subject: [PATCH 127/675] working syntax for pyranges count_overlaps and adding titles to plots --- bin/python/reporting/lib/figures.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 6d37701f..caff3de6 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -65,8 +65,9 @@ def load_data(self): frags_arr = np.append(frags_arr, dt_frag_i_long) sample_arr = np.append(sample_arr, dt_sample_i_long) self.frag_hist = self.frag_hist.append(dt_frag_i) - print(sample_arr[1:10,]) - print(self.frag_hist.head(10)) + + # self.frag_hist[['group','replicate']] = self.frag_hist['Sample'].str.split('.', 1)[:,0].str.split('_', 1, expand=True) + # print(self.frag_hist.head(10)) # ---------- Data - frag_violin --------- # # create hue array using regex pattern matching @@ -89,7 +90,7 @@ def load_data(self): self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "group" : group_arr , "replicate": rep_arr}, index = np.arange(len(frags_arr))) # self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) - print(self.frag_violin.head(10)) + # print(self.frag_violin.head(10)) # ---------- Data - frag_bin500 --------- # # create full join data frame for count data # start by creating list of bin500 files @@ -231,9 +232,16 @@ def array_permutate(x): pyr_bam_dict = {sample_id : pyr_bam} # print(pyr_bam_dict) # print(pyr_seacr) - frag_count_pyr = pr.count_overlaps(pyr_bam_dict, pyr_seacr) + frag_count_pyr = pyr_bam.count_overlaps(pyr_seacr) # pr.count_overlaps(pyr_bam_dict, pyr_seacr) # print(frag_count_pyr) - frag_counts = frag_count_pyr.items()[0][1][sample_id].sum() + # print(frag_count_pyr.items()) + # print(frag_count_pyr.dfs()) + # print(frag_count_pyr.NumberOverlaps.sum()) + # print(np.count_nonzero(frag_count_pyr.NumberOverlaps)) + # frag_counts = frag_count_pyr.items()[0][1][sample_id].sum() + # frag_counts = frag_count_pyr.items()[0][1]['NumberOverlaps'].sum() + frag_counts = frag_count_pyr.NumberOverlaps.sum() + self.frip.at[i,'frags_in_peaks'] = frag_counts self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 @@ -431,6 +439,7 @@ def fraglen_summary_violin(self): fig, ax = plt.subplots() ax = sns.violinplot(data=self.frag_violin, x="group", y="fragment_size", hue="replicate") ax.set(ylabel="Fragment Size") + fig.suptitle("Fragment Length Distribution") return fig, self.frag_violin @@ -438,6 +447,7 @@ def fraglen_summary_violin(self): def fraglen_summary_histogram(self): fig, ax = plt.subplots() ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="Sample") + fig.suptitle("Fragment Length Distribution") return fig, self.frag_hist @@ -456,6 +466,7 @@ def replicate_heatmap(self): plot_data = self.frag_bin500[self.frag_bin500.columns[-(len(self.frag_bin500.columns)-2):]] corr_mat = plot_data.corr() ax = sns.heatmap(corr_mat, annot=True) + fig.suptitle("Replicate Reproducibility") return fig, self.frag_bin500 @@ -501,6 +512,7 @@ def peak_widths(self): self.seacr_beds['peak_width'] = self.seacr_beds['peak_width'].abs() ax = sns.violinplot(data=self.seacr_beds, x="group", y="peak_width", hue="replicate") + fig.suptitle("Peak Width Distribution") return fig, self.seacr_beds @@ -511,6 +523,7 @@ def reproduced_peaks(self): # plot ax = sns.barplot(data=self.reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate") + fig.suptitle("Peak Reprodducibility") return fig, self.reprod_peak_stats @@ -519,5 +532,6 @@ def frags_in_peaks(self): fig, ax = plt.subplots() ax = sns.boxplot(data=self.frip, x='group', y='percentage_frags_in_peaks') + fig.suptitle("Aligned Fragments within Peaks") return fig, self.frip From 3137016fa24d1ab71d06971fbd63a9204aef8ba6 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 5 May 2021 11:30:03 +0100 Subject: [PATCH 128/675] update how I run python reports script in container --- dev/docker/static_reports/run.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dev/docker/static_reports/run.sh b/dev/docker/static_reports/run.sh index 4851fde8..2896331e 100755 --- a/dev/docker/static_reports/run.sh +++ b/dev/docker/static_reports/run.sh @@ -1,7 +1,16 @@ #!/bin/bash +# docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/python/reporting/main.py genimg \ +# --meta /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ +# --raw_frag /home/repo/dev/docker/static_reports/test_data/*_raw.csv \ +# --output /home/repo/dev/docker/static_reports/test_output \ +# --log /home/repo/dev/docker/static_reports/test_output/log.txt + docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/python/reporting/main.py genimg \ ---meta /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ ---raw_frag /home/repo/dev/docker/static_reports/test_data/*_raw.csv \ +--meta /home/repo/dev/docker/static_reports/test_data/tmp_dir/meta_table.csv \ +--raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*_raw.csv \ +--bed_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bin500*.bed \ +--seacr_bed /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bed.*.bed \ +--bams /home/repo/dev/docker/static_reports/test_data/tmp_dir/*.bam \ --output /home/repo/dev/docker/static_reports/test_output \ --log /home/repo/dev/docker/static_reports/test_output/log.txt \ No newline at end of file From 1fa31850d757a8d7dd60725d791b2d7b64f41f03 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 5 May 2021 11:58:03 +0100 Subject: [PATCH 129/675] add process specific resources to overwrite nf-core label for process --- conf/base.config | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/conf/base.config b/conf/base.config index 12873596..896ee489 100644 --- a/conf/base.config +++ b/conf/base.config @@ -51,5 +51,10 @@ process { withLabel:error_retry { errorStrategy = 'retry' maxRetries = 2 - } + } + withName:DEEPTOOLS_PLOTHEATMAP { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 36.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } + } } From 07713fb26604eaae29688b712ae6cbab016dab65 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 6 May 2021 14:20:18 +0100 Subject: [PATCH 130/675] Added with name for deeptools --- conf/base.config | 5 ----- nextflow.config | 15 +++++++++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/conf/base.config b/conf/base.config index 896ee489..69e47655 100644 --- a/conf/base.config +++ b/conf/base.config @@ -52,9 +52,4 @@ process { errorStrategy = 'retry' maxRetries = 2 } - withName:DEEPTOOLS_PLOTHEATMAP { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } - } } diff --git a/nextflow.config b/nextflow.config index 88aceda7..6f307d52 100644 --- a/nextflow.config +++ b/nextflow.config @@ -84,10 +84,9 @@ params { // Max resource options // Defaults only, expecting to be overwritten - max_memory = '128.GB' - max_cpus = 16 - max_time = '240.h' - + max_memory = '8.GB' + max_cpus = 4 + max_time = '24.h' } // Load base.config by default for all pipelines @@ -171,6 +170,14 @@ manifest { version = '1.0-dev' } +process { + withName:DEEPTOOLS_PLOTHEATMAP { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 36.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } + } +} + // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(obj, type) { From 683edf9bb3b411c3e1f2747f1ee5e4ead3eca44e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 6 May 2021 14:20:32 +0100 Subject: [PATCH 131/675] Lowered resources for local.config --- conf/local.config | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/conf/local.config b/conf/local.config index 2d7b1940..30c9232e 100644 --- a/conf/local.config +++ b/conf/local.config @@ -1,15 +1,11 @@ /* - * ------------------------------------------------- + * --------------------------------------------------- * Nextflow config file for running tests on a laptop - * ------------------------------------------------- - * Defines bundled input files and everything required - * to run a fast and simple test. Use as follows: - * nextflow run nf-core/cutandrun -profile test, + * --------------------------------------------------- */ params { - // Limit resources so that this can run on GitHub Actions - max_cpus = 8 + max_cpus = 4 max_memory = 8.GB - max_time = 6.h + max_time = 24.h } From 0a1322c58ab314e23c423b53658e4d91e628dd16 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 6 May 2021 15:52:59 +0100 Subject: [PATCH 132/675] Added samtools custom view --- .../samtools/custom_view/functions.nf | 59 +++++++++++++++++++ .../software/samtools/custom_view/main.nf | 36 +++++++++++ 2 files changed, 95 insertions(+) create mode 100644 modules/local/software/samtools/custom_view/functions.nf create mode 100644 modules/local/software/samtools/custom_view/main.nf diff --git a/modules/local/software/samtools/custom_view/functions.nf b/modules/local/software/samtools/custom_view/functions.nf new file mode 100644 index 00000000..d25eea86 --- /dev/null +++ b/modules/local/software/samtools/custom_view/functions.nf @@ -0,0 +1,59 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/software/samtools/custom_view/main.nf b/modules/local/software/samtools/custom_view/main.nf new file mode 100644 index 00000000..5587e153 --- /dev/null +++ b/modules/local/software/samtools/custom_view/main.nf @@ -0,0 +1,36 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +def options = initOptions(params.options) + +process SAMTOOLS_CUSTOMVIEW { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam) + tuple val(meta), path(bai) + + output: + tuple val(meta), path("*.txt"), emit: tsv + path "*.version.log" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + samtools view $options.args -@ $task.cpus $bam | $options.args2 > ${prefix}.txt + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.log + """ +} From 373d9d62b1a8543370313d702b701af1117ac11f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 6 May 2021 15:53:21 +0100 Subject: [PATCH 133/675] Changed histogram calculation method (unfinished) --- bin/python/reporting/lib/figures.py | 2 +- conf/modules.config | 7 +++++++ cutandrun.nf | 10 ++++++++-- modules/local/process/generate_reports.nf | 2 +- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index caff3de6..49a70ca3 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -51,7 +51,7 @@ def load_data(self): for i in list(range(len(dt_frag_list))): # create dataframe from csv file for each file and save to a list - dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', skiprows=[0], header=0) + dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', header=None) # create long forms of fragment histograms dt_frag_i_long = np.repeat(dt_frag_i['Size'].values, dt_frag_i['Occurrences'].values) diff --git a/conf/modules.config b/conf/modules.config index c144d2ee..893887de 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -216,5 +216,12 @@ params { args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\"" publish_dir = "deeptools/heatmaps/peaks" } + + 'samtools_frag_len' { + args = '-F 0x04' + args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" + suffix = '.frag_len' + publish_dir = 'frag_len' + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 6cc09cdf..2c27411c 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -154,6 +154,7 @@ include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) include { AWK as AWK_EDIT_PEAK_BED } from './modules/local/process/awk' addParams( options: modules['awk_edit_peak_bed'] ) include { DESEQ2_DIFF } from './modules/local/process/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) +include { SAMTOOLS_CUSTOMVIEW } from './modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -590,15 +591,20 @@ workflow CUTANDRUN { //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) + SAMTOOLS_CUSTOMVIEW ( + ch_samtools_bam, + ch_samtools_bai + ) + //SAMTOOLS_CUSTOMVIEW.out.txt | view + // Filter bam bai channels for non-igg only ch_samtools_bam_bai .filter { it[0].group != 'igg' } .set { ch_no_igg_bam_bai } - GENERATE_REPORTS( EXPORT_META.out.csv, - DEEPTOOLS_BAMPEFRAGMENTSIZE.out.raw_csv.collect{it[1]}, + SAMTOOLS_CUSTOMVIEW.out.txt.collect{it[1]}, AWK_FRAG_BIN.out.file.collect{it[1]}, SEACR_CALLPEAK.out.bed.collect{it[1]}, ch_no_igg_bam_bai.collect{it[1,2]} diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index 8b752b3b..1bb8e942 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -29,7 +29,7 @@ process GENERATE_REPORTS { """ $baseDir/bin/python/reporting/main.py genimg \\ --meta $meta_data \\ - --raw_frag "*_raw.csv" \\ + --raw_frag "*.frag_len.txt" \\ --bed_frag "*bin500.awk.bed" \\ --seacr_bed "*bed.*.bed" \\ --bams "*.bam" \\ From 62212b52c5dffd1b86da9affaa6dfc5e8e73d43c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 6 May 2021 17:45:47 +0100 Subject: [PATCH 134/675] intermediate work on charting --- bin/python/reporting/lib/figures.py | 33 ++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index caff3de6..175bc4d0 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -146,6 +146,36 @@ def load_data(self): self.frip.at[k, 'mapped_frags'] = bam_now.shape[0] k=k+1 + # ---------- Data - New frag_hist --------- # + # print(self.bam_df_list) + + for i in list(range(len(self.bam_df_list))): + df_i = self.bam_df_list[i] + widths_i = (df_i['End'] - df_i['Start']).abs() + print(df_i) + print(widths_i[1:20,]) + print(np.max(widths_i)) + unique_i, counts_i = np.unique(widths_i, return_counts=True) + group_i = np.repeat(self.frip.at[i, 'group'], len(unique_i)) + rep_i = np.repeat(self.frip.at[i, 'replicate'], len(unique_i)) + + if i==0: + frag_lens = unique_i + frag_counts = counts_i + group_arr = group_i + rep_arr = rep_i + else: + frag_lens = np.append(frag_lens, unique_i) + frag_counts = np.append(frag_counts, counts_i) + group_arr = np.append(group_arr, group_i) + rep_arr = np.append(rep_arr, rep_i) + + self.frag_series = pd.DataFrame({'group' : group_arr, 'replicate' : rep_arr, 'frag_len' : frag_lens, 'occurences' : frag_counts}) + # print(self.frag_series.head(10)) + # print(self.frip.at[i, 'group']) + # print(self.frip.at[i, 'replicate']) + + # ---------- Data - Peak stats --------- # ## create number of peaks df unique_groups = self.seacr_beds.group.unique() @@ -446,7 +476,8 @@ def fraglen_summary_violin(self): # ---------- Plot 4 - Fragment Distribution Histogram --------- # def fraglen_summary_histogram(self): fig, ax = plt.subplots() - ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="Sample") + # ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="Sample") + ax = sns.lineplot(data=self.frag_series, x="frag_len", y="occurences", hue="group", style="replicate") fig.suptitle("Fragment Length Distribution") return fig, self.frag_hist From beed2f21bc9cf3b4af351250e7de71486ae96dd1 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 7 May 2021 12:15:26 +0100 Subject: [PATCH 135/675] typo txt should be tsv --- cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cutandrun.nf b/cutandrun.nf index 2c27411c..137a54a4 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -604,7 +604,7 @@ workflow CUTANDRUN { GENERATE_REPORTS( EXPORT_META.out.csv, - SAMTOOLS_CUSTOMVIEW.out.txt.collect{it[1]}, + SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, AWK_FRAG_BIN.out.file.collect{it[1]}, SEACR_CALLPEAK.out.bed.collect{it[1]}, ch_no_igg_bam_bai.collect{it[1,2]} From 2df7e6d30d4c02ed453cd1879ad5cb28ba48c9fd Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 7 May 2021 14:54:33 +0100 Subject: [PATCH 136/675] histogram (+violin) now working with new frag data --- bin/python/reporting/lib/figures.py | 71 ++++++++++++++++++----------- dev/docker/static_reports/run.sh | 5 +- 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index d8567d14..cb29e73b 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -51,44 +51,63 @@ def load_data(self): for i in list(range(len(dt_frag_list))): # create dataframe from csv file for each file and save to a list - dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', header=None) + dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', header=None, names=['Size','Occurrences']) + # print(dt_frag_i.shape[0]) + frag_base_i = os.path.basename(dt_frag_list[i]) + sample_id = frag_base_i.split(".")[0] + [group_i,rep_i] = sample_id.split("_") # create long forms of fragment histograms dt_frag_i_long = np.repeat(dt_frag_i['Size'].values, dt_frag_i['Occurrences'].values) - dt_sample_i_long = np.repeat(dt_frag_i['Sample'][0], len(dt_frag_i_long)) + dt_group_i_long = np.repeat(group_i, len(dt_frag_i_long)) + dt_rep_i_long = np.repeat(rep_i, len(dt_frag_i_long)) + + dt_group_i_short = np.repeat(group_i, dt_frag_i.shape[0]) + dt_rep_i_short = np.repeat(rep_i, dt_frag_i.shape[0]) if i==0: frags_arr = dt_frag_i_long - sample_arr = dt_sample_i_long + group_arr = dt_group_i_long + rep_arr = dt_rep_i_long + + group_short = dt_group_i_short + rep_short = dt_rep_i_short self.frag_hist = dt_frag_i else: frags_arr = np.append(frags_arr, dt_frag_i_long) - sample_arr = np.append(sample_arr, dt_sample_i_long) + group_arr = np.append(group_arr, dt_group_i_long) + rep_arr = np.append(rep_arr, dt_rep_i_long) + + group_short = np.append(group_short, dt_group_i_short) + rep_short = np.append(rep_short, dt_rep_i_short) self.frag_hist = self.frag_hist.append(dt_frag_i) + self.frag_hist['group'] = group_short + self.frag_hist['replicate'] = rep_short + print(self.frag_hist.head(10)) # self.frag_hist[['group','replicate']] = self.frag_hist['Sample'].str.split('.', 1)[:,0].str.split('_', 1, expand=True) # print(self.frag_hist.head(10)) # ---------- Data - frag_violin --------- # # create hue array using regex pattern matching - for i in list(range(0,len(sample_arr))): - sample_i = sample_arr[i] - # sample_exp = re.findall("^[^_]*", sample_i) - sample_exp = sample_i.split(".")[0] - group_exp = sample_exp.split("_")[0] - rep_exp = sample_exp.split("_")[1] - - - if i==0: - # sample_exp_arr = np.array(sample_exp[0]) - group_arr = np.array(group_exp) - rep_arr = np.array(rep_exp) - else: - # sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) - group_arr = np.append(group_arr, group_exp) - rep_arr = np.append(rep_arr, rep_exp) - - self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "group" : group_arr , "replicate": rep_arr}, index = np.arange(len(frags_arr))) + # for i in list(range(0,len(sample_arr))): + # sample_i = sample_arr[i] + # # sample_exp = re.findall("^[^_]*", sample_i) + # sample_exp = sample_i.split(".")[0] + # group_exp = sample_exp.split("_")[0] + # rep_exp = sample_exp.split("_")[1] + + + # if i==0: + # # sample_exp_arr = np.array(sample_exp[0]) + # group_arr = np.array(group_exp) + # rep_arr = np.array(rep_exp) + # else: + # # sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) + # group_arr = np.append(group_arr, group_exp) + # rep_arr = np.append(rep_arr, rep_exp) + + self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "group" : group_arr , "replicate": rep_arr} ) #, index = np.arange(len(frags_arr))) # self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) # print(self.frag_violin.head(10)) # ---------- Data - frag_bin500 --------- # @@ -152,9 +171,9 @@ def load_data(self): for i in list(range(len(self.bam_df_list))): df_i = self.bam_df_list[i] widths_i = (df_i['End'] - df_i['Start']).abs() - print(df_i) - print(widths_i[1:20,]) - print(np.max(widths_i)) + # print(df_i) + # print(widths_i[1:20,]) + # print(np.max(widths_i)) unique_i, counts_i = np.unique(widths_i, return_counts=True) group_i = np.repeat(self.frip.at[i, 'group'], len(unique_i)) rep_i = np.repeat(self.frip.at[i, 'replicate'], len(unique_i)) @@ -477,7 +496,7 @@ def fraglen_summary_violin(self): def fraglen_summary_histogram(self): fig, ax = plt.subplots() # ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="Sample") - ax = sns.lineplot(data=self.frag_series, x="frag_len", y="occurences", hue="group", style="replicate") + ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="group", style="replicate") fig.suptitle("Fragment Length Distribution") return fig, self.frag_hist diff --git a/dev/docker/static_reports/run.sh b/dev/docker/static_reports/run.sh index 2896331e..4303c46f 100755 --- a/dev/docker/static_reports/run.sh +++ b/dev/docker/static_reports/run.sh @@ -8,9 +8,10 @@ docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/python/reporting/main.py genimg \ --meta /home/repo/dev/docker/static_reports/test_data/tmp_dir/meta_table.csv \ ---raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*_raw.csv \ +--raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*frag_len.txt \ --bed_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bin500*.bed \ --seacr_bed /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bed.*.bed \ --bams /home/repo/dev/docker/static_reports/test_data/tmp_dir/*.bam \ --output /home/repo/dev/docker/static_reports/test_output \ ---log /home/repo/dev/docker/static_reports/test_output/log.txt \ No newline at end of file +--log /home/repo/dev/docker/static_reports/test_output/log.txt +# --raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*_raw.csv \ \ No newline at end of file From ff32783c625c89fbf677d9b6f5357340a99e447f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 7 May 2021 16:17:27 +0100 Subject: [PATCH 137/675] coloured plots --- bin/python/reporting/lib/figures.py | 36 +++++++++++++++-------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index cb29e73b..7919bffb 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -84,7 +84,7 @@ def load_data(self): self.frag_hist['group'] = group_short self.frag_hist['replicate'] = rep_short - print(self.frag_hist.head(10)) + # print(self.frag_hist.head(10)) # self.frag_hist[['group','replicate']] = self.frag_hist['Sample'].str.split('.', 1)[:,0].str.split('_', 1, expand=True) # print(self.frag_hist.head(10)) @@ -413,6 +413,8 @@ def gen_pdf(self, output_path, plots): # ---------- Plot 1 - Alignment Summary --------- # def alignment_summary(self): + sns.color_palette("magma", as_cmap=True) + # Subset data df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] @@ -421,22 +423,22 @@ def alignment_summary(self): fig.suptitle("Sequencing and Alignment Summary") # Seq depth - sns.boxplot(data=df_data, x='group', y='bt2_total_reads_target', ax=seq_summary[0,0]) + sns.boxplot(data=df_data, x='group', y='bt2_total_reads_target', ax=seq_summary[0,0], palette = "magma") seq_summary[0,0].set_title("Sequencing Depth") seq_summary[0,0].set_ylabel("Total Reads") # Alignable fragments - sns.boxplot(data=df_data, x='group', y='bt2_total_aligned_target', ax=seq_summary[0,1]) + sns.boxplot(data=df_data, x='group', y='bt2_total_aligned_target', ax=seq_summary[0,1], palette = "magma") seq_summary[0,1].set_title("Alignable Fragments") seq_summary[0,1].set_ylabel("Total Aligned Reads") # Alignment rate hg38 - sns.boxplot(data=df_data, x='group', y='target_alignment_rate', ax=seq_summary[1,0]) + sns.boxplot(data=df_data, x='group', y='target_alignment_rate', ax=seq_summary[1,0], palette = "magma") seq_summary[1,0].set_title("Alignment Rate (Target)") seq_summary[1,0].set_ylabel("Percent of Fragments Aligned") # Alignment rate e.coli - sns.boxplot(data=df_data, x='group', y='spikein_alignment_rate', ax=seq_summary[1,1]) + sns.boxplot(data=df_data, x='group', y='spikein_alignment_rate', ax=seq_summary[1,1], palette = "magma") seq_summary[1,1].set_title("Alignment Rate (Spike-in)") seq_summary[1,1].set_ylabel("Percent of Fragments Aligned") @@ -460,19 +462,19 @@ def duplication_summary(self): fig.suptitle("Duplication Summary") # Duplication rate - sns.boxplot(data=df_data, x='group', y='dedup_percent_duplication', ax=seq_summary[0]) + sns.boxplot(data=df_data, x='group', y='dedup_percent_duplication', ax=seq_summary[0], palette = "magma") seq_summary[0].set_ylabel("Duplication Rate (%)") seq_summary[0].set(ylim=(0, 100)) seq_summary[0].xaxis.set_tick_params(labelrotation=45) # Estimated library size - sns.boxplot(data=df_data, x='group', y='dedup_estimated_library_size', ax=seq_summary[1]) + sns.boxplot(data=df_data, x='group', y='dedup_estimated_library_size', ax=seq_summary[1], palette = "magma") seq_summary[1].set_ylabel("Estimated Library Size") seq_summary[1].yaxis.set_major_formatter(m_formatter) seq_summary[1].xaxis.set_tick_params(labelrotation=45) # No. of unique fragments - sns.boxplot(data=df_data, x='group', y='unique_frag_num', ax=seq_summary[2]) + sns.boxplot(data=df_data, x='group', y='unique_frag_num', ax=seq_summary[2], palette = "magma") seq_summary[2].set_ylabel("No. of Unique Fragments") seq_summary[2].yaxis.set_major_formatter(k_formatter) seq_summary[2].xaxis.set_tick_params(labelrotation=45) @@ -486,7 +488,7 @@ def duplication_summary(self): # ---------- Plot 3 - Fragment Distribution Violin --------- # def fraglen_summary_violin(self): fig, ax = plt.subplots() - ax = sns.violinplot(data=self.frag_violin, x="group", y="fragment_size", hue="replicate") + ax = sns.violinplot(data=self.frag_violin, x="group", y="fragment_size", hue="replicate", palette = "viridis") ax.set(ylabel="Fragment Size") fig.suptitle("Fragment Length Distribution") @@ -496,7 +498,7 @@ def fraglen_summary_violin(self): def fraglen_summary_histogram(self): fig, ax = plt.subplots() # ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="Sample") - ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="group", style="replicate") + ax = sns.lineplot(data=self.frag_hist, x="Size", y="Occurrences", hue="group", style="replicate", palette = "magma") fig.suptitle("Fragment Length Distribution") return fig, self.frag_hist @@ -504,7 +506,7 @@ def fraglen_summary_histogram(self): def alignment_summary_ex(self): df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] - ax = px.box(df_data, x="group", y="bt2_total_reads_target") + ax = px.box(df_data, x="group", y="bt2_total_reads_target", palette = "magma") return ax, df_data @@ -533,11 +535,11 @@ def scale_factor_summary(self): df_data_scale = self.data_table.loc[:, ('id', 'group','scale_factor')] # Scale factor - sns.boxplot(data=df_data_scale, x='group', y='scale_factor', ax=scale_summary[0]) + sns.boxplot(data=df_data_scale, x='group', y='scale_factor', ax=scale_summary[0], palette = "magma") scale_summary[0].set_ylabel('Scale Factor') # Normalised fragment count - sns.boxplot(data=df_normalised_frags, x='group', y='normalised_frags', ax=scale_summary[1]) + sns.boxplot(data=df_normalised_frags, x='group', y='normalised_frags', ax=scale_summary[1], palette = "magma") scale_summary[1].set_ylabel('Normalised Fragment Count') return fig, df_data_scale @@ -548,7 +550,7 @@ def no_of_peaks(self): fig, ax = plt.subplots() fig.suptitle("Total Peaks") - ax = sns.boxplot(data=self.df_no_peaks, x='group', y='all_peaks') + ax = sns.boxplot(data=self.df_no_peaks, x='group', y='all_peaks', palette = "magma") ax.set_ylabel("No. of Peaks") return fig, self.df_no_peaks @@ -561,7 +563,7 @@ def peak_widths(self): self.seacr_beds['peak_width'] = self.seacr_beds['end'] - self.seacr_beds['start'] self.seacr_beds['peak_width'] = self.seacr_beds['peak_width'].abs() - ax = sns.violinplot(data=self.seacr_beds, x="group", y="peak_width", hue="replicate") + ax = sns.violinplot(data=self.seacr_beds, x="group", y="peak_width", hue="replicate", palette = "viridis") fig.suptitle("Peak Width Distribution") return fig, self.seacr_beds @@ -572,7 +574,7 @@ def reproduced_peaks(self): fig, ax = plt.subplots() # plot - ax = sns.barplot(data=self.reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate") + ax = sns.barplot(data=self.reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate", palette = "viridis") fig.suptitle("Peak Reprodducibility") return fig, self.reprod_peak_stats @@ -581,7 +583,7 @@ def reproduced_peaks(self): def frags_in_peaks(self): fig, ax = plt.subplots() - ax = sns.boxplot(data=self.frip, x='group', y='percentage_frags_in_peaks') + ax = sns.boxplot(data=self.frip, x='group', y='percentage_frags_in_peaks', palette = "magma") fig.suptitle("Aligned Fragments within Peaks") return fig, self.frip From bf414a0ff54e8a4cec3157c151cac040806662b1 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 10 May 2021 09:53:10 +0100 Subject: [PATCH 138/675] include multiqc and get software versions --- cutandrun.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index 137a54a4..993b06e2 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -473,9 +473,9 @@ workflow CUTANDRUN { /* * MODULE: Collect software versions used in pipeline */ - // GET_SOFTWARE_VERSIONS ( - // ch_software_versions.map { it }.collect() - // ) + GET_SOFTWARE_VERSIONS ( + ch_software_versions.map { it }.collect() + ) /* * MODULE: Multiqc From 25b94575a4d6ea4d92fae890c39e8e9b614c6d1a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 10 May 2021 10:20:50 +0100 Subject: [PATCH 139/675] set skip_multiqc to false as default --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 6f307d52..ea02d9b1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,7 +24,7 @@ params { // QC skip_qc = false skip_fastqc = false - skip_multiqc = true + skip_multiqc = false // Sample handling save_merged_fastq = false From 3949f28d7cbb818f1b2ecefb20c744b33288f766 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 10 May 2021 14:25:20 +0100 Subject: [PATCH 140/675] add samtools sort process specific options --- modules/nf-core/subworkflow/bam_sort_samtools.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/nf-core/subworkflow/bam_sort_samtools.nf b/modules/nf-core/subworkflow/bam_sort_samtools.nf index 44a8b7e1..9841a562 100644 --- a/modules/nf-core/subworkflow/bam_sort_samtools.nf +++ b/modules/nf-core/subworkflow/bam_sort_samtools.nf @@ -3,8 +3,9 @@ */ params.options = [:] +params.samtools_sort_options = [:] -include { SAMTOOLS_SORT } from '../software/samtools/sort/main' addParams( options: params.options ) +include { SAMTOOLS_SORT } from '../software/samtools/sort/main' addParams( options: params.samtools_sort_options ) include { SAMTOOLS_INDEX } from '../software/samtools/index/main' addParams( options: params.options ) include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) From 75d32c20df5a66297c2a38a42b94805f7dfbf17f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 10 May 2021 14:31:27 +0100 Subject: [PATCH 141/675] sort bam by query name --- conf/modules.config | 4 ++++ cutandrun.nf | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 893887de..b150f61c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -223,5 +223,9 @@ params { suffix = '.frag_len' publish_dir = 'frag_len' } + + 'samtools_sort' { + args = "-n" + } } } diff --git a/cutandrun.nf b/cutandrun.nf index 993b06e2..a4ff8c0f 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -197,6 +197,7 @@ include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from './modules include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) include { MARK_DUPLICATES_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) +include { BAM_SORT_SAMTOOLS } from './modules/nf-core/subworkflow/bam_sort_samtools' addParams( samtools_sort_options: modules['samtools_sort'] ) //////////////////////////////////////////////////// /* -- RUN MAIN WORKFLOW -- */ @@ -602,6 +603,11 @@ workflow CUTANDRUN { .filter { it[0].group != 'igg' } .set { ch_no_igg_bam_bai } + // Sort bams by mate pairs + BAM_SORT_SAMTOOLS ( ch_samtools_bam ) + + + GENERATE_REPORTS( EXPORT_META.out.csv, SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, From dfb95e0c8824f67a7cfe519058f4c7e10ec8e5d9 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 11 May 2021 09:41:23 +0100 Subject: [PATCH 142/675] use pysam for constructing frags --- bin/python/reporting/lib/figures.py | 56 ++++++++++++++++++++++- dev/docker/static_reports/environment.yml | 3 +- dev/docker/static_reports/run.sh | 2 +- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 7919bffb..fe8f6f83 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -12,6 +12,8 @@ import seaborn as sns import plotly.express as px import pyranges as pr +import pysam +import time class Figures: data_table = None @@ -154,8 +156,60 @@ def load_data(self): self.bam_df_list = list() self.frip = pd.DataFrame(data=None, index=range(len(bam_list)), columns=['group','replicate','mapped_frags','frags_in_peaks','percentage_frags_in_peaks']) k = 0 #counter + + def pe_bam_to_df(bam_path): + bamfile = pysam.AlignmentFile(bam_path, "rb") + # Iterate through reads. + read1 = None + read2 = None + # print("hello") + # time.sleep(3) + k=0 #counter + + for read in bamfile: + # print ("new read " + str(read.is_read2)) + # print(read) + # print(type(read)) + + + if not read.is_paired or read.mate_is_unmapped or read.is_duplicate: + continue + + if read.is_read2: + read2 = read + # print("is read2: " + read.query_name) + + else: + read1 = read + read2 = None + # print("is read1: " + read.query_name) + + if read1 is not None and read2 is not None and read1.query_name == read2.query_name: + start_pos = min(read1.get_reference_positions()[0], read2.get_reference_positions()[0]) + end_pos = max(read1.get_reference_positions()[-1], read2.get_reference_positions()[-1]) + chrom = "chr" + str(read.reference_id) + + if k==0: + start_arr = np.array(start_pos) + end_arr = np.array(end_pos) + chrom_arr = np.array(chrom) + + else: + start_arr = np.append(start_arr, start_pos) + end_arr = np.append(end_arr, end_pos) + chrom_arr = np.append(chrom_arr, chrom) + + k=k+1 + + bam_df = pd.DataFrame({ "Chromosome" : chrom_arr, "Start" : start_arr, "End" : end_arr }) + return(bam_df) + + for bam in bam_list: - bam_now = pr.read_bam(bam, as_df=True, filter_flag=0) # no frags filtered + # bam_now = pr.read_bam(bam, as_df=True, filter_flag=0) # no frags filtered + # print(bam_now) + bam_now = pe_bam_to_df(bam) + print(bam_now.head(10)) self.bam_df_list.append(bam_now) bam_base = os.path.basename(bam) sample_id = bam_base.split(".")[0] diff --git a/dev/docker/static_reports/environment.yml b/dev/docker/static_reports/environment.yml index d2bdce6c..d8005977 100644 --- a/dev/docker/static_reports/environment.yml +++ b/dev/docker/static_reports/environment.yml @@ -14,4 +14,5 @@ dependencies: - seaborn=0.11.* - plotly:plotly_express=0.4.* - pyranges=0.0.96 - - bamread=0.0.7 \ No newline at end of file + - bamread=0.0.7 + - pysam=0.16.0.1 \ No newline at end of file diff --git a/dev/docker/static_reports/run.sh b/dev/docker/static_reports/run.sh index 4303c46f..8e866a36 100755 --- a/dev/docker/static_reports/run.sh +++ b/dev/docker/static_reports/run.sh @@ -11,7 +11,7 @@ docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest / --raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*frag_len.txt \ --bed_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bin500*.bed \ --seacr_bed /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bed.*.bed \ ---bams /home/repo/dev/docker/static_reports/test_data/tmp_dir/*.bam \ +--bams /home/repo/dev/docker/static_reports/test_data/tmp_dir/*sorted.bam \ --output /home/repo/dev/docker/static_reports/test_output \ --log /home/repo/dev/docker/static_reports/test_output/log.txt # --raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*_raw.csv \ \ No newline at end of file From da8153531b3a4835452bd0061831d63a4c6d7b0a Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 11 May 2021 11:09:53 +0000 Subject: [PATCH 143/675] Template update for nf-core/tools version 1.14 --- .github/PULL_REQUEST_TEMPLATE.md | 7 +++-- .github/workflows/ci.yml | 5 ++- Dockerfile | 2 +- README.md | 2 +- lib/NfcoreSchema.groovy | 54 +++++++++++++++++--------------- main.nf | 4 +-- nextflow.config | 16 +++++----- nextflow_schema.json | 6 ++-- 8 files changed, 52 insertions(+), 44 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 3dd98343..be13324e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -10,14 +10,15 @@ Remember that PRs should be made against the dev branch, unless you're preparing Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) --> + ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! - - [ ] If you've added a new tool - add to the software_versions process and a regex to `scrape_software_versions.py` - - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) - - [ ] If necessary, also make a PR on the nf-core/cutandrun _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. + - [ ] If you've added a new tool - add to the software_versions process and a regex to `scrape_software_versions.py` + - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) + - [ ] If necessary, also make a PR on the nf-core/cutandrun _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. - [ ] Make sure your code lints (`nf-core lint .`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - [ ] Usage Documentation in `docs/usage.md` is updated. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 604add2e..0bf5d983 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,9 @@ on: release: types: [published] +# Uncomment if we need an edge release of Nextflow again +# env: NXF_EDGE: 1 + jobs: test: name: Run workflow tests @@ -20,7 +23,7 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['20.04.0', '21.03.0-edge'] + nxf_ver: ['20.04.0', ''] steps: - name: Check out pipeline code uses: actions/checkout@v2 diff --git a/Dockerfile b/Dockerfile index e119b872..55560f06 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM nfcore/base:1.13.3 +FROM nfcore/base:1.14 LABEL authors="Chris Cheshire and Charlotte West" \ description="Docker image containing all software requirements for the nf-core/cutandrun pipeline" diff --git a/README.md b/README.md index 38e33897..0f35e826 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool ## Quick Start -1. Install [`nextflow`](https://nf-co.re/usage/installation) +1. Install [`nextflow`](https://nf-co.re/usage/installation) (`>=20.04.0`) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/), [`Podman`](https://podman.io/), [`Shifter`](https://nersc.gitlab.io/development/shifter/how-to-use/) or [`Charliecloud`](https://hpc.github.io/charliecloud/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 54935ec8..52ee7304 100644 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -112,8 +112,14 @@ class NfcoreSchema { } // unexpected params def params_ignore = params.schema_ignore_params.split(',') + 'schema_ignore_params' - if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam)) { - unexpectedParams.push(specifiedParam) + def expectedParamsLowerCase = expectedParams.collect{ it.replace("-", "").toLowerCase() } + def specifiedParamLowerCase = specifiedParam.replace("-", "").toLowerCase() + if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam) && !expectedParamsLowerCase.contains(specifiedParamLowerCase)) { + // Temporarily remove camelCase/camel-case params #1035 + def unexpectedParamsLowerCase = unexpectedParams.collect{ it.replace("-", "").toLowerCase()} + if (!unexpectedParamsLowerCase.contains(specifiedParamLowerCase)){ + unexpectedParams.push(specifiedParam) + } } } @@ -191,11 +197,11 @@ class NfcoreSchema { // Remove an element from a JSONArray private static JSONArray removeElement(jsonArray, element){ - def list = [] + def list = [] int len = jsonArray.length() - for (int i=0;i hnames.each { hname -> if (hostname.contains(hname) && !workflow.profile.contains(prof)) { - log.error '====================================================\n' + + log.error "${c_red}====================================================${c_reset}\n" + " ${c_red}WARNING!${c_reset} You are running with `-profile $workflow.profile`\n" + " but your machine hostname is ${c_white}'$hostname'${c_reset}\n" + " ${c_yellow_bold}It's highly recommended that you use `-profile $prof${c_reset}`\n" + - '============================================================' + "${c_red}====================================================${c_reset}\n" } } } diff --git a/nextflow.config b/nextflow.config index 35701974..fc8b0e2e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,12 +25,13 @@ params { plaintext_email = false monochrome_logs = false help = false - igenomes_base = 's3://ngi-igenomes/igenomes/' + igenomes_base = 's3://ngi-igenomes/igenomes' tracedir = "${params.outdir}/pipeline_info" igenomes_ignore = false 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 = false config_profile_contact = false config_profile_url = false @@ -65,7 +66,7 @@ profiles { singularity.enabled = false podman.enabled = false shifter.enabled = false - charliecloud = false + charliecloud.enabled = false process.conda = "$projectDir/environment.yml" } debug { process.beforeScript = 'echo $HOSTNAME' } @@ -94,7 +95,7 @@ profiles { docker.enabled = false podman.enabled = true shifter.enabled = false - charliecloud = false + charliecloud.enabled = false } shifter { singularity.enabled = false @@ -129,21 +130,22 @@ env { // 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.tracedir}/execution_timeline.html" + file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" } report { enabled = true - file = "${params.tracedir}/execution_report.html" + file = "${params.tracedir}/execution_report_${trace_timestamp}.html" } trace { enabled = true - file = "${params.tracedir}/execution_trace.txt" + file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" } dag { enabled = true - file = "${params.tracedir}/pipeline_dag.svg" + file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.svg" } manifest { diff --git a/nextflow_schema.json b/nextflow_schema.json index 39edf48a..5129d4d5 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -62,7 +62,7 @@ "igenomes_base": { "type": "string", "description": "Directory / URL base for iGenomes references.", - "default": "s3://ngi-igenomes/igenomes/", + "default": "s3://ngi-igenomes/igenomes", "fa_icon": "fas fa-cloud-download-alt", "hidden": true }, @@ -183,7 +183,7 @@ "description": "Maximum amount of memory that can be requested for any single job.", "default": "128.GB", "fa_icon": "fas fa-memory", - "pattern": "^[\\d\\.]+\\s*.(K|M|G|T)?B$", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", "hidden": true, "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, @@ -192,7 +192,7 @@ "description": "Maximum amount of time that can be requested for any single job.", "default": "240.h", "fa_icon": "far fa-clock", - "pattern": "^[\\d\\.]+\\.*(s|m|h|d)$", + "pattern": "^(\\d+\\.?\\s*(s|m|h|day)\\s*)+$", "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } From edc07972ed4e1ad1cf115b50b35a97ba7b80ca4a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 11 May 2021 12:25:39 +0100 Subject: [PATCH 144/675] fragments in peaks plot fixed --- bin/python/reporting/lib/figures.py | 72 ++++++++++++++--------------- 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index fe8f6f83..e2a9ccfe 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -162,15 +162,23 @@ def pe_bam_to_df(bam_path): # Iterate through reads. read1 = None read2 = None - # print("hello") - # time.sleep(3) k=0 #counter + # get number of reads in bam + count = 0 + for _ in bamfile: + count += 1 + + bamfile.close() + bamfile = pysam.AlignmentFile(bam_path, "rb") + + # initialise arrays + frag_no = round(count/2) + start_arr = np.zeros(frag_no, dtype=np.int64) + end_arr = np.zeros(frag_no, dtype=np.int64) + chrom_arr = np.empty(frag_no, dtype=" Date: Tue, 11 May 2021 13:51:43 +0100 Subject: [PATCH 145/675] ignore test data and outputs --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 250763f6..abd96609 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,7 @@ dev/docker/static_reports/test_output/frag_hist.png dev/docker/static_reports/test_output/frag_violin.csv dev/docker/static_reports/test_output/frag_violin.png + +dev/docker/static_reports/test_data/tmp_dir/* + +dev/docker/static_reports/test_output/* From 81975ee7ad2de405131a490f646878a426afeb5e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 11 May 2021 14:06:19 +0100 Subject: [PATCH 146/675] change from samtools sort workflow to just samtools sort process as bai is not needed --- cutandrun.nf | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/cutandrun.nf b/cutandrun.nf index a4ff8c0f..a9b2ba34 100644 --- a/cutandrun.nf +++ b/cutandrun.nf @@ -189,7 +189,7 @@ include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from './modu include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from './modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_peaks'] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from './modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from './modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) - +include { SAMTOOLS_SORT } from './modules/nf-core/software/samtools/sort/main.nf' addParams( options: modules['samtools_sort'] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -197,7 +197,7 @@ include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from './modules include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) include { MARK_DUPLICATES_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) -include { BAM_SORT_SAMTOOLS } from './modules/nf-core/subworkflow/bam_sort_samtools' addParams( samtools_sort_options: modules['samtools_sort'] ) + //////////////////////////////////////////////////// /* -- RUN MAIN WORKFLOW -- */ @@ -598,14 +598,13 @@ workflow CUTANDRUN { ) //SAMTOOLS_CUSTOMVIEW.out.txt | view - // Filter bam bai channels for non-igg only - ch_samtools_bam_bai - .filter { it[0].group != 'igg' } - .set { ch_no_igg_bam_bai } + // // Filter bam bai channels for non-igg only + // ch_samtools_bam_bai + // .filter { it[0].group != 'igg' } + // .set { ch_no_igg_bam_bai } // Sort bams by mate pairs - BAM_SORT_SAMTOOLS ( ch_samtools_bam ) - + SAMTOOLS_SORT ( ch_samtools_bam ) GENERATE_REPORTS( @@ -613,7 +612,7 @@ workflow CUTANDRUN { SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, AWK_FRAG_BIN.out.file.collect{it[1]}, SEACR_CALLPEAK.out.bed.collect{it[1]}, - ch_no_igg_bam_bai.collect{it[1,2]} + SAMTOOLS_SORT.out.bam.collect{it[1]} ) } } From 659ee04dffd6c9f9f306d64c8c97b6b8e6b9f8e9 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 11 May 2021 14:07:22 +0100 Subject: [PATCH 147/675] add sorted suffix --- conf/modules.config | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index b150f61c..c1338b0a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -225,7 +225,9 @@ params { } 'samtools_sort' { - args = "-n" + args = "-n" + publish_dir = "bam_query_sorted" + suffix = ".sorted" } } } From d68b3969d078424a549718f32a95519ffd16f526 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 11 May 2021 14:38:26 +0100 Subject: [PATCH 148/675] restructured with cutandrun.nf in workflows folder - working --- main.nf | 41 +++++++++++++++-- cutandrun.nf => workflows/cutandrun.nf | 64 +++++++++++++------------- 2 files changed, 68 insertions(+), 37 deletions(-) rename cutandrun.nf => workflows/cutandrun.nf (82%) diff --git a/main.nf b/main.nf index 64b619b6..c360950d 100644 --- a/main.nf +++ b/main.nf @@ -58,12 +58,43 @@ Checks.hostname(workflow, params, log) // Check genome key exists if provided Checks.genome_exists(params, log) -workflow { + +/* +======================================================================================== + NAMED WORKFLOW FOR PIPELINE +======================================================================================== +*/ + +workflow NFCORE_CUTANDRUN { /* - * SUBWORKFLOW: Run main nf-core/cutandrun analysis pipeline (also valid for cutandtag analysis) - */ - include { CUTANDRUN } from './cutandrun' addParams( summary_params: summary_params ) - CUTANDRUN () + * WORKFLOW: Get SRA run information for public database ids, download and md5sum check FastQ files, auto-create samplesheet + */ + if (params.public_data_ids) { + include { SRA_DOWNLOAD } from './workflows/sra_download' + SRA_DOWNLOAD () + + /* + * WORKFLOW: Run main nf-core/cutandrun analysis pipeline + */ + } else { + include { CUTANDRUN } from './workflows/cutandrun' addParams( summary_params: summary_params ) + CUTANDRUN () + } +} + + +/* +======================================================================================== + RUN ALL WORKFLOWS +======================================================================================== +*/ + +/* + * WORKFLOW: Execute a single named workflow for the pipeline + * See: https://github.com/nf-core/rnaseq/issues/619 + */ +workflow { + NFCORE_CUTANDRUN () } //////////////////////////////////////////////////// diff --git a/cutandrun.nf b/workflows/cutandrun.nf similarity index 82% rename from cutandrun.nf rename to workflows/cutandrun.nf index a9b2ba34..36fc5b5c 100644 --- a/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -140,41 +140,41 @@ def awk_dt_frag_options = modules['awk_dt_frag'] /* * MODULES */ -include { INPUT_CHECK } from './modules/local/subworkflow/input_check' addParams( options: [:] ) -include { CAT_FASTQ } from './modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from './modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) -include { SEACR_CALLPEAK } from './modules/local/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) -include { UCSC_BEDCLIP } from './modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) -include { IGV_SESSION } from './modules/local/process/igv_session' addParams( options: modules['igv'] ) -include { GET_SOFTWARE_VERSIONS } from './modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) -include { MULTIQC } from './modules/local/process/multiqc' addParams( options: multiqc_options ) -include { EXPORT_META } from './modules/local/process/export_meta' addParams( options: modules['export_meta'] ) -include { GENERATE_REPORTS } from './modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) -include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from './modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) -include { AWK as AWK_FRAG_BIN } from './modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) -include { AWK as AWK_EDIT_PEAK_BED } from './modules/local/process/awk' addParams( options: modules['awk_edit_peak_bed'] ) -include { DESEQ2_DIFF } from './modules/local/process/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) -include { SAMTOOLS_CUSTOMVIEW } from './modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) +include { INPUT_CHECK } from '../modules/local/subworkflow/input_check' addParams( options: [:] ) +include { CAT_FASTQ } from '../modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) +include { SEACR_CALLPEAK } from '../modules/local/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) +include { UCSC_BEDCLIP } from '../modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) +include { IGV_SESSION } from '../modules/local/process/igv_session' addParams( options: modules['igv'] ) +include { GET_SOFTWARE_VERSIONS } from '../modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { MULTIQC } from '../modules/local/process/multiqc' addParams( options: multiqc_options ) +include { EXPORT_META } from '../modules/local/process/export_meta' addParams( options: modules['export_meta'] ) +include { GENERATE_REPORTS } from '../modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) +include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) +include { AWK as AWK_FRAG_BIN } from '../modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) +include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/process/awk' addParams( options: modules['awk_edit_peak_bed'] ) +include { DESEQ2_DIFF } from '../modules/local/process/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) +include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from './modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, +include { PREPARE_GENOME } from '../modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options, spikein_fasta: spikein_fasta ) -include { ALIGN_BOWTIE2 } from './modules/local/subworkflow/align_bowtie2' addParams( align_options: bowtie2_align_options, +include { ALIGN_BOWTIE2 } from '../modules/local/subworkflow/align_bowtie2' addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from './modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) -include { CALCULATE_FRAGMENTS } from './modules/local/subworkflow/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], samtools_view_options: modules['calc_frag_samtools_view'], bamtobed_options: modules['calc_frag_bamtobed'], awk_options: modules['calc_frag_awk'], cut_options: modules['calc_frag_cut']) +include { SAMTOOLS_VIEW_SORT_STATS } from '../modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) +include { CALCULATE_FRAGMENTS } from '../modules/local/subworkflow/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], samtools_view_options: modules['calc_frag_samtools_view'], bamtobed_options: modules['calc_frag_bamtobed'], awk_options: modules['calc_frag_awk'], cut_options: modules['calc_frag_cut']) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) -include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from './modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) +include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) //////////////////////////////////////////////////// @@ -184,19 +184,19 @@ include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from './modules/local/sub /* * MODULES */ -include { UCSC_BEDGRAPHTOBIGWIG } from './modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: modules['ucsc_bedgraphtobigwig'] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from './modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_gene'] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from './modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_peaks'] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from './modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from './modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) -include { SAMTOOLS_SORT } from './modules/nf-core/software/samtools/sort/main.nf' addParams( options: modules['samtools_sort'] ) +include { UCSC_BEDGRAPHTOBIGWIG } from '../modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: modules['ucsc_bedgraphtobigwig'] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_gene'] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_peaks'] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) +include { SAMTOOLS_SORT } from '../modules/nf-core/software/samtools/sort/main.nf' addParams( options: modules['samtools_sort'] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { FASTQC_TRIMGALORE } from './modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) -include { MARK_DUPLICATES_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from './modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) +include { FASTQC_TRIMGALORE } from '../modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) +include { MARK_DUPLICATES_PICARD } from '../modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) //////////////////////////////////////////////////// From 7e15168737f47fbaade0d590262a84e10b8b309b Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 11 May 2021 14:41:38 +0100 Subject: [PATCH 149/675] edit header to same as rnaseq --- main.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/main.nf b/main.nf index c360950d..fb180c23 100644 --- a/main.nf +++ b/main.nf @@ -1,11 +1,11 @@ #!/usr/bin/env nextflow /* ======================================================================================== - nf-core/cutandrun + nf-core/cutandrun ======================================================================================== - nf-core/cutandrun Analysis Pipeline. - #### Homepage / Documentation - https://github.com/nf-core/cutandrun + Github : https://github.com/nf-core/cutandrun + Website: https://nf-co.re/cutandrun + Slack : https://nfcore.slack.com/channels/cutandrun ---------------------------------------------------------------------------------------- */ From 5b3054a7cd2cde8ea002cce19c5aca695f66e923 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 11 May 2021 17:11:21 +0100 Subject: [PATCH 150/675] added sra workflow and associated processes. Set up config for testing but still needs testing --- conf/modules.config | 22 ++++- conf/test_sra.config | 22 +++++ main.nf | 8 +- modules/local/functions.nf | 70 +++++++++++++++ modules/local/sra_fastq_ftp.nf | 54 +++++++++++ modules/local/sra_ids_to_runinfo.nf | 34 +++++++ modules/local/sra_merge_samplesheet.nf | 34 +++++++ modules/local/sra_runinfo_to_ftp.nf | 31 +++++++ modules/local/sra_to_samplesheet.nf | 47 ++++++++++ nextflow.config | 3 + workflows/sra_download.nf | 118 +++++++++++++++++++++++++ 11 files changed, 439 insertions(+), 4 deletions(-) create mode 100644 conf/test_sra.config create mode 100644 modules/local/functions.nf create mode 100644 modules/local/sra_fastq_ftp.nf create mode 100644 modules/local/sra_ids_to_runinfo.nf create mode 100644 modules/local/sra_merge_samplesheet.nf create mode 100644 modules/local/sra_runinfo_to_ftp.nf create mode 100644 modules/local/sra_to_samplesheet.nf create mode 100644 workflows/sra_download.nf diff --git a/conf/modules.config b/conf/modules.config index c1338b0a..92372cba 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -18,6 +18,26 @@ params { modules { + 'sra_ids_to_runinfo' { + publish_dir = 'public_data' + publish_files = ['tsv':'runinfo'] + } + 'sra_runinfo_to_ftp' { + publish_dir = 'public_data' + publish_files = ['tsv':'runinfo'] + } + 'sra_fastq_ftp' { + publish_dir = 'public_data' + publish_files = ['fastq.gz':'', 'md5':'md5'] + args = '-C - --max-time 1200' + } + 'sra_to_samplesheet' { + publish_dir = 'public_data' + publish_files = false + } + 'sra_merge_samplesheet' { + publish_dir = 'public_data' + } 'bowtie2_index' { publish_dir = "genome/index" } @@ -228,6 +248,6 @@ params { args = "-n" publish_dir = "bam_query_sorted" suffix = ".sorted" - } + } } } diff --git a/conf/test_sra.config b/conf/test_sra.config new file mode 100644 index 00000000..840cfa7c --- /dev/null +++ b/conf/test_sra.config @@ -0,0 +1,22 @@ +/* + * ------------------------------------------------- + * Nextflow config file for running tests + * ------------------------------------------------- + * Defines bundled input files and everything required + * to run a fast and simple test. Use as follows: + * nextflow run nf-core/cutandrun -profile test_sra, + */ + +params { + config_profile_name = 'Public data download test profile' + config_profile_description = 'Minimal test dataset to check pipeline function when downloading data via the ENA' + + // Limit resources so that this can run CI + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h + + // Input data + public_data_ids = 'https://raw.githubusercontent.com/nf-core/test-datasets/rnaseq/samplesheet/public_database_ids.txt' + +} \ No newline at end of file diff --git a/main.nf b/main.nf index fb180c23..62c58f93 100644 --- a/main.nf +++ b/main.nf @@ -97,6 +97,8 @@ workflow { NFCORE_CUTANDRUN () } -//////////////////////////////////////////////////// -/* -- THE END -- */ -//////////////////////////////////////////////////// +/* +======================================================================================== + THE END +======================================================================================== +*/ diff --git a/modules/local/functions.nf b/modules/local/functions.nf new file mode 100644 index 00000000..9d0137e3 --- /dev/null +++ b/modules/local/functions.nf @@ -0,0 +1,70 @@ +/* + * ----------------------------------------------------- + * Utility functions used in nf-core DSL2 module files + * ----------------------------------------------------- + */ + +/* + * Extract name of software tool from process name using $task.process + */ +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +/* + * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules + */ +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +/* + * Tidy up and join elements of a list to return a path string + */ +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +/* + * Function to save/publish module results + */ +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/sra_fastq_ftp.nf b/modules/local/sra_fastq_ftp.nf new file mode 100644 index 00000000..55bc6bfc --- /dev/null +++ b/modules/local/sra_fastq_ftp.nf @@ -0,0 +1,54 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + + +/* + * Download SRA data via FTP + */ +process SRA_FASTQ_FTP { + tag "$meta.id" + label 'process_medium' + label 'error_retry' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), val(fastq) + + output: + tuple val(meta), path("*fastq.gz"), emit: fastq + tuple val(meta), path("*md5") , emit: md5 + + script: + if (meta.single_end) { + """ + bash -c 'until curl $options.args -L ${fastq[0]} -o ${meta.id}.fastq.gz; do sleep 1; done'; + + echo "${meta.md5_1} ${meta.id}.fastq.gz" > ${meta.id}.fastq.gz.md5 + md5sum -c ${meta.id}.fastq.gz.md5 + """ + } else { + """ + bash -c 'until curl $options.args -L ${fastq[0]} -o ${meta.id}_1.fastq.gz; do sleep 1; done'; + + echo "${meta.md5_1} ${meta.id}_1.fastq.gz" > ${meta.id}_1.fastq.gz.md5 + md5sum -c ${meta.id}_1.fastq.gz.md5 + + bash -c 'until curl $options.args -L ${fastq[1]} -o ${meta.id}_2.fastq.gz; do sleep 1; done'; + + echo "${meta.md5_2} ${meta.id}_2.fastq.gz" > ${meta.id}_2.fastq.gz.md5 + md5sum -c ${meta.id}_2.fastq.gz.md5 + """ + } +} diff --git a/modules/local/sra_ids_to_runinfo.nf b/modules/local/sra_ids_to_runinfo.nf new file mode 100644 index 00000000..80d266ee --- /dev/null +++ b/modules/local/sra_ids_to_runinfo.nf @@ -0,0 +1,34 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +/* + * Fetch SRA / ENA / GEO run information via the ENA API + */ +process SRA_IDS_TO_RUNINFO { + tag "$id" + label 'error_retry' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::requests=2.24.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/requests:2.24.0" + } else { + container "quay.io/biocontainers/requests:2.24.0" + } + + input: + val id + + output: + path "*.tsv", emit: tsv + + script: + """ + echo $id > id.txt + sra_ids_to_runinfo.py id.txt ${id}.runinfo.tsv + """ +} diff --git a/modules/local/sra_merge_samplesheet.nf b/modules/local/sra_merge_samplesheet.nf new file mode 100644 index 00000000..c2fcaf46 --- /dev/null +++ b/modules/local/sra_merge_samplesheet.nf @@ -0,0 +1,34 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +/* + * Merge samplesheets across all samples + */ +process SRA_MERGE_SAMPLESHEET { + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + path ('samplesheets/*') + + output: + path "*csv", emit: csv + + script: + """ + head -n 1 `ls ./samplesheets/* | head -n 1` > samplesheet.csv + for fileid in `ls ./samplesheets/*`; do + awk 'NR>1' \$fileid >> samplesheet.csv + done + """ +} \ No newline at end of file diff --git a/modules/local/sra_runinfo_to_ftp.nf b/modules/local/sra_runinfo_to_ftp.nf new file mode 100644 index 00000000..423bd1a7 --- /dev/null +++ b/modules/local/sra_runinfo_to_ftp.nf @@ -0,0 +1,31 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] + +/* + * Create samplesheet for pipeline from SRA run information fetched via the ENA API + */ +process SRA_RUNINFO_TO_FTP { + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + path runinfo + + output: + path "*.tsv", emit: tsv + + script: + """ + sra_runinfo_to_ftp.py ${runinfo.join(',')} ${runinfo.toString().tokenize(".")[0]}.runinfo_ftp.tsv + """ +} diff --git a/modules/local/sra_to_samplesheet.nf b/modules/local/sra_to_samplesheet.nf new file mode 100644 index 00000000..7502ef54 --- /dev/null +++ b/modules/local/sra_to_samplesheet.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { saveFiles; getSoftwareName } from './functions' + +params.options = [:] +params.results_dir = '' + +/* + * Stage FastQ files downloaded by SRA and auto-create a samplesheet for the pipeline + */ +process SRA_TO_SAMPLESHEET { + tag "$meta.id" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + memory 100.MB + + input: + tuple val(meta), path(fastq) + + output: + tuple val(meta), path("*csv"), emit: csv + + exec: + // Remove custom keys needed to download the data + def meta_map = meta.clone() + meta_map.remove("id") + meta_map.remove("fastq_1") + meta_map.remove("fastq_2") + meta_map.remove("md5_1") + meta_map.remove("md5_2") + meta_map.remove("single_end") + + // Add required fields for the pipeline to the beginning of the map + pipeline_map = [ + sample : "${meta.id.split('_')[0..-2].join('_')}", + fastq_1 : "${params.outdir}/${params.results_dir}/${fastq[0]}", + fastq_2 : meta.single_end ? '' : "${params.outdir}/${params.results_dir}/${fastq[1]}", + strandedness: 'unstranded' + ] + pipeline_map << meta_map + + // Write to file + def file = task.workDir.resolve("${meta.id}.samplesheet.csv") + file.write pipeline_map.keySet().collect{ '"' + it + '"'}.join(",") + '\n' + file.append(pipeline_map.values().collect{ '"' + it + '"'}.join(",")) + '\n' +} diff --git a/nextflow.config b/nextflow.config index ea02d9b1..cbeef69c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -11,6 +11,8 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = '' + public_data_ids = null + skip_sra_fastq_download = false // References genome = '' @@ -129,6 +131,7 @@ profiles { } local { includeConfig 'conf/local.config' } test { includeConfig 'conf/test.config' } + test_sra { includeConfig 'conf/test_sra.config' } test_full { includeConfig 'conf/test_full.config' } test_hg38_chr7 { includeConfig 'conf/test_hg38_chr7.config' } } diff --git a/workflows/sra_download.nf b/workflows/sra_download.nf new file mode 100644 index 00000000..28d8afd2 --- /dev/null +++ b/workflows/sra_download.nf @@ -0,0 +1,118 @@ +/* +======================================================================================== + VALIDATE INPUTS +======================================================================================== +*/ + +if (params.public_data_ids) { + Channel + .from(file(params.public_data_ids, checkIfExists: true)) + .splitCsv(header:false, sep:'', strip:true) + .map { it[0] } + .unique() + .set { ch_public_data_ids } +} else { + exit 1, 'Input file with public database ids not specified!' +} + +/* +======================================================================================== + IMPORT LOCAL MODULES/SUBWORKFLOWS +======================================================================================== +*/ + +// Don't overwrite global params.modules, create a copy instead and use that within the main script. +def modules = params.modules.clone() + +include { SRA_IDS_TO_RUNINFO } from '../modules/local/sra_ids_to_runinfo' addParams( options: modules['sra_ids_to_runinfo'] ) +include { SRA_RUNINFO_TO_FTP } from '../modules/local/sra_runinfo_to_ftp' addParams( options: modules['sra_runinfo_to_ftp'] ) +include { SRA_FASTQ_FTP } from '../modules/local/sra_fastq_ftp' addParams( options: modules['sra_fastq_ftp'] ) +include { SRA_TO_SAMPLESHEET } from '../modules/local/sra_to_samplesheet' addParams( options: modules['sra_to_samplesheet'], results_dir: modules['sra_fastq_ftp'].publish_dir ) +include { SRA_MERGE_SAMPLESHEET } from '../modules/local/sra_merge_samplesheet' addParams( options: modules['sra_merge_samplesheet'] ) + +/* +======================================================================================== + RUN MAIN WORKFLOW +======================================================================================== +*/ + +workflow SRA_DOWNLOAD { + + /* + * MODULE: Get SRA run information for public database ids + */ + SRA_IDS_TO_RUNINFO ( + ch_public_data_ids + ) + + /* + * MODULE: Parse SRA run information, create file containing FTP links and read into workflow as [ meta, [reads] ] + */ + SRA_RUNINFO_TO_FTP ( + SRA_IDS_TO_RUNINFO.out.tsv + ) + + SRA_RUNINFO_TO_FTP + .out + .tsv + .splitCsv(header:true, sep:'\t') + .map { + meta -> + meta.single_end = meta.single_end.toBoolean() + [ meta, [ meta.fastq_1, meta.fastq_2 ] ] + } + .unique() + .set { ch_sra_reads } + + if (!params.skip_sra_fastq_download) { + /* + * MODULE: If FTP link is provided in run information then download FastQ directly via FTP and validate with md5sums + */ + SRA_FASTQ_FTP ( + ch_sra_reads.map { meta, reads -> if (meta.fastq_1) [ meta, reads ] } + ) + + /* + * MODULE: Stage FastQ files downloaded by SRA together and auto-create a samplesheet for the pipeline + */ + SRA_TO_SAMPLESHEET ( + SRA_FASTQ_FTP.out.fastq + ) + + /* + * MODULE: Create a merged samplesheet across all samples for the pipeline + */ + SRA_MERGE_SAMPLESHEET ( + SRA_TO_SAMPLESHEET.out.csv.collect{it[1]} + ) + + /* + * If ids don't have a direct FTP download link write them to file for download outside of the pipeline + */ + def no_ids_file = ["${params.outdir}", "${modules['sra_fastq_ftp'].publish_dir}", "IDS_NOT_DOWNLOADED.txt" ].join(File.separator) + ch_sra_reads + .map { meta, reads -> if (!meta.fastq_1) "${meta.id.split('_')[0..-2].join('_')}" } + .unique() + .collectFile(name: no_ids_file, sort: true, newLine: true) + + } +} + +/* +======================================================================================== + COMPLETION EMAIL AND SUMMARY +======================================================================================== +*/ + +workflow.onComplete { + def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) + NfcoreTemplate.email(workflow, params, summary_params, projectDir, log) + NfcoreTemplate.summary(workflow, params, log) + WorkflowSraDownload.sraDownloadWarn(log) +} + +/* +======================================================================================== + THE END +======================================================================================== +*/ From 1948465fa827ad2aeb253e4e177ed36b8aa2c9ee Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 12 May 2021 11:35:31 +0100 Subject: [PATCH 151/675] adding software versions --- workflows/cutandrun.nf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 36fc5b5c..78a59c7b 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -442,6 +442,7 @@ workflow CUTANDRUN { ch_seacr_bed.collect{it[1]}, ch_samtools_bam.collect{it[1]} ) + ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.first().ifEmpty(null)) /* * MODULE: Clip off-chromosome peaks @@ -526,6 +527,8 @@ workflow CUTANDRUN { SEACR_CALLPEAK.out.bed ) + ch_software_versions = ch_software_versions.mix(AWK_EDIT_PEAK_BED.out.version.first().ifEmpty(null)) + // order bigwig and bed channels such that they match on id ch_bigwig_no_igg .map { row -> [row[0].id, row ].flatten()} @@ -553,6 +556,8 @@ workflow CUTANDRUN { ch_ordered_seacr_max ) + ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.version.first().ifEmpty(null)) + DEEPTOOLS_PLOTHEATMAP_PEAKS ( DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix ) From b779b51979cb87f249c41fcfaf83d86072261e77 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 12 May 2021 11:53:39 +0100 Subject: [PATCH 152/675] comment out print statements --- bin/python/reporting/lib/figures.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index e2a9ccfe..285f7b11 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -338,14 +338,14 @@ def array_permutate(x): sample_id = group_i + "_" + rep_i pyr_bam_dict = {sample_id : pyr_bam} frag_count_pyr = pyr_bam.count_overlaps(pyr_seacr) # pr.count_overlaps(pyr_bam_dict, pyr_seacr) - print(frag_count_pyr) + # print(frag_count_pyr) # frag_counts = frag_count_pyr.NumberOverlaps.sum() frag_counts = np.count_nonzero(frag_count_pyr.NumberOverlaps) self.frip.at[i,'frags_in_peaks'] = frag_counts self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 - print(self.frip) + # print(self.frip) def annotate_data(self): # Make new perctenage alignment columns From 5f73e62048845fd44759453377c74f3357bd9f3e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 12 May 2021 12:20:02 +0100 Subject: [PATCH 153/675] added python version from generate reports --- modules/local/process/generate_reports.nf | 3 +++ workflows/cutandrun.nf | 2 ++ 2 files changed, 5 insertions(+) diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index 1bb8e942..146d96b7 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -24,6 +24,7 @@ process GENERATE_REPORTS { path '*.pdf', emit: pdf path '*.csv', emit: csv path '*.png', emit: png + path '*.version.txt', emit: version script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ @@ -35,6 +36,8 @@ process GENERATE_REPORTS { --bams "*.bam" \\ --output . \\ --log log.txt + + python --version | grep -E -o "([0-9]{1,}\.)+[0-9]{1,}" > python.version.txt """ } \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 78a59c7b..cb7406a6 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -619,6 +619,8 @@ workflow CUTANDRUN { SEACR_CALLPEAK.out.bed.collect{it[1]}, SAMTOOLS_SORT.out.bam.collect{it[1]} ) + + ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.first().ifEmpty(null)) } } From 9e05f3b7427c4b2fb79d78be2e99d7bdf1894ded Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 12 May 2021 12:40:45 +0100 Subject: [PATCH 154/675] bamread no longer needed in python reporting --- dev/docker/static_reports/environment.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/docker/static_reports/environment.yml b/dev/docker/static_reports/environment.yml index d8005977..9e8558ec 100644 --- a/dev/docker/static_reports/environment.yml +++ b/dev/docker/static_reports/environment.yml @@ -14,5 +14,4 @@ dependencies: - seaborn=0.11.* - plotly:plotly_express=0.4.* - pyranges=0.0.96 - - bamread=0.0.7 - pysam=0.16.0.1 \ No newline at end of file From 3fb103398c9e0559de27fe2b40908e72b038c0f2 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 12 May 2021 13:57:52 +0100 Subject: [PATCH 155/675] all processes now have resource label --- modules/local/process/awk.nf | 1 + modules/local/process/awk_script.nf | 1 + modules/local/process/cat_fastq.nf | 1 + modules/local/process/cut.nf | 1 + modules/local/process/export_meta.nf | 1 + modules/local/process/generate_reports.nf | 1 + modules/local/process/get_chrom_sizes.nf | 1 + modules/local/process/get_software_versions.nf | 1 + modules/local/process/gunzip.nf | 1 + modules/local/process/igv_session.nf | 1 + modules/local/process/process_file.nf | 1 + modules/local/process/samplesheet_check.nf | 1 + modules/local/process/untar.nf | 1 + modules/local/software/samtools/view/main.nf | 1 + 14 files changed, 14 insertions(+) diff --git a/modules/local/process/awk.nf b/modules/local/process/awk.nf index 5949b3be..789d21d7 100644 --- a/modules/local/process/awk.nf +++ b/modules/local/process/awk.nf @@ -8,6 +8,7 @@ options.ext = params.options.ext ?: '' process AWK { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/process/awk_script.nf b/modules/local/process/awk_script.nf index 4bbba947..4dbff4d1 100644 --- a/modules/local/process/awk_script.nf +++ b/modules/local/process/awk_script.nf @@ -5,6 +5,7 @@ def options = initOptions(params.options) process AWK_SCRIPT { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/process/cat_fastq.nf b/modules/local/process/cat_fastq.nf index 070ebfb0..b2a035a6 100644 --- a/modules/local/process/cat_fastq.nf +++ b/modules/local/process/cat_fastq.nf @@ -9,6 +9,7 @@ def options = initOptions(params.options) */ process CAT_FASTQ { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', publish_id:meta.id) } diff --git a/modules/local/process/cut.nf b/modules/local/process/cut.nf index 8b559bf1..2aca98da 100644 --- a/modules/local/process/cut.nf +++ b/modules/local/process/cut.nf @@ -7,6 +7,7 @@ options.ext = params.options.ext ?: '' process CUT { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/process/export_meta.nf b/modules/local/process/export_meta.nf index 1c426bba..f93104d8 100644 --- a/modules/local/process/export_meta.nf +++ b/modules/local/process/export_meta.nf @@ -4,6 +4,7 @@ params.options = [:] def options = initOptions(params.options) process EXPORT_META { + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index 146d96b7..22c52dea 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -4,6 +4,7 @@ params.options = [:] def options = initOptions(params.options) process GENERATE_REPORTS { + label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/process/get_chrom_sizes.nf b/modules/local/process/get_chrom_sizes.nf index 1dbca7f7..6e9b5171 100644 --- a/modules/local/process/get_chrom_sizes.nf +++ b/modules/local/process/get_chrom_sizes.nf @@ -8,6 +8,7 @@ params.options = [:] */ process GET_CHROM_SIZES { tag "$fasta" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:"genome", publish_id:'') } diff --git a/modules/local/process/get_software_versions.nf b/modules/local/process/get_software_versions.nf index 73b00279..3ba3c2fa 100644 --- a/modules/local/process/get_software_versions.nf +++ b/modules/local/process/get_software_versions.nf @@ -7,6 +7,7 @@ params.options = [:] * Parse software version numbers */ process GET_SOFTWARE_VERSIONS { + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } diff --git a/modules/local/process/gunzip.nf b/modules/local/process/gunzip.nf index c0f40436..59cc1f38 100644 --- a/modules/local/process/gunzip.nf +++ b/modules/local/process/gunzip.nf @@ -6,6 +6,7 @@ def options = initOptions(params.options) process GUNZIP { tag "$archive" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/process/igv_session.nf b/modules/local/process/igv_session.nf index 1340b5aa..962f61c5 100644 --- a/modules/local/process/igv_session.nf +++ b/modules/local/process/igv_session.nf @@ -7,6 +7,7 @@ colour_pallete = ['38,70,83', '231,111,81', '42,157,143', '244,162,97', '233,196 process IGV_SESSION { tag "igv" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } diff --git a/modules/local/process/process_file.nf b/modules/local/process/process_file.nf index 5b9de5e2..f13f048a 100644 --- a/modules/local/process/process_file.nf +++ b/modules/local/process/process_file.nf @@ -5,6 +5,7 @@ def options = initOptions(params.options) process PROCESS_FILE { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/process/samplesheet_check.nf b/modules/local/process/samplesheet_check.nf index 6fc5d05b..90dda45f 100644 --- a/modules/local/process/samplesheet_check.nf +++ b/modules/local/process/samplesheet_check.nf @@ -8,6 +8,7 @@ params.options = [:] */ process SAMPLESHEET_CHECK { tag "$samplesheet" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } diff --git a/modules/local/process/untar.nf b/modules/local/process/untar.nf index 291c132d..bb953287 100644 --- a/modules/local/process/untar.nf +++ b/modules/local/process/untar.nf @@ -5,6 +5,7 @@ def options = initOptions(params.options) process UNTAR { tag "$archive" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } diff --git a/modules/local/software/samtools/view/main.nf b/modules/local/software/samtools/view/main.nf index 22f718eb..d5ff6f9d 100644 --- a/modules/local/software/samtools/view/main.nf +++ b/modules/local/software/samtools/view/main.nf @@ -6,6 +6,7 @@ def options = initOptions(params.options) process SAMTOOLS_VIEW { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } From 6024f54550d7fe4e394c51d6382903d06004654b Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 12 May 2021 14:16:24 +0100 Subject: [PATCH 156/675] fix typo - now regions of zero scores not included in deeptools heatmaps --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 92372cba..d315ff18 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -219,7 +219,7 @@ params { } 'dt_compute_mat_gene' { - args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZero" + args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZeros" publish_dir = "deeptools/heatmaps/gene" } 'dt_compute_mat_peaks' { From 5c6931406fc0bc1e645fed43a7c8b4b6cc722113 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Wed, 12 May 2021 14:28:28 +0100 Subject: [PATCH 157/675] try fix with character escaping --- modules/local/process/generate_reports.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/process/generate_reports.nf b/modules/local/process/generate_reports.nf index 22c52dea..5eec33aa 100644 --- a/modules/local/process/generate_reports.nf +++ b/modules/local/process/generate_reports.nf @@ -38,7 +38,7 @@ process GENERATE_REPORTS { --output . \\ --log log.txt - python --version | grep -E -o "([0-9]{1,}\.)+[0-9]{1,}" > python.version.txt + python --version | grep -E -o \"([0-9]{1,}\\.)+[0-9]{1,}\" > python.version.txt """ } \ No newline at end of file From 2495081ce49192d841f093d72a5f99c88c670772 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 13 May 2021 10:42:44 +0100 Subject: [PATCH 158/675] changing folder structure to match rnaseq and changing paths to make compatible --- modules/local/{process => }/awk.nf | 0 modules/local/{process => }/awk_script.nf | 0 .../local/{process => }/bedtools_bamtobed.nf | 0 .../{process => }/bedtools_genomecov_scale.nf | 0 modules/local/{process => }/cat_fastq.nf | 0 modules/local/{process => }/cut.nf | 0 modules/local/{process => }/deseq2_diff.nf | 0 modules/local/{process => }/export_meta.nf | 0 modules/local/functions.nf | 33 +++------ .../local/{process => }/generate_reports.nf | 0 .../local/{process => }/get_chrom_sizes.nf | 0 .../{process => }/get_software_versions.nf | 0 modules/local/{process => }/gunzip.nf | 0 modules/local/{process => }/igv_session.nf | 0 modules/local/{process => }/multiqc.nf | 0 modules/local/process/functions.nf | 59 --------------- .../local/{process => }/samplesheet_check.nf | 0 modules/local/{process => }/ucsc_bedclip.nf | 0 modules/local/{process => }/untar.nf | 0 .../software/bedtools/bamtobed/functions.nf | 68 ++++++++++++++++++ .../software/bedtools/bamtobed/main.nf | 40 +++++++++++ .../software/bedtools/bamtobed/meta.yml | 37 ++++++++++ .../software/bowtie2/align/functions.nf | 68 ++++++++++++++++++ .../nf-core/software/bowtie2/align/main.nf | 72 +++++++++++++++++++ .../nf-core/software/bowtie2/align/meta.yml | 50 +++++++++++++ .../software/bowtie2/build/functions.nf | 68 ++++++++++++++++++ .../nf-core/software/bowtie2/build/main.nf | 35 +++++++++ .../nf-core/software/bowtie2/build/meta.yml | 32 +++++++++ .../nf-core/software/cat/fastq/functions.nf | 68 ++++++++++++++++++ modules/nf-core/software/cat/fastq/main.nf | 47 ++++++++++++ modules/nf-core/software/cat/fastq/meta.yml | 33 +++++++++ modules/nf-core/software/gunzip/functions.nf | 68 ++++++++++++++++++ .../software/gunzip/main.nf} | 28 ++++---- modules/nf-core/software/gunzip/meta.yml | 27 +++++++ .../software/samtools/view/functions.nf | 68 ++++++++++++++++++ .../nf-core/software/samtools/view/main.nf | 35 +++++++++ .../nf-core/software/samtools/view/meta.yml | 43 +++++++++++ .../software/seacr/callpeak/functions.nf | 68 ++++++++++++++++++ .../nf-core/software/seacr/callpeak/main.nf | 42 +++++++++++ .../nf-core/software/seacr/callpeak/meta.yml | 48 +++++++++++++ .../software/ucsc/bedclip/functions.nf | 68 ++++++++++++++++++ modules/nf-core/software/ucsc/bedclip/main.nf | 42 +++++++++++ .../nf-core/software/ucsc/bedclip/meta.yml | 41 +++++++++++ modules/nf-core/software/untar/functions.nf | 68 ++++++++++++++++++ modules/nf-core/software/untar/main.nf | 35 +++++++++ modules/nf-core/software/untar/meta.yml | 27 +++++++ nextflow.config | 1 + .../local}/align_bowtie2.nf | 8 +-- .../local}/annotate_meta_awk.nf | 4 +- .../local}/calculate_fragments.nf | 6 +- .../local}/input_check.nf | 2 +- .../local}/prepare_genome.nf | 26 +++---- .../local}/samtools_view_sort_stats.nf | 6 +- .../nf-core}/bam_sort_samtools.nf | 4 +- .../nf-core}/bam_stats_samtools.nf | 6 +- .../nf-core}/fastqc_trimgalore.nf | 4 +- .../nf-core}/mark_duplicates_picard.nf | 4 +- workflows/cutandrun.nf | 26 +++---- 58 files changed, 1374 insertions(+), 141 deletions(-) rename modules/local/{process => }/awk.nf (100%) rename modules/local/{process => }/awk_script.nf (100%) rename modules/local/{process => }/bedtools_bamtobed.nf (100%) rename modules/local/{process => }/bedtools_genomecov_scale.nf (100%) rename modules/local/{process => }/cat_fastq.nf (100%) rename modules/local/{process => }/cut.nf (100%) rename modules/local/{process => }/deseq2_diff.nf (100%) rename modules/local/{process => }/export_meta.nf (100%) rename modules/local/{process => }/generate_reports.nf (100%) rename modules/local/{process => }/get_chrom_sizes.nf (100%) rename modules/local/{process => }/get_software_versions.nf (100%) rename modules/local/{process => }/gunzip.nf (100%) rename modules/local/{process => }/igv_session.nf (100%) rename modules/local/{process => }/multiqc.nf (100%) delete mode 100644 modules/local/process/functions.nf rename modules/local/{process => }/samplesheet_check.nf (100%) rename modules/local/{process => }/ucsc_bedclip.nf (100%) rename modules/local/{process => }/untar.nf (100%) create mode 100644 modules/nf-core/software/bedtools/bamtobed/functions.nf create mode 100644 modules/nf-core/software/bedtools/bamtobed/main.nf create mode 100644 modules/nf-core/software/bedtools/bamtobed/meta.yml create mode 100644 modules/nf-core/software/bowtie2/align/functions.nf create mode 100644 modules/nf-core/software/bowtie2/align/main.nf create mode 100644 modules/nf-core/software/bowtie2/align/meta.yml create mode 100644 modules/nf-core/software/bowtie2/build/functions.nf create mode 100644 modules/nf-core/software/bowtie2/build/main.nf create mode 100644 modules/nf-core/software/bowtie2/build/meta.yml create mode 100644 modules/nf-core/software/cat/fastq/functions.nf create mode 100644 modules/nf-core/software/cat/fastq/main.nf create mode 100644 modules/nf-core/software/cat/fastq/meta.yml create mode 100644 modules/nf-core/software/gunzip/functions.nf rename modules/{local/process/process_file.nf => nf-core/software/gunzip/main.nf} (50%) create mode 100644 modules/nf-core/software/gunzip/meta.yml create mode 100644 modules/nf-core/software/samtools/view/functions.nf create mode 100644 modules/nf-core/software/samtools/view/main.nf create mode 100644 modules/nf-core/software/samtools/view/meta.yml create mode 100644 modules/nf-core/software/seacr/callpeak/functions.nf create mode 100644 modules/nf-core/software/seacr/callpeak/main.nf create mode 100644 modules/nf-core/software/seacr/callpeak/meta.yml create mode 100644 modules/nf-core/software/ucsc/bedclip/functions.nf create mode 100644 modules/nf-core/software/ucsc/bedclip/main.nf create mode 100644 modules/nf-core/software/ucsc/bedclip/meta.yml create mode 100644 modules/nf-core/software/untar/functions.nf create mode 100644 modules/nf-core/software/untar/main.nf create mode 100644 modules/nf-core/software/untar/meta.yml rename {modules/local/subworkflow => subworkflows/local}/align_bowtie2.nf (85%) rename {modules/local/subworkflow => subworkflows/local}/annotate_meta_awk.nf (89%) rename {modules/local/subworkflow => subworkflows/local}/calculate_fragments.nf (94%) rename {modules/local/subworkflow => subworkflows/local}/input_check.nf (79%) rename {modules/local/subworkflow => subworkflows/local}/prepare_genome.nf (60%) rename {modules/local/subworkflow => subworkflows/local}/samtools_view_sort_stats.nf (72%) rename {modules/nf-core/subworkflow => subworkflows/nf-core}/bam_sort_samtools.nf (79%) rename {modules/nf-core/subworkflow => subworkflows/nf-core}/bam_stats_samtools.nf (62%) rename {modules/nf-core/subworkflow => subworkflows/nf-core}/fastqc_trimgalore.nf (85%) rename {modules/nf-core/subworkflow => subworkflows/nf-core}/mark_duplicates_picard.nf (87%) diff --git a/modules/local/process/awk.nf b/modules/local/awk.nf similarity index 100% rename from modules/local/process/awk.nf rename to modules/local/awk.nf diff --git a/modules/local/process/awk_script.nf b/modules/local/awk_script.nf similarity index 100% rename from modules/local/process/awk_script.nf rename to modules/local/awk_script.nf diff --git a/modules/local/process/bedtools_bamtobed.nf b/modules/local/bedtools_bamtobed.nf similarity index 100% rename from modules/local/process/bedtools_bamtobed.nf rename to modules/local/bedtools_bamtobed.nf diff --git a/modules/local/process/bedtools_genomecov_scale.nf b/modules/local/bedtools_genomecov_scale.nf similarity index 100% rename from modules/local/process/bedtools_genomecov_scale.nf rename to modules/local/bedtools_genomecov_scale.nf diff --git a/modules/local/process/cat_fastq.nf b/modules/local/cat_fastq.nf similarity index 100% rename from modules/local/process/cat_fastq.nf rename to modules/local/cat_fastq.nf diff --git a/modules/local/process/cut.nf b/modules/local/cut.nf similarity index 100% rename from modules/local/process/cut.nf rename to modules/local/cut.nf diff --git a/modules/local/process/deseq2_diff.nf b/modules/local/deseq2_diff.nf similarity index 100% rename from modules/local/process/deseq2_diff.nf rename to modules/local/deseq2_diff.nf diff --git a/modules/local/process/export_meta.nf b/modules/local/export_meta.nf similarity index 100% rename from modules/local/process/export_meta.nf rename to modules/local/export_meta.nf diff --git a/modules/local/functions.nf b/modules/local/functions.nf index 9d0137e3..d25eea86 100644 --- a/modules/local/functions.nf +++ b/modules/local/functions.nf @@ -16,13 +16,12 @@ def getSoftwareName(task_process) { */ def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.args3 = args.args3 ?: '' - options.publish_by_meta = args.publish_by_meta ?: [] - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.publish_by_id = args.publish_by_id ?: false + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } @@ -30,8 +29,8 @@ def initOptions(Map args) { * Tidy up and join elements of a list to return a path string */ def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } @@ -40,20 +39,10 @@ def getPathFromList(path_list) { */ def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) - } - } + if (ioptions.publish_by_id) { + path_list.add(args.publish_id) } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/local/process/generate_reports.nf b/modules/local/generate_reports.nf similarity index 100% rename from modules/local/process/generate_reports.nf rename to modules/local/generate_reports.nf diff --git a/modules/local/process/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf similarity index 100% rename from modules/local/process/get_chrom_sizes.nf rename to modules/local/get_chrom_sizes.nf diff --git a/modules/local/process/get_software_versions.nf b/modules/local/get_software_versions.nf similarity index 100% rename from modules/local/process/get_software_versions.nf rename to modules/local/get_software_versions.nf diff --git a/modules/local/process/gunzip.nf b/modules/local/gunzip.nf similarity index 100% rename from modules/local/process/gunzip.nf rename to modules/local/gunzip.nf diff --git a/modules/local/process/igv_session.nf b/modules/local/igv_session.nf similarity index 100% rename from modules/local/process/igv_session.nf rename to modules/local/igv_session.nf diff --git a/modules/local/process/multiqc.nf b/modules/local/multiqc.nf similarity index 100% rename from modules/local/process/multiqc.nf rename to modules/local/multiqc.nf diff --git a/modules/local/process/functions.nf b/modules/local/process/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/local/process/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/local/process/samplesheet_check.nf b/modules/local/samplesheet_check.nf similarity index 100% rename from modules/local/process/samplesheet_check.nf rename to modules/local/samplesheet_check.nf diff --git a/modules/local/process/ucsc_bedclip.nf b/modules/local/ucsc_bedclip.nf similarity index 100% rename from modules/local/process/ucsc_bedclip.nf rename to modules/local/ucsc_bedclip.nf diff --git a/modules/local/process/untar.nf b/modules/local/untar.nf similarity index 100% rename from modules/local/process/untar.nf rename to modules/local/untar.nf diff --git a/modules/nf-core/software/bedtools/bamtobed/functions.nf b/modules/nf-core/software/bedtools/bamtobed/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/bedtools/bamtobed/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/bedtools/bamtobed/main.nf b/modules/nf-core/software/bedtools/bamtobed/main.nf new file mode 100644 index 00000000..22f5713c --- /dev/null +++ b/modules/nf-core/software/bedtools/bamtobed/main.nf @@ -0,0 +1,40 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BEDTOOLS_BAMTOBED { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedtools \\ + bamtobed \\ + $options.args \\ + -i $bam \\ + | bedtools sort > ${prefix}.bed + + bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/bedtools/bamtobed/meta.yml b/modules/nf-core/software/bedtools/bamtobed/meta.yml new file mode 100644 index 00000000..3594d2d4 --- /dev/null +++ b/modules/nf-core/software/bedtools/bamtobed/meta.yml @@ -0,0 +1,37 @@ +name: bedtools_bamtobed +description: Converts a bam file to a bed12 file. +keywords: + - bam + - bed +tools: + - bedtools: + description: | + A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. + documentation: https://bedtools.readthedocs.io/en/latest/content/tools/complement.html +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: Input BAM file + pattern: "*.{bam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: Bed file containing genomic intervals. + pattern: "*.{bed}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@yuukiiwa" + - "@drpatelh" diff --git a/modules/nf-core/software/bowtie2/align/functions.nf b/modules/nf-core/software/bowtie2/align/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/bowtie2/align/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/bowtie2/align/main.nf b/modules/nf-core/software/bowtie2/align/main.nf new file mode 100644 index 00000000..1ac8e973 --- /dev/null +++ b/modules/nf-core/software/bowtie2/align/main.nf @@ -0,0 +1,72 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BOWTIE2_ALIGN { + tag "$meta.id" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2 bioconda::samtools=1.11 conda-forge::pigz=2.3.4' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-ac74a7f02cebcfcc07d8e8d1d750af9c83b4d45a:577a697be67b5ae9b16f637fd723b8263a3898b3-0" + } else { + container "quay.io/biocontainers/mulled-v2-ac74a7f02cebcfcc07d8e8d1d750af9c83b4d45a:577a697be67b5ae9b16f637fd723b8263a3898b3-0" + } + + input: + tuple val(meta), path(reads) + path index + + output: + tuple val(meta), path('*.bam'), emit: bam + tuple val(meta), path('*.log'), emit: log + path '*.version.txt' , emit: version + tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + if (meta.single_end) { + def unaligned = params.save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' + """ + INDEX=`find -L ./ -name "*.rev.1.bt2" | sed 's/.rev.1.bt2//'` + bowtie2 \\ + -x \$INDEX \\ + -U $reads \\ + --threads $task.cpus \\ + $unaligned \\ + $options.args \\ + 2> ${prefix}.bowtie2.log \\ + | samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - + + echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt + """ + } else { + def unaligned = params.save_unaligned ? "--un-conc-gz ${prefix}.unmapped.fastq.gz" : '' + """ + INDEX=`find -L ./ -name "*.rev.1.bt2" | sed 's/.rev.1.bt2//'` + bowtie2 \\ + -x \$INDEX \\ + -1 ${reads[0]} \\ + -2 ${reads[1]} \\ + --threads $task.cpus \\ + $unaligned \\ + $options.args \\ + 2> ${prefix}.bowtie2.log \\ + | samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - + + if [ -f ${prefix}.unmapped.fastq.1.gz ]; then + mv ${prefix}.unmapped.fastq.1.gz ${prefix}.unmapped_1.fastq.gz + fi + if [ -f ${prefix}.unmapped.fastq.2.gz ]; then + mv ${prefix}.unmapped.fastq.2.gz ${prefix}.unmapped_2.fastq.gz + fi + echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt + """ + } +} diff --git a/modules/nf-core/software/bowtie2/align/meta.yml b/modules/nf-core/software/bowtie2/align/meta.yml new file mode 100644 index 00000000..9d9cd004 --- /dev/null +++ b/modules/nf-core/software/bowtie2/align/meta.yml @@ -0,0 +1,50 @@ +name: bowtie2_align +description: Align reads to a reference genome using bowtie2 +keywords: + - align + - fasta + - genome + - reference +tools: + - bowtie2: + description: | + Bowtie 2 is an ultrafast and memory-efficient tool for aligning + sequencing reads to long reference sequences. + homepage: http://bowtie-bio.sourceforge.net/bowtie2/index.shtml + documentation: http://bowtie-bio.sourceforge.net/bowtie2/manual.shtml + doi: 10.1038/nmeth.1923 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. + - index: + type: file + description: Bowtie2 genome index files + pattern: "*.ebwt" +output: + - bam: + type: file + description: Output BAM file containing read alignments + pattern: "*.{bam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - fastq: + type: file + description: Unaligned FastQ files + pattern: "*.fastq.gz" + - log: + type: file + description: Aligment log + pattern: "*.log" +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/software/bowtie2/build/functions.nf b/modules/nf-core/software/bowtie2/build/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/bowtie2/build/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/bowtie2/build/main.nf b/modules/nf-core/software/bowtie2/build/main.nf new file mode 100644 index 00000000..42ff1d20 --- /dev/null +++ b/modules/nf-core/software/bowtie2/build/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BOWTIE2_BUILD { + tag "$fasta" + label 'process_high' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2' : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container 'https://depot.galaxyproject.org/singularity/bowtie2:2.4.2--py38h1c8e9b9_1' + } else { + container 'quay.io/biocontainers/bowtie2:2.4.2--py38h1c8e9b9_1' + } + + input: + path fasta + + output: + path 'bowtie2' , emit: index + path '*.version.txt', emit: version + + script: + def software = getSoftwareName(task.process) + """ + mkdir bowtie2 + bowtie2-build $options.args --threads $task.cpus $fasta bowtie2/${fasta.baseName} + echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/bowtie2/build/meta.yml b/modules/nf-core/software/bowtie2/build/meta.yml new file mode 100644 index 00000000..0a4cd3de --- /dev/null +++ b/modules/nf-core/software/bowtie2/build/meta.yml @@ -0,0 +1,32 @@ +name: bowtie2_build +description: Builds bowtie index for reference genome +keywords: + - build + - index + - fasta + - genome + - reference +tools: + - bowtie2: + description: | + Bowtie 2 is an ultrafast and memory-efficient tool for aligning + sequencing reads to long reference sequences. + homepage: http://bowtie-bio.sourceforge.net/bowtie2/index.shtml + documentation: http://bowtie-bio.sourceforge.net/bowtie2/manual.shtml + doi: 10.1038/nmeth.1923 +input: + - fasta: + type: file + description: Input genome fasta file +output: + - index: + type: file + description: Bowtie2 genome index files + pattern: "*.bt2" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/software/cat/fastq/functions.nf b/modules/nf-core/software/cat/fastq/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/cat/fastq/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/cat/fastq/main.nf b/modules/nf-core/software/cat/fastq/main.nf new file mode 100644 index 00000000..55ccca90 --- /dev/null +++ b/modules/nf-core/software/cat/fastq/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process CAT_FASTQ { + tag "$meta.id" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.merged.fastq.gz"), emit: reads + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def readList = reads.collect{ it.toString() } + if (meta.single_end) { + if (readList.size > 1) { + """ + cat ${readList.sort().join(' ')} > ${prefix}.merged.fastq.gz + """ + } + } else { + if (readList.size > 2) { + def read1 = [] + def read2 = [] + readList.eachWithIndex{ v, ix -> ( ix & 1 ? read2 : read1 ) << v } + """ + cat ${read1.sort().join(' ')} > ${prefix}_1.merged.fastq.gz + cat ${read2.sort().join(' ')} > ${prefix}_2.merged.fastq.gz + """ + } + } +} diff --git a/modules/nf-core/software/cat/fastq/meta.yml b/modules/nf-core/software/cat/fastq/meta.yml new file mode 100644 index 00000000..e7b8eebe --- /dev/null +++ b/modules/nf-core/software/cat/fastq/meta.yml @@ -0,0 +1,33 @@ +name: cat_fastq +description: Concatenates fastq files +keywords: + - fastq + - concatenate +tools: + - cat: + description: | + The cat utility reads files sequentially, writing them to the standard output. + documentation: https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: list + description: | + List of input FastQ files to be concatenated. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: Merged fastq file + pattern: "*.{merged.fastq.gz}" +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/software/gunzip/functions.nf b/modules/nf-core/software/gunzip/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/gunzip/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/process/process_file.nf b/modules/nf-core/software/gunzip/main.nf similarity index 50% rename from modules/local/process/process_file.nf rename to modules/nf-core/software/gunzip/main.nf index f13f048a..29248796 100644 --- a/modules/local/process/process_file.nf +++ b/modules/nf-core/software/gunzip/main.nf @@ -1,16 +1,17 @@ +// Import generic module functions include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) -process PROCESS_FILE { - tag "$meta.id" +process GUNZIP { + tag "$archive" label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } - conda (params.enable_conda ? null : null) + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { @@ -18,14 +19,17 @@ process PROCESS_FILE { } input: - tuple val(meta), path(input) - + path archive + output: - tuple val(meta), path("*.output.txt"), emit: file - + path "$gunzip", emit: gunzip + path "*.version.txt", emit: version + script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def software = getSoftwareName(task.process) + gunzip = archive.toString() - '.gz' """ - $options.command > ${prefix}.output.txt + gunzip -f $options.args $archive + echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//' > ${software}.version.txt """ -} \ No newline at end of file +} diff --git a/modules/nf-core/software/gunzip/meta.yml b/modules/nf-core/software/gunzip/meta.yml new file mode 100644 index 00000000..922e74e6 --- /dev/null +++ b/modules/nf-core/software/gunzip/meta.yml @@ -0,0 +1,27 @@ +name: gunzip +description: Compresses and decompresses files. +keywords: + - gunzip + - compression +tools: + - gunzip: + description: | + gzip is a file format and a software application used for file compression and decompression. + documentation: https://www.gnu.org/software/gzip/manual/gzip.html +input: + - archive: + type: file + description: File to be compressed/uncompressed + pattern: "*.*" +output: + - gunzip: + type: file + description: Compressed/uncompressed file + pattern: "*.*" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/modules/nf-core/software/samtools/view/functions.nf b/modules/nf-core/software/samtools/view/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/samtools/view/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/samtools/view/main.nf b/modules/nf-core/software/samtools/view/main.nf new file mode 100644 index 00000000..d428e447 --- /dev/null +++ b/modules/nf-core/software/samtools/view/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process SAMTOOLS_VIEW { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + } else { + container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + } + + input: + tuple val(meta), path(bam) + + output: + tuple val(meta), path("*.bam"), emit: bam + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + samtools view $options.args $bam > ${prefix}.bam + echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/samtools/view/meta.yml b/modules/nf-core/software/samtools/view/meta.yml new file mode 100644 index 00000000..c35a8b03 --- /dev/null +++ b/modules/nf-core/software/samtools/view/meta.yml @@ -0,0 +1,43 @@ +name: samtools_view +description: filter/convert SAM/BAM/CRAM file +keywords: + - view + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: hhttp://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: filtered/converted BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@joseespinosa" diff --git a/modules/nf-core/software/seacr/callpeak/functions.nf b/modules/nf-core/software/seacr/callpeak/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/seacr/callpeak/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/seacr/callpeak/main.nf b/modules/nf-core/software/seacr/callpeak/main.nf new file mode 100644 index 00000000..429c45cf --- /dev/null +++ b/modules/nf-core/software/seacr/callpeak/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +def VERSION = '1.3' + +process SEACR_CALLPEAK { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.29.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0" + } else { + container 'quay.io/biocontainers/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0' + } + + input: + tuple val(meta), path(bedgraph), path(ctrlbedgraph) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + SEACR_1.3.sh \\ + $bedgraph \\ + $ctrlbedgraph \\ + $options.args \\ + $prefix + + echo $VERSION > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/seacr/callpeak/meta.yml b/modules/nf-core/software/seacr/callpeak/meta.yml new file mode 100644 index 00000000..579961e2 --- /dev/null +++ b/modules/nf-core/software/seacr/callpeak/meta.yml @@ -0,0 +1,48 @@ +name: seacr_callpeak +description: Call peaks using SEACR on sequenced reads in bedgraph format +keywords: + - peak-caller + - peaks + - bedgraph + - cut&tag + - cut&run + - chromatin + - seacr +tools: + - seacr: + description: | + SEACR is intended to call peaks and enriched regions from sparse CUT&RUN + or chromatin profiling data in which background is dominated by "zeroes" + (i.e. regions with no read coverage). + homepage: https://github.com/FredHutch/SEACR + documentation: https://github.com/FredHutch/SEACR +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bedgraph: + type: file + description: | + The target bedgraph file from which the peaks will be calculated. + - ctrlbedgraph: + type: file + description: | + Control (IgG) data bedgraph file to generate an empirical threshold for peak calling. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: Bed file containing the calculated peaks. + pattern: "*.bed" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@chris-cheshire" diff --git a/modules/nf-core/software/ucsc/bedclip/functions.nf b/modules/nf-core/software/ucsc/bedclip/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/ucsc/bedclip/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/ucsc/bedclip/main.nf b/modules/nf-core/software/ucsc/bedclip/main.nf new file mode 100644 index 00000000..d1a47554 --- /dev/null +++ b/modules/nf-core/software/ucsc/bedclip/main.nf @@ -0,0 +1,42 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +def VERSION = '377' + +process UCSC_BEDCLIP { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::ucsc-bedclip=377" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/ucsc-bedclip:377--h0b8a92a_2" + } else { + container "quay.io/biocontainers/ucsc-bedclip:377--h0b8a92a_2" + } + + input: + tuple val(meta), path(bedgraph) + path sizes + + output: + tuple val(meta), path("*.bedGraph"), emit: bedgraph + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedClip \\ + $bedgraph \\ + $sizes \\ + ${prefix}.bedGraph + + echo $VERSION > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/ucsc/bedclip/meta.yml b/modules/nf-core/software/ucsc/bedclip/meta.yml new file mode 100644 index 00000000..f20b4617 --- /dev/null +++ b/modules/nf-core/software/ucsc/bedclip/meta.yml @@ -0,0 +1,41 @@ +name: ucsc_bedclip +description: See http://hgdownload.cse.ucsc.edu/admin/exe/ +keywords: + - sort +tools: + - ucsc: + description: Remove lines from bed file that refer to off-chromosome locations. + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ['varies; see http://genome.ucsc.edu/license'] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedgraph}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedgraph}" + +authors: + - "@drpatelh" diff --git a/modules/nf-core/software/untar/functions.nf b/modules/nf-core/software/untar/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/software/untar/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/untar/main.nf b/modules/nf-core/software/untar/main.nf new file mode 100644 index 00000000..fc6d7ec5 --- /dev/null +++ b/modules/nf-core/software/untar/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process UNTAR { + tag "$archive" + label 'process_low' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" + } else { + container "biocontainers/biocontainers:v1.2.0_cv1" + } + + input: + path archive + + output: + path "$untar" , emit: untar + path "*.version.txt", emit: version + + script: + def software = getSoftwareName(task.process) + untar = archive.toString() - '.tar.gz' + """ + tar -xzvf $options.args $archive + echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//' > ${software}.version.txt + """ +} diff --git a/modules/nf-core/software/untar/meta.yml b/modules/nf-core/software/untar/meta.yml new file mode 100644 index 00000000..af4674f0 --- /dev/null +++ b/modules/nf-core/software/untar/meta.yml @@ -0,0 +1,27 @@ +name: untar +description: Extract files. +keywords: + - untar + - uncompress +tools: + - untar: + description: | + Extract tar.gz files. + documentation: https://www.gnu.org/software/tar/manual/ +input: + - archive: + type: file + description: File to be untar + pattern: "*.{tar}.{gz}" +output: + - untar: + type: file + description: + pattern: "*.*" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@joseespinosa" + - "@drpatelh" diff --git a/nextflow.config b/nextflow.config index cbeef69c..e3069d30 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,6 +13,7 @@ params { input = '' public_data_ids = null skip_sra_fastq_download = false + no_igg = null // References genome = '' diff --git a/modules/local/subworkflow/align_bowtie2.nf b/subworkflows/local/align_bowtie2.nf similarity index 85% rename from modules/local/subworkflow/align_bowtie2.nf rename to subworkflows/local/align_bowtie2.nf index eb5abcdf..40c497fc 100644 --- a/modules/local/subworkflow/align_bowtie2.nf +++ b/subworkflows/local/align_bowtie2.nf @@ -7,10 +7,10 @@ params.spikein_align_options = [:] params.samtools_options = [:] params.samtools_spikein_options = [:] -include { BOWTIE2_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) -include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) -include { BAM_SORT_SAMTOOLS } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_options ) -include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) +include { BOWTIE2_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) +include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) +include { BAM_SORT_SAMTOOLS } from '../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_options ) +include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) workflow ALIGN_BOWTIE2 { take: diff --git a/modules/local/subworkflow/annotate_meta_awk.nf b/subworkflows/local/annotate_meta_awk.nf similarity index 89% rename from modules/local/subworkflow/annotate_meta_awk.nf rename to subworkflows/local/annotate_meta_awk.nf index 5c92f97c..cedd29eb 100644 --- a/modules/local/subworkflow/annotate_meta_awk.nf +++ b/subworkflows/local/annotate_meta_awk.nf @@ -10,8 +10,8 @@ params.meta_suffix = '' params.meta_prefix = '' params.script_mode = false -include { AWK_SCRIPT } from '../process/awk_script' addParams( options: params.options ) -include { AWK } from '../process/awk' addParams( options: params.options ) +include { AWK_SCRIPT } from '../../modules/local/awk_script' addParams( options: params.options ) +include { AWK } from '../../modules/local/awk' addParams( options: params.options ) workflow ANNOTATE_META_AWK { take: passthrough diff --git a/modules/local/subworkflow/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf similarity index 94% rename from modules/local/subworkflow/calculate_fragments.nf rename to subworkflows/local/calculate_fragments.nf index 8f2c05e6..2d518be0 100644 --- a/modules/local/subworkflow/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -9,9 +9,9 @@ params.awk_options = [:] params.cut_options = [:] include { SAMTOOLS_VIEW_SORT_STATS } from './samtools_view_sort_stats' addParams( samtools_options: params.samtools_options , samtools_view_options: params.samtools_view_options) -include { BEDTOOLS_BAMTOBED } from '../process/bedtools_bamtobed' addParams( options: params.bamtobed_options) -include { AWK } from '../process/awk' addParams( options: params.awk_options) -include { CUT } from '../process/cut' addParams( options: params.cut_options) +include { BEDTOOLS_BAMTOBED } from '../../modules/nf-core/software/bedtools/bamtobed/main' addParams( options: params.bamtobed_options) +include { AWK } from '../../modules/local/awk' addParams( options: params.awk_options) +include { CUT } from '../../modules/local/cut' addParams( options: params.cut_options) workflow CALCULATE_FRAGMENTS { take: diff --git a/modules/local/subworkflow/input_check.nf b/subworkflows/local/input_check.nf similarity index 79% rename from modules/local/subworkflow/input_check.nf rename to subworkflows/local/input_check.nf index cb6a902d..bd7ddbea 100644 --- a/modules/local/subworkflow/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -6,7 +6,7 @@ params.options = [:] include { SAMPLESHEET_CHECK; - get_samplesheet_paths } from '../process/samplesheet_check' addParams( options: params.options ) + get_samplesheet_paths } from '../../modules/local/samplesheet_check' addParams( options: params.options ) workflow INPUT_CHECK { take: diff --git a/modules/local/subworkflow/prepare_genome.nf b/subworkflows/local/prepare_genome.nf similarity index 60% rename from modules/local/subworkflow/prepare_genome.nf rename to subworkflows/local/prepare_genome.nf index 30173042..788b44ce 100644 --- a/modules/local/subworkflow/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -7,15 +7,15 @@ params.spikein_genome_options = [:] params.bt2_index_options = [:] params.bt2_spikein_index_options = [:] -include { GUNZIP as GUNZIP_FASTA } from '../process/gunzip' addParams( options: params.genome_options ) -include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../process/gunzip' addParams( options: params.spikein_genome_options ) -include { GUNZIP as GUNZIP_GTF } from '../process/gunzip' addParams( options: params.spikein_genome_options ) -include { GET_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.genome_options ) -include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../process/get_chrom_sizes' addParams( options: params.spikein_genome_options ) -include { UNTAR as UNTAR_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_index_options ) -include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from '../process/untar' addParams( options: params.bt2_spikein_index_options ) -include { BOWTIE2_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_index_options ) -include { BOWTIE2_INDEX as BOWTIE2_SPIKEIN_INDEX } from '../software/bowtie2/index/main' addParams( options: params.bt2_spikein_index_options ) +include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) +include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) +include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.genome_options ) +include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.spikein_genome_options ) +include { UNTAR as UNTAR_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_index_options ) +include { UNTAR as UNTAR_SPIKEIN_BT2_BUILD } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_spikein_index_options ) +include { BOWTIE2_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_index_options ) +include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from '../../modules/nf-core/software/bowtie2/build' addParams( options: params.bt2_spikein_index_options ) workflow PREPARE_GENOME { take: @@ -74,18 +74,18 @@ workflow PREPARE_GENOME { ch_bt2_index = file(params.bowtie2_index) } } else { - ch_bt2_index = BOWTIE2_INDEX ( ch_fasta ).index - ch_bt2_version = BOWTIE2_INDEX.out.version + ch_bt2_index = BOWTIE2_BUILD ( ch_fasta ).index + ch_bt2_version = BOWTIE2_BUILD.out.version } if (params.spikein_bowtie2_index) { if (params.spikein_bowtie2_index.endsWith('.tar.gz')) { - ch_bt2_index = UNTAR_SPIKEIN_BT2_INDEX ( params.spikein_bowtie2_index ).untar + ch_bt2_index = UNTAR_SPIKEIN_BT2_BUILD ( params.spikein_bowtie2_index ).untar } else { ch_bt2_index = file(params.spikein_bowtie2_index) } } else { - ch_bt2_spikein_index = BOWTIE2_SPIKEIN_INDEX ( ch_spikein_fasta ).index + ch_bt2_spikein_index = BOWTIE2_SPIKEIN_BUILD ( ch_spikein_fasta ).index } } diff --git a/modules/local/subworkflow/samtools_view_sort_stats.nf b/subworkflows/local/samtools_view_sort_stats.nf similarity index 72% rename from modules/local/subworkflow/samtools_view_sort_stats.nf rename to subworkflows/local/samtools_view_sort_stats.nf index 3214f3cc..9a3e49eb 100644 --- a/modules/local/subworkflow/samtools_view_sort_stats.nf +++ b/subworkflows/local/samtools_view_sort_stats.nf @@ -5,9 +5,9 @@ params.samtools_view_options = [:] params.samtools_options = [:] -include { SAMTOOLS_VIEW } from '../software/samtools/view/main' addParams( options: params.samtools_view_options ) -include { SAMTOOLS_INDEX } from '../../nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) -include { BAM_STATS_SAMTOOLS } from '../../nf-core/subworkflow/bam_stats_samtools' addParams( options: params.samtools_options ) +include { SAMTOOLS_VIEW } from '../../modules/nf-core/software/samtools/view/main' addParams( options: params.samtools_view_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from '../nf-core/bam_stats_samtools' addParams( options: params.samtools_options ) workflow SAMTOOLS_VIEW_SORT_STATS { take: diff --git a/modules/nf-core/subworkflow/bam_sort_samtools.nf b/subworkflows/nf-core/bam_sort_samtools.nf similarity index 79% rename from modules/nf-core/subworkflow/bam_sort_samtools.nf rename to subworkflows/nf-core/bam_sort_samtools.nf index 9841a562..775641c1 100644 --- a/modules/nf-core/subworkflow/bam_sort_samtools.nf +++ b/subworkflows/nf-core/bam_sort_samtools.nf @@ -5,8 +5,8 @@ params.options = [:] params.samtools_sort_options = [:] -include { SAMTOOLS_SORT } from '../software/samtools/sort/main' addParams( options: params.samtools_sort_options ) -include { SAMTOOLS_INDEX } from '../software/samtools/index/main' addParams( options: params.options ) +include { SAMTOOLS_SORT } from '../../modules/nf-core/software/samtools/sort/main' addParams( options: params.samtools_sort_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.options ) include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) workflow BAM_SORT_SAMTOOLS { diff --git a/modules/nf-core/subworkflow/bam_stats_samtools.nf b/subworkflows/nf-core/bam_stats_samtools.nf similarity index 62% rename from modules/nf-core/subworkflow/bam_stats_samtools.nf rename to subworkflows/nf-core/bam_stats_samtools.nf index fa7607cb..492b38c7 100644 --- a/modules/nf-core/subworkflow/bam_stats_samtools.nf +++ b/subworkflows/nf-core/bam_stats_samtools.nf @@ -4,9 +4,9 @@ params.options = [:] -include { SAMTOOLS_STATS } from '../software/samtools/stats/main' addParams( options: params.options ) -include { SAMTOOLS_IDXSTATS } from '../software/samtools/idxstats/main' addParams( options: params.options ) -include { SAMTOOLS_FLAGSTAT } from '../software/samtools/flagstat/main' addParams( options: params.options ) +include { SAMTOOLS_STATS } from '../../modules/nf-core/software/samtools/stats/main' addParams( options: params.options ) +include { SAMTOOLS_IDXSTATS } from '../../modules/nf-core/software/samtools/idxstats/main' addParams( options: params.options ) +include { SAMTOOLS_FLAGSTAT } from '../../modules/nf-core/software/samtools/flagstat/main' addParams( options: params.options ) workflow BAM_STATS_SAMTOOLS { take: diff --git a/modules/nf-core/subworkflow/fastqc_trimgalore.nf b/subworkflows/nf-core/fastqc_trimgalore.nf similarity index 85% rename from modules/nf-core/subworkflow/fastqc_trimgalore.nf rename to subworkflows/nf-core/fastqc_trimgalore.nf index 1804f73c..9c896468 100644 --- a/modules/nf-core/subworkflow/fastqc_trimgalore.nf +++ b/subworkflows/nf-core/fastqc_trimgalore.nf @@ -5,8 +5,8 @@ params.fastqc_options = [:] params.trimgalore_options = [:] -include { FASTQC } from '../software/fastqc/main' addParams( options: params.fastqc_options ) -include { TRIMGALORE } from '../software/trimgalore/main' addParams( options: params.trimgalore_options ) +include { FASTQC } from '../../modules/nf-core/software/fastqc/main' addParams( options: params.fastqc_options ) +include { TRIMGALORE } from '../../modules/nf-core/software/trimgalore/main' addParams( options: params.trimgalore_options ) workflow FASTQC_TRIMGALORE { take: diff --git a/modules/nf-core/subworkflow/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf similarity index 87% rename from modules/nf-core/subworkflow/mark_duplicates_picard.nf rename to subworkflows/nf-core/mark_duplicates_picard.nf index 10c77aee..55567e52 100644 --- a/modules/nf-core/subworkflow/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -6,8 +6,8 @@ params.markduplicates_options = [:] params.samtools_options = [:] params.control_only = false -include { PICARD_MARKDUPLICATES } from '../software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) -include { SAMTOOLS_INDEX } from '../software/samtools/index/main' addParams( options: params.samtools_options ) +include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_options ) workflow MARK_DUPLICATES_PICARD { diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index cb7406a6..70d1cfc2 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -140,10 +140,10 @@ def awk_dt_frag_options = modules['awk_dt_frag'] /* * MODULES */ -include { INPUT_CHECK } from '../modules/local/subworkflow/input_check' addParams( options: [:] ) +include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) include { CAT_FASTQ } from '../modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) -include { SEACR_CALLPEAK } from '../modules/local/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) +include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) include { UCSC_BEDCLIP } from '../modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) include { IGV_SESSION } from '../modules/local/process/igv_session' addParams( options: modules['igv'] ) include { GET_SOFTWARE_VERSIONS } from '../modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) @@ -159,22 +159,22 @@ include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_ /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from '../modules/local/subworkflow/prepare_genome' addParams( genome_options: publish_genome_options, +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( genome_options: publish_genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options, spikein_fasta: spikein_fasta ) -include { ALIGN_BOWTIE2 } from '../modules/local/subworkflow/align_bowtie2' addParams( align_options: bowtie2_align_options, +include { ALIGN_BOWTIE2 } from '../subworkflows/local/align_bowtie2' addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from '../modules/local/subworkflow/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) -include { CALCULATE_FRAGMENTS } from '../modules/local/subworkflow/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], samtools_view_options: modules['calc_frag_samtools_view'], bamtobed_options: modules['calc_frag_bamtobed'], awk_options: modules['calc_frag_awk'], cut_options: modules['calc_frag_cut']) +include { SAMTOOLS_VIEW_SORT_STATS } from '../subworkflows/local/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) +include { CALCULATE_FRAGMENTS } from '../subworkflows/local/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], samtools_view_options: modules['calc_frag_samtools_view'], bamtobed_options: modules['calc_frag_bamtobed'], awk_options: modules['calc_frag_awk'], cut_options: modules['calc_frag_cut']) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) -include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../modules/local/subworkflow/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) +include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) //////////////////////////////////////////////////// @@ -194,9 +194,9 @@ include { SAMTOOLS_SORT } from '../modules/nf-core/software/samtools/sort/main.n /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { FASTQC_TRIMGALORE } from '../modules/nf-core/subworkflow/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) -include { MARK_DUPLICATES_PICARD } from '../modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../modules/nf-core/subworkflow/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) +include { FASTQC_TRIMGALORE } from '../subworkflows/nf-core/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) +include { MARK_DUPLICATES_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) //////////////////////////////////////////////////// From bbfa917bc4b8fe22dce17e8a717c01fef50eea48 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 13 May 2021 10:59:14 +0100 Subject: [PATCH 159/675] more path fixing --- subworkflows/local/align_bowtie2.nf | 4 ++-- subworkflows/local/prepare_genome.nf | 2 +- workflows/cutandrun.nf | 22 +++++++++++----------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/subworkflows/local/align_bowtie2.nf b/subworkflows/local/align_bowtie2.nf index 40c497fc..fcbacdb0 100644 --- a/subworkflows/local/align_bowtie2.nf +++ b/subworkflows/local/align_bowtie2.nf @@ -9,8 +9,8 @@ params.samtools_spikein_options = [:] include { BOWTIE2_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) -include { BAM_SORT_SAMTOOLS } from '../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_options ) -include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) +include { BAM_SORT_SAMTOOLS } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_options ) +include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) workflow ALIGN_BOWTIE2 { take: diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 788b44ce..dac7d3d0 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -15,7 +15,7 @@ include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../../modules/local include { UNTAR as UNTAR_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_index_options ) include { UNTAR as UNTAR_SPIKEIN_BT2_BUILD } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_spikein_index_options ) include { BOWTIE2_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_index_options ) -include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from '../../modules/nf-core/software/bowtie2/build' addParams( options: params.bt2_spikein_index_options ) +include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_spikein_index_options ) workflow PREPARE_GENOME { take: diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 70d1cfc2..a77ac721 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -141,19 +141,19 @@ def awk_dt_frag_options = modules['awk_dt_frag'] * MODULES */ include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) -include { CAT_FASTQ } from '../modules/local/process/cat_fastq' addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/process/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) +include { CAT_FASTQ } from '../modules/nf-core/software/cat/fastq/main' addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) -include { UCSC_BEDCLIP } from '../modules/local/process/ucsc_bedclip' addParams( options: modules['ucsc_bedclip'] ) -include { IGV_SESSION } from '../modules/local/process/igv_session' addParams( options: modules['igv'] ) -include { GET_SOFTWARE_VERSIONS } from '../modules/local/process/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) -include { MULTIQC } from '../modules/local/process/multiqc' addParams( options: multiqc_options ) -include { EXPORT_META } from '../modules/local/process/export_meta' addParams( options: modules['export_meta'] ) -include { GENERATE_REPORTS } from '../modules/local/process/generate_reports' addParams( options: modules['generate_reports'] ) +include { UCSC_BEDCLIP } from '../modules/nf-core/software/ucsc/bedclip/main' addParams( options: modules['ucsc_bedclip'] ) +include { IGV_SESSION } from '../modules/local/igv_session' addParams( options: modules['igv'] ) +include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) +include { EXPORT_META } from '../modules/local/export_meta' addParams( options: modules['export_meta'] ) +include { GENERATE_REPORTS } from '../modules/local/generate_reports' addParams( options: modules['generate_reports'] ) include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) -include { AWK as AWK_FRAG_BIN } from '../modules/local/process/awk' addParams( options: modules['awk_frag_bin'] ) -include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/process/awk' addParams( options: modules['awk_edit_peak_bed'] ) -include { DESEQ2_DIFF } from '../modules/local/process/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) +include { AWK as AWK_FRAG_BIN } from '../modules/local/awk' addParams( options: modules['awk_frag_bin'] ) +include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/awk' addParams( options: modules['awk_edit_peak_bed'] ) +include { DESEQ2_DIFF } from '../modules/local/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) /* From 1542d5f1f66ea94e653c5402ace7e2d048b8fab0 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 13 May 2021 11:40:23 +0100 Subject: [PATCH 160/675] reverting to old cat fastq because nfcore one doesn't work --- workflows/cutandrun.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index a77ac721..267d70b1 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -141,7 +141,8 @@ def awk_dt_frag_options = modules['awk_dt_frag'] * MODULES */ include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) -include { CAT_FASTQ } from '../modules/nf-core/software/cat/fastq/main' addParams( options: cat_fastq_options ) +// include { CAT_FASTQ } from '../modules/nf-core/software/cat/fastq/main' addParams( options: cat_fastq_options ) +include { CAT_FASTQ } from '../modules/local/cat_fastq' addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) include { UCSC_BEDCLIP } from '../modules/nf-core/software/ucsc/bedclip/main' addParams( options: modules['ucsc_bedclip'] ) From d91b139e5be50dc99946fdc4a8b748e0d37fc739 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 13 May 2021 17:29:48 +0100 Subject: [PATCH 161/675] added igg_control param check --- bin/python/check_samplesheet.py | 20 ++++++++++++++++++-- modules/local/samplesheet_check.nf | 2 +- nextflow.config | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/bin/python/check_samplesheet.py b/bin/python/check_samplesheet.py index 5b7088e4..debe4df2 100755 --- a/bin/python/check_samplesheet.py +++ b/bin/python/check_samplesheet.py @@ -17,6 +17,7 @@ def parse_args(args=None): parser = argparse.ArgumentParser(description=Description, epilog=Epilog) parser.add_argument("FILE_IN", help="Input samplesheet file.") parser.add_argument("FILE_OUT", help="Output file.") + parser.add_argument("IGG", help="Boolean for whether or not igg is given") return parser.parse_args(args) @@ -40,7 +41,7 @@ def print_error(error, context="Line", context_str=""): # TODO nf-core: Update the check_samplesheet function -def check_samplesheet(file_in, file_out): +def check_samplesheet(file_in, file_out, igg_control): """ This function checks that the samplesheet follows the following structure: @@ -51,6 +52,8 @@ def check_samplesheet(file_in, file_out): KO,1,KO_LIB1_REP1_1.fastq.gz,KO_LIB1_REP1_2.fastq.gz """ + igg_present = False + sample_run_dict = {} with open(file_in, "r") as fin: @@ -67,6 +70,10 @@ def check_samplesheet(file_in, file_out): for line in fin: lspl = [x.strip().strip('"') for x in line.strip().split(",")] + if not igg_present: + if 'igg' in lspl: + igg_present = True + ## Check valid number of columns per row if len(lspl) < len(HEADER): print_error( @@ -126,6 +133,15 @@ def check_samplesheet(file_in, file_out): else: sample_run_dict[sample][replicate].append(sample_info) + ## Check igg_control parameter is consistent with input groups + if (igg_control == 'true' and not igg_present): + print("ERROR: No 'igg' group was found in " + str(file_in) + " If you are not supplying an IgG control, please specify --igg_control 'false' on command line.") + sys.exit(1) + + if (igg_control == 'false' and igg_present): + print("ERROR: Parameter --igg_control was set to false, but an 'igg' group was found in " + str(file_in) + ".") + sys.exit(1) + ## Write validated samplesheet with appropriate columns if len(sample_run_dict) > 0: out_dir = os.path.dirname(file_out) @@ -162,7 +178,7 @@ def check_samplesheet(file_in, file_out): def main(args=None): args = parse_args(args) - check_samplesheet(args.FILE_IN, args.FILE_OUT) + check_samplesheet(args.FILE_IN, args.FILE_OUT, args.IGG) if __name__ == "__main__": diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 90dda45f..78beab3b 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -25,7 +25,7 @@ process SAMPLESHEET_CHECK { script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - $baseDir/bin/python/check_samplesheet.py $samplesheet samplesheet.valid.csv + $baseDir/bin/python/check_samplesheet.py $samplesheet samplesheet.valid.csv $params.igg_control """ } diff --git a/nextflow.config b/nextflow.config index e3069d30..a7b6ed19 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,7 +13,7 @@ params { input = '' public_data_ids = null skip_sra_fastq_download = false - no_igg = null + igg_control = true // References genome = '' From 5de63abc5c2812b489cfc08b5a08d56e7530884b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 14 May 2021 10:29:14 +0100 Subject: [PATCH 162/675] updated igenomes file --- conf/igenomes.config | 839 +++++++++++++++++++++---------------------- 1 file changed, 417 insertions(+), 422 deletions(-) diff --git a/conf/igenomes.config b/conf/igenomes.config index 5430266b..a270df7f 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -1,427 +1,422 @@ /* - * ------------------------------------------------- - * Nextflow config file for iGenomes paths - * ------------------------------------------------- - * Defines reference genomes, using iGenome paths - * Can be used by any config that customises the base - * path using $params.igenomes_base / --igenomes_base - */ +======================================================================================== + Nextflow config file for iGenomes paths +======================================================================================== + Defines reference genomes using iGenome paths. + Can be used by any config that customises the base path using: + $params.igenomes_base / --igenomes_base +---------------------------------------------------------------------------------------- +*/ params { - // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'GRCm38' { + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + } + 'TAIR10' { + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" + } + 'EB2' { + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" + } + 'UMD3.1' { + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" + } + 'WBcel235' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" + } + 'CanFam3.1' { + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" + } + 'GRCz10' { + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'BDGP6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" + } + 'EquCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" + } + 'EB1' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + } + 'Galgal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'Gm01' { + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" + } + 'Mmul_1' { + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" + } + 'IRGSP-1.0' { + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'CHIMP2.1.4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" + } + 'Rnor_6.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'R64-1-1' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" + } + 'EF2' { + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" + } + 'Sbi1' { + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" + } + 'Sscrofa10.2' { + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" + } + 'AGPv3' { + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'hg38' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'hg19' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" + } + 'mm10' { + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" + } + 'bosTau8' { + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'ce10' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" + } + 'canFam3' { + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" + } + 'danRer10' { + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.37e9" + } + 'dm6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" + } + 'equCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" + } + 'galGal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" + } + 'panTro4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" + } + 'rn6' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'sacCer3' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" + } + 'susScr3' { + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" + } } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" - } - 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" - } - 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" - } - 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" - } - 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" - } - 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" - } - 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" - } - 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" - } - 'K12-MG1655' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BismarkIndex/" - } - 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" - } - 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" - } - 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" - } - 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" - } - 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" - } - 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" - } - 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" - } - 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" - } - 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" - } - 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" - } - 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" - } - 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" - } - 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" - } - 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" - } - 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" - } - 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" - } - 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" - } - } } From b9db6cb31e2d8eb6d9c172fdaf4ddfade7c79a22 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 14 May 2021 11:30:31 +0100 Subject: [PATCH 163/675] add module for no igg seacr peak call --- modules/local/seacr_no_igg.nf | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 modules/local/seacr_no_igg.nf diff --git a/modules/local/seacr_no_igg.nf b/modules/local/seacr_no_igg.nf new file mode 100644 index 00000000..437203b2 --- /dev/null +++ b/modules/local/seacr_no_igg.nf @@ -0,0 +1,42 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +def VERSION = '1.3' + +process SEACR_CALLPEAK { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.29.2" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0" + } else { + container 'quay.io/biocontainers/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0' + } + + input: + tuple val(meta), path(bedgraph) + val (threshold) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + SEACR_1.3.sh \\ + $bedgraph \\ + $threshold \\ + $options.args \\ + $prefix + + echo $VERSION > ${software}.version.txt + """ +} \ No newline at end of file From ab7e8d161738dee9765f877234a75e86ec47dc8e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 14 May 2021 11:31:13 +0100 Subject: [PATCH 164/675] no igg stuff and concatenating PE reads when sample_id is the same, otherwise skip --- nextflow.config | 5 ++- workflows/cutandrun.nf | 70 ++++++++++++++++++++++++++++++------------ 2 files changed, 55 insertions(+), 20 deletions(-) diff --git a/nextflow.config b/nextflow.config index a7b6ed19..8260d284 100644 --- a/nextflow.config +++ b/nextflow.config @@ -13,7 +13,6 @@ params { input = '' public_data_ids = null skip_sra_fastq_download = false - igg_control = true // References genome = '' @@ -59,6 +58,10 @@ params { skip_igv = false skip_reporting = false + // SEACR Peak Calling + igg_control = true + peak_threshold = '0.05' + // Boilerplate options enable_conda = false clusterOptions = '' diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 267d70b1..1a960419 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -156,6 +156,7 @@ include { AWK as AWK_FRAG_BIN } from '../modules/local/awk' addParams( options: include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/awk' addParams( options: modules['awk_edit_peak_bed'] ) include { DESEQ2_DIFF } from '../modules/local/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) +include { SEACR_CALLPEAK as SEACR_NO_IGG } from '../modules/local/seacr_no_igg' addParams( options: modules['seacr'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -228,21 +229,31 @@ workflow CUTANDRUN { meta.id = meta.id.split('_')[0..-2].join('_') [ meta, fastq ] } .groupTuple(by: [0]) - .map { it -> [ it[0], it[1].flatten() ] } - .set { ch_cat_fastq } + // .map { it -> [ it[0], it[1].flatten() ] } + // .set { ch_cat_fastq } + .branch { + meta, fastq -> + single : fastq.size() == 1 + return [ meta, fastq.flatten() ] + multiple: fastq.size() > 1 + return [ meta, fastq.flatten() ] + } + .set { ch_fastq } /* * MODULE: Concatenate FastQ files from same sample if required */ CAT_FASTQ ( - ch_cat_fastq + ch_fastq.multiple ) + .mix(ch_fastq.single) + .set { ch_cat_fastq } /* * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC */ FASTQC_TRIMGALORE ( - CAT_FASTQ.out.reads, + ch_cat_fastq, params.skip_fastqc || params.skip_qc, params.skip_trimming ) @@ -410,25 +421,46 @@ workflow CUTANDRUN { } .set { ch_bedgraph_split } - ch_bedgraph_split.target - .combine(ch_bedgraph_split.control) - .filter { row -> row[0].replicate == row[2].replicate } - .map { row -> [ row[0], row[1], row[3] ] } - .set { ch_bedgraph_combined } + /* + * MODULE: Call peaks with IgG COntrol + */ + if (params.igg_control) { + + ch_bedgraph_split.target + .combine(ch_bedgraph_split.control) + .filter { row -> row[0].replicate == row[2].replicate } + .map { row -> [ row[0], row[1], row[3] ] } + .set { ch_bedgraph_combined } + + SEACR_CALLPEAK ( + ch_bedgraph_combined + ) + ch_seacr_bed = SEACR_CALLPEAK.out.bed + ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + + } /* - * MODULE: Call peaks + * MODULE: Call peaks without IgG COntrol */ - SEACR_CALLPEAK ( - ch_bedgraph_combined - ) - ch_seacr_bed = SEACR_CALLPEAK.out.bed - ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + + if (!params.igg_control) { + + ch_peak_threshold = Channel.value(params.peak_threshold) + + SEACR_NO_IGG ( + ch_bedgraph_split.target, + ch_peak_threshold.collect() + ) + ch_seacr_bed = SEACR_NO_IGG.out.bed + ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) + + } /* * CHANNEL: Collect SEACR group names */ - SEACR_CALLPEAK.out.bed + ch_seacr_bed //.map{ row -> row[0].find{ it.key == "group" }?.value() } .map{ row -> row[0].group} .unique() @@ -468,7 +500,7 @@ workflow CUTANDRUN { IGV_SESSION ( PREPARE_GENOME.out.fasta, PREPARE_GENOME.out.gtf, - SEACR_CALLPEAK.out.bed.collect{it[1]}.ifEmpty([]), + ch_seacr_bed.collect{it[1]}.ifEmpty([]), UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) ) } @@ -525,7 +557,7 @@ workflow CUTANDRUN { //HEATMAP ON PEAKS // extract max signal region from SEACR bed AWK_EDIT_PEAK_BED ( - SEACR_CALLPEAK.out.bed + ch_seacr_bed ) ch_software_versions = ch_software_versions.mix(AWK_EDIT_PEAK_BED.out.version.first().ifEmpty(null)) @@ -617,7 +649,7 @@ workflow CUTANDRUN { EXPORT_META.out.csv, SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, AWK_FRAG_BIN.out.file.collect{it[1]}, - SEACR_CALLPEAK.out.bed.collect{it[1]}, + ch_seacr_bed.collect{it[1]}, SAMTOOLS_SORT.out.bam.collect{it[1]} ) From b0ede7effc23876ac2e0d89acd21e1472b628652 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 14 May 2021 12:35:57 +0100 Subject: [PATCH 165/675] Updated settings to include indent --- .vscode/settings.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index fa60f685..2e8758b3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,6 @@ { - "python.pythonPath": "/usr/local/Caskroom/miniconda/base/envs/cutrun/bin/python" + "python.pythonPath": "/usr/local/Caskroom/miniconda/base/envs/cutrun/bin/python", + "editor.tabSize": 4, + "editor.insertSpaces": true, + "editor.detectIndentation": false } \ No newline at end of file From 5c944b1971f8e36326333a14bcc4652a752e14ba Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 14 May 2021 12:36:25 +0100 Subject: [PATCH 166/675] Moved to new lib structure --- lib/NfcoreSchema.groovy | 516 +++++++++++++++++++++++++++++ lib/NfcoreTemplate.groovy | 294 ++++++++++++++++ lib/Utils.groovy | 47 +++ lib/WorflowCutandrun.groovy | 0 lib/WorkflowMain.groovy | 106 ++++++ lib/WorkflowSraDownload.groovy | 21 ++ lib/{ => legacy}/Checks.groovy | 0 lib/{ => legacy}/Completion.groovy | 0 lib/{ => legacy}/Headers.groovy | 0 lib/{ => legacy}/Schema.groovy | 0 lib/nfcore_external_java_deps.jar | Bin 0 -> 2291171 bytes 11 files changed, 984 insertions(+) create mode 100755 lib/NfcoreSchema.groovy create mode 100755 lib/NfcoreTemplate.groovy create mode 100755 lib/Utils.groovy create mode 100644 lib/WorflowCutandrun.groovy create mode 100644 lib/WorkflowMain.groovy create mode 100755 lib/WorkflowSraDownload.groovy rename lib/{ => legacy}/Checks.groovy (100%) rename lib/{ => legacy}/Completion.groovy (100%) rename lib/{ => legacy}/Headers.groovy (100%) rename lib/{ => legacy}/Schema.groovy (100%) create mode 100644 lib/nfcore_external_java_deps.jar diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy new file mode 100755 index 00000000..16986434 --- /dev/null +++ b/lib/NfcoreSchema.groovy @@ -0,0 +1,516 @@ +// +// This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. +// + +import org.everit.json.schema.Schema +import org.everit.json.schema.loader.SchemaLoader +import org.everit.json.schema.ValidationException +import org.json.JSONObject +import org.json.JSONTokener +import org.json.JSONArray +import groovy.json.JsonSlurper +import groovy.json.JsonBuilder + +class NfcoreSchema { + + // + // Resolve Schema path relative to main workflow directory + // + public static String getSchemaPath(workflow, schema_filename='nextflow_schema.json') { + return "${workflow.projectDir}/${schema_filename}" + } + + // + // Function to loop over all parameters defined in schema and check + // whether the given parameters adhere to the specifications + // + /* groovylint-disable-next-line UnusedPrivateMethodParameter */ + public static void validateParameters(workflow, params, log, schema_filename='nextflow_schema.json') { + def has_error = false + //=====================================================================// + // Check for nextflow core params and unexpected params + def json = new File(getSchemaPath(workflow, schema_filename=schema_filename)).text + def Map schemaParams = (Map) new JsonSlurper().parseText(json).get('definitions') + def nf_params = [ + // Options for base `nextflow` command + 'bg', + 'c', + 'C', + 'config', + 'd', + 'D', + 'dockerize', + 'h', + 'log', + 'q', + 'quiet', + 'syslog', + 'v', + 'version', + + // Options for `nextflow run` command + 'ansi', + 'ansi-log', + 'bg', + 'bucket-dir', + 'c', + 'cache', + 'config', + 'dsl2', + 'dump-channels', + 'dump-hashes', + 'E', + 'entry', + 'latest', + 'lib', + 'main-script', + 'N', + 'name', + 'offline', + 'params-file', + 'pi', + 'plugins', + 'poll-interval', + 'pool-size', + 'profile', + 'ps', + 'qs', + 'queue-size', + 'r', + 'resume', + 'revision', + 'stdin', + 'stub', + 'stub-run', + 'test', + 'w', + 'with-charliecloud', + 'with-conda', + 'with-dag', + 'with-docker', + 'with-mpi', + 'with-notification', + 'with-podman', + 'with-report', + 'with-singularity', + 'with-timeline', + 'with-tower', + 'with-trace', + 'with-weblog', + 'without-docker', + 'without-podman', + 'work-dir' + ] + def unexpectedParams = [] + + // Collect expected parameters from the schema + def expectedParams = [] + for (group in schemaParams) { + for (p in group.value['properties']) { + expectedParams.push(p.key) + } + } + + for (specifiedParam in params.keySet()) { + // nextflow params + if (nf_params.contains(specifiedParam)) { + log.error "ERROR: You used a core Nextflow option with two hyphens: '--${specifiedParam}'. Please resubmit with '-${specifiedParam}'" + has_error = true + } + // unexpected params + def params_ignore = params.schema_ignore_params.split(',') + 'schema_ignore_params' + def expectedParamsLowerCase = expectedParams.collect{ it.replace("-", "").toLowerCase() } + def specifiedParamLowerCase = specifiedParam.replace("-", "").toLowerCase() + if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam) && !expectedParamsLowerCase.contains(specifiedParamLowerCase)) { + // Temporarily remove camelCase/camel-case params #1035 + def unexpectedParamsLowerCase = unexpectedParams.collect{ it.replace("-", "").toLowerCase()} + if (!unexpectedParamsLowerCase.contains(specifiedParamLowerCase)){ + unexpectedParams.push(specifiedParam) + } + } + } + + //=====================================================================// + // Validate parameters against the schema + InputStream input_stream = new File(getSchemaPath(workflow, schema_filename=schema_filename)).newInputStream() + JSONObject raw_schema = new JSONObject(new JSONTokener(input_stream)) + + // Remove anything that's in params.schema_ignore_params + raw_schema = removeIgnoredParams(raw_schema, params) + + Schema schema = SchemaLoader.load(raw_schema) + + // Clean the parameters + def cleanedParams = cleanParameters(params) + + // Convert to JSONObject + def jsonParams = new JsonBuilder(cleanedParams) + JSONObject params_json = new JSONObject(jsonParams.toString()) + + // Validate + try { + schema.validate(params_json) + } catch (ValidationException e) { + println '' + log.error 'ERROR: Validation of pipeline parameters failed!' + JSONObject exceptionJSON = e.toJSON() + printExceptions(exceptionJSON, params_json, log) + println '' + has_error = true + } + + // Check for unexpected parameters + if (unexpectedParams.size() > 0) { + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) + println '' + def warn_msg = 'Found unexpected parameters:' + for (unexpectedParam in unexpectedParams) { + warn_msg = warn_msg + "\n* --${unexpectedParam}: ${params[unexpectedParam].toString()}" + } + log.warn warn_msg + log.info "- ${colors.dim}Ignore this warning: params.schema_ignore_params = \"${unexpectedParams.join(',')}\" ${colors.reset}" + println '' + } + + if (has_error) { + System.exit(1) + } + } + + // + // Beautify parameters for --help + // + public static String paramsHelp(workflow, params, command, schema_filename='nextflow_schema.json') { + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) + Integer num_hidden = 0 + String output = '' + output += 'Typical pipeline command:\n\n' + output += " ${colors.cyan}${command}${colors.reset}\n\n" + Map params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) + Integer max_chars = paramsMaxChars(params_map) + 1 + Integer desc_indent = max_chars + 14 + Integer dec_linewidth = 160 - desc_indent + for (group in params_map.keySet()) { + Integer num_params = 0 + String group_output = colors.underlined + colors.bold + group + colors.reset + '\n' + def group_params = params_map.get(group) // This gets the parameters of that particular group + for (param in group_params.keySet()) { + if (group_params.get(param).hidden && !params.show_hidden_params) { + num_hidden += 1 + continue; + } + def type = '[' + group_params.get(param).type + ']' + def description = group_params.get(param).description + def defaultValue = group_params.get(param).default ? " [default: " + group_params.get(param).default.toString() + "]" : '' + def description_default = description + colors.dim + defaultValue + colors.reset + // Wrap long description texts + // Loosely based on https://dzone.com/articles/groovy-plain-text-word-wrap + if (description_default.length() > dec_linewidth){ + List olines = [] + String oline = "" // " " * indent + description_default.split(" ").each() { wrd -> + if ((oline.size() + wrd.size()) <= dec_linewidth) { + oline += wrd + " " + } else { + olines += oline + oline = wrd + " " + } + } + olines += oline + description_default = olines.join("\n" + " " * desc_indent) + } + group_output += " --" + param.padRight(max_chars) + colors.dim + type.padRight(10) + colors.reset + description_default + '\n' + num_params += 1 + } + group_output += '\n' + if (num_params > 0){ + output += group_output + } + } + if (num_hidden > 0){ + output += colors.dim + "!! Hiding $num_hidden params, use --show_hidden_params to show them !!\n" + colors.reset + } + output += NfcoreTemplate.dashedLine(params.monochrome_logs) + return output + } + + // + // Groovy Map summarising parameters/workflow options used by the pipeline + // + public static LinkedHashMap paramsSummaryMap(workflow, params, schema_filename='nextflow_schema.json') { + // Get a selection of core Nextflow workflow options + def Map workflow_summary = [:] + if (workflow.revision) { + workflow_summary['revision'] = workflow.revision + } + workflow_summary['runName'] = workflow.runName + if (workflow.containerEngine) { + workflow_summary['containerEngine'] = workflow.containerEngine + } + if (workflow.container) { + workflow_summary['container'] = workflow.container + } + workflow_summary['launchDir'] = workflow.launchDir + workflow_summary['workDir'] = workflow.workDir + workflow_summary['projectDir'] = workflow.projectDir + workflow_summary['userName'] = workflow.userName + workflow_summary['profile'] = workflow.profile + workflow_summary['configFiles'] = workflow.configFiles.join(', ') + + // Get pipeline parameters defined in JSON Schema + def Map params_summary = [:] + def blacklist = ['hostnames'] + def params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) + for (group in params_map.keySet()) { + def sub_params = new LinkedHashMap() + def group_params = params_map.get(group) // This gets the parameters of that particular group + for (param in group_params.keySet()) { + if (params.containsKey(param) && !blacklist.contains(param)) { + def params_value = params.get(param) + def schema_value = group_params.get(param).default + def param_type = group_params.get(param).type + if (schema_value != null) { + if (param_type == 'string') { + if (schema_value.contains('$projectDir') || schema_value.contains('${projectDir}')) { + def sub_string = schema_value.replace('\$projectDir', '') + sub_string = sub_string.replace('\${projectDir}', '') + if (params_value.contains(sub_string)) { + schema_value = params_value + } + } + if (schema_value.contains('$params.outdir') || schema_value.contains('${params.outdir}')) { + def sub_string = schema_value.replace('\$params.outdir', '') + sub_string = sub_string.replace('\${params.outdir}', '') + if ("${params.outdir}${sub_string}" == params_value) { + schema_value = params_value + } + } + } + } + + // We have a default in the schema, and this isn't it + if (schema_value != null && params_value != schema_value) { + sub_params.put(param, params_value) + } + // No default in the schema, and this isn't empty + else if (schema_value == null && params_value != "" && params_value != null && params_value != false) { + sub_params.put(param, params_value) + } + } + } + params_summary.put(group, sub_params) + } + return [ 'Core Nextflow options' : workflow_summary ] << params_summary + } + + // + // Beautify parameters for summary and return as string + // + public static String paramsSummaryLog(workflow, params) { + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) + String output = '' + def params_map = paramsSummaryMap(workflow, params) + def max_chars = paramsMaxChars(params_map) + for (group in params_map.keySet()) { + def group_params = params_map.get(group) // This gets the parameters of that particular group + if (group_params) { + output += colors.bold + group + colors.reset + '\n' + for (param in group_params.keySet()) { + output += " " + colors.blue + param.padRight(max_chars) + ": " + colors.green + group_params.get(param) + colors.reset + '\n' + } + output += '\n' + } + } + output += "!! Only displaying parameters that differ from the pipeline defaults !!\n" + output += NfcoreTemplate.dashedLine(params.monochrome_logs) + return output + } + + // + // Loop over nested exceptions and print the causingException + // + private static void printExceptions(ex_json, params_json, log) { + def causingExceptions = ex_json['causingExceptions'] + if (causingExceptions.length() == 0) { + def m = ex_json['message'] =~ /required key \[([^\]]+)\] not found/ + // Missing required param + if (m.matches()) { + log.error "* Missing required parameter: --${m[0][1]}" + } + // Other base-level error + else if (ex_json['pointerToViolation'] == '#') { + log.error "* ${ex_json['message']}" + } + // Error with specific param + else { + def param = ex_json['pointerToViolation'] - ~/^#\// + def param_val = params_json[param].toString() + log.error "* --${param}: ${ex_json['message']} (${param_val})" + } + } + for (ex in causingExceptions) { + printExceptions(ex, params_json, log) + } + } + + // + // Remove an element from a JSONArray + // + private static JSONArray removeElement(json_array, element) { + def list = [] + int len = json_array.length() + for (int i=0;i + if(raw_schema.keySet().contains('definitions')){ + raw_schema.definitions.each { definition -> + for (key in definition.keySet()){ + if (definition[key].get("properties").keySet().contains(ignore_param)){ + // Remove the param to ignore + definition[key].get("properties").remove(ignore_param) + // If the param was required, change this + if (definition[key].has("required")) { + def cleaned_required = removeElement(definition[key].required, ignore_param) + definition[key].put("required", cleaned_required) + } + } + } + } + } + if(raw_schema.keySet().contains('properties') && raw_schema.get('properties').keySet().contains(ignore_param)) { + raw_schema.get("properties").remove(ignore_param) + } + if(raw_schema.keySet().contains('required') && raw_schema.required.contains(ignore_param)) { + def cleaned_required = removeElement(raw_schema.required, ignore_param) + raw_schema.put("required", cleaned_required) + } + } + return raw_schema + } + + // + // Clean and check parameters relative to Nextflow native classes + // + private static Map cleanParameters(params) { + def new_params = params.getClass().newInstance(params) + for (p in params) { + // remove anything evaluating to false + if (!p['value']) { + new_params.remove(p.key) + } + // Cast MemoryUnit to String + if (p['value'].getClass() == nextflow.util.MemoryUnit) { + new_params.replace(p.key, p['value'].toString()) + } + // Cast Duration to String + if (p['value'].getClass() == nextflow.util.Duration) { + new_params.replace(p.key, p['value'].toString().replaceFirst(/d(?!\S)/, "day")) + } + // Cast LinkedHashMap to String + if (p['value'].getClass() == LinkedHashMap) { + new_params.replace(p.key, p['value'].toString()) + } + } + return new_params + } + + // + // This function tries to read a JSON params file + // + private static LinkedHashMap paramsLoad(String json_schema) { + def params_map = new LinkedHashMap() + try { + params_map = paramsRead(json_schema) + } catch (Exception e) { + println "Could not read parameters settings from JSON. $e" + params_map = new LinkedHashMap() + } + return params_map + } + + // + // Method to actually read in JSON file using Groovy. + // Group (as Key), values are all parameters + // - Parameter1 as Key, Description as Value + // - Parameter2 as Key, Description as Value + // .... + // Group + // - + private static LinkedHashMap paramsRead(String json_schema) throws Exception { + def json = new File(json_schema).text + def Map schema_definitions = (Map) new JsonSlurper().parseText(json).get('definitions') + def Map schema_properties = (Map) new JsonSlurper().parseText(json).get('properties') + /* Tree looks like this in nf-core schema + * definitions <- this is what the first get('definitions') gets us + group 1 + title + description + properties + parameter 1 + type + description + parameter 2 + type + description + group 2 + title + description + properties + parameter 1 + type + description + * properties <- parameters can also be ungrouped, outside of definitions + parameter 1 + type + description + */ + + // Grouped params + def params_map = new LinkedHashMap() + schema_definitions.each { key, val -> + def Map group = schema_definitions."$key".properties // Gets the property object of the group + def title = schema_definitions."$key".title + def sub_params = new LinkedHashMap() + group.each { innerkey, value -> + sub_params.put(innerkey, value) + } + params_map.put(title, sub_params) + } + + // Ungrouped params + def ungrouped_params = new LinkedHashMap() + schema_properties.each { innerkey, value -> + ungrouped_params.put(innerkey, value) + } + params_map.put("Other parameters", ungrouped_params) + + return params_map + } + + // + // Get maximum number of characters across all parameter names + // + private static Integer paramsMaxChars(params_map) { + Integer max_chars = 0 + for (group in params_map.keySet()) { + def group_params = params_map.get(group) // This gets the parameters of that particular group + for (param in group_params.keySet()) { + if (param.size() > max_chars) { + max_chars = param.size() + } + } + } + return max_chars + } +} diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy new file mode 100755 index 00000000..26f3dd46 --- /dev/null +++ b/lib/NfcoreTemplate.groovy @@ -0,0 +1,294 @@ +// +// This file holds several functions used within the nf-core pipeline template. +// + +import org.yaml.snakeyaml.Yaml + +class NfcoreTemplate { + + // + // Check AWS Batch related parameters have been specified correctly + // + public static void awsBatch(workflow, params) { + if (workflow.profile.contains('awsbatch')) { + // Check params.awsqueue and params.awsregion have been set if running on AWSBatch + assert (params.awsqueue && params.awsregion) : "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" + // Check outdir paths to be S3 buckets if running on AWSBatch + assert params.outdir.startsWith('s3:') : "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" + } + } + + // + // Check params.hostnames + // + public static void hostName(workflow, params, log) { + Map colors = logColours(params.monochrome_logs) + if (params.hostnames) { + def hostname = "hostname".execute().text.trim() + params.hostnames.each { prof, hnames -> + hnames.each { hname -> + if (hostname.contains(hname) && !workflow.profile.contains(prof)) { + log.info "=${colors.yellow}====================================================${colors.reset}=\n" + + "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + + " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + + " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + + "=${colors.yellow}====================================================${colors.reset}=" + } + } + } + } + } + + // + // Construct and send completion email + // + public static void email(workflow, params, summary_params, projectDir, log, multiqc_report=[], fail_percent_mapped=[:]) { + + // Set up the e-mail variables + def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + if (fail_percent_mapped.size() > 0) { + subject = "[$workflow.manifest.name] Partially successful (${fail_percent_mapped.size()} skipped): $workflow.runName" + } + if (!workflow.success) { + subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + } + + def summary = [:] + for (group in summary_params.keySet()) { + summary << summary_params[group] + } + + def misc_fields = [:] + misc_fields['Date Started'] = workflow.start + misc_fields['Date Completed'] = workflow.complete + misc_fields['Pipeline script file path'] = workflow.scriptFile + misc_fields['Pipeline script hash ID'] = workflow.scriptId + if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository + if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId + if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build + misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp + + def email_fields = [:] + email_fields['version'] = workflow.manifest.version + email_fields['runName'] = workflow.runName + email_fields['success'] = workflow.success + email_fields['dateComplete'] = workflow.complete + email_fields['duration'] = workflow.duration + email_fields['exitStatus'] = workflow.exitStatus + email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + email_fields['errorReport'] = (workflow.errorReport ?: 'None') + email_fields['commandLine'] = workflow.commandLine + email_fields['projectDir'] = workflow.projectDir + email_fields['summary'] = summary << misc_fields + email_fields['fail_percent_mapped'] = fail_percent_mapped.keySet() + email_fields['min_mapped_reads'] = params.min_mapped_reads + + // On success try attach the multiqc report + def mqc_report = null + try { + if (workflow.success && !params.skip_multiqc) { + mqc_report = multiqc_report.getVal() + if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { + if (mqc_report.size() > 1) { + log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" + } + mqc_report = mqc_report[0] + } + } + } catch (all) { + if (multiqc_report) { + log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" + } + } + + // Check if we are only sending emails on failure + def email_address = params.email + if (!params.email && params.email_on_fail && !workflow.success) { + email_address = params.email_on_fail + } + + // Render the TXT template + def engine = new groovy.text.GStringTemplateEngine() + def tf = new File("$projectDir/assets/email_template.txt") + def txt_template = engine.createTemplate(tf).make(email_fields) + def email_txt = txt_template.toString() + + // Render the HTML template + def hf = new File("$projectDir/assets/email_template.html") + def html_template = engine.createTemplate(hf).make(email_fields) + def email_html = html_template.toString() + + // Render the sendmail template + def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] + def sf = new File("$projectDir/assets/sendmail_template.txt") + def sendmail_template = engine.createTemplate(sf).make(smail_fields) + def sendmail_html = sendmail_template.toString() + + // Send the HTML e-mail + Map colors = logColours(params.monochrome_logs) + if (email_address) { + try { + if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + [ 'sendmail', '-t' ].execute() << sendmail_html + log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" + } catch (all) { + // Catch failures and try with plaintext + def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + if ( mqc_report.size() <= max_multiqc_email_size.toBytes() ) { + mail_cmd += [ '-A', mqc_report ] + } + mail_cmd.execute() << email_html + log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + } + } + + // Write summary e-mail HTML to a file + def output_d = new File("${params.outdir}/pipeline_info/") + if (!output_d.exists()) { + output_d.mkdirs() + } + def output_hf = new File(output_d, "pipeline_report.html") + output_hf.withWriter { w -> w << email_html } + def output_tf = new File(output_d, "pipeline_report.txt") + output_tf.withWriter { w -> w << email_txt } + } + + // + // Print pipeline summary on completion + // + public static void summary(workflow, params, log, fail_percent_mapped=[:], pass_percent_mapped=[:]) { + Map colors = logColours(params.monochrome_logs) + + def total_aln_count = pass_percent_mapped.size() + fail_percent_mapped.size() + if (pass_percent_mapped.size() > 0) { + def idx = 0 + def samp_aln = '' + for (samp in pass_percent_mapped) { + samp_aln += " ${samp.value}%: ${samp.key}\n" + idx += 1 + if (idx > 5) { + samp_aln += " ..see pipeline reports for full list\n" + break; + } + } + log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} ${pass_percent_mapped.size()}/$total_aln_count samples passed STAR ${params.min_mapped_reads}% mapped threshold:\n${samp_aln}${colors.reset}-" + } + if (fail_percent_mapped.size() > 0) { + def samp_aln = '' + for (samp in fail_percent_mapped) { + samp_aln += " ${samp.value}%: ${samp.key}\n" + } + log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} ${fail_percent_mapped.size()}/$total_aln_count samples skipped since they failed STAR ${params.min_mapped_reads}% mapped threshold:\n${samp_aln}${colors.reset}-" + } + + if (workflow.success) { + if (workflow.stats.ignoredCount == 0) { + log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" + } else { + log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + } + } else { + hostName(workflow, params, log) + log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } + } + + // + // ANSII Colours used for terminal logging + // + public static Map logColours(Boolean monochrome_logs) { + Map colorcodes = [:] + + // Reset / Meta + colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" + colorcodes['bold'] = monochrome_logs ? '' : "\033[1m" + colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" + colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m" + colorcodes['blink'] = monochrome_logs ? '' : "\033[5m" + colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m" + colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" + + // Regular Colors + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + + // Bold + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + + // Underline + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + + // High Intensity + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + + // Bold High Intensity + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + + return colorcodes + } + + // + // Does what is says on the tin + // + public static String dashedLine(monochrome_logs) { + Map colors = logColours(monochrome_logs) + return "-${colors.dim}----------------------------------------------------${colors.reset}-" + } + + // + // nf-core logo + // + public static String logo(workflow, monochrome_logs) { + Map colors = logColours(monochrome_logs) + String.format( + """\n + ${dashedLine(monochrome_logs)} + ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} + ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} + ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} + ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} + ${colors.green}`._,._,\'${colors.reset} + ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} + ${dashedLine(monochrome_logs)} + """.stripIndent() + ) + } +} diff --git a/lib/Utils.groovy b/lib/Utils.groovy new file mode 100755 index 00000000..18173e98 --- /dev/null +++ b/lib/Utils.groovy @@ -0,0 +1,47 @@ +// +// This file holds several Groovy functions that could be useful for any Nextflow pipeline +// + +import org.yaml.snakeyaml.Yaml + +class Utils { + + // + // When running with -profile conda, warn if channels have not been set-up appropriately + // + public static void checkCondaChannels(log) { + Yaml parser = new Yaml() + def channels = [] + try { + def config = parser.load("conda config --show channels".execute().text) + channels = config.channels + } catch(NullPointerException | IOException e) { + log.warn "Could not verify conda channel configuration." + return + } + + // Check that all channels are present + def required_channels = ['conda-forge', 'bioconda', 'defaults'] + def conda_check_failed = !required_channels.every { ch -> ch in channels } + + // Check that they are in the right order + conda_check_failed |= !(channels.indexOf('conda-forge') < channels.indexOf('bioconda')) + conda_check_failed |= !(channels.indexOf('bioconda') < channels.indexOf('defaults')) + + if (conda_check_failed) { + log.warn "=============================================================================\n" + + " There is a problem with your Conda configuration!\n\n" + + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + + " Please refer to https://bioconda.github.io/user/install.html#set-up-channels\n" + + " NB: The order of the channels matters!\n" + + "===================================================================================" + } + } + + // + // Join module args with appropriate spacing + // + public static String joinModuleArgs(args_list) { + return ' ' + args_list.join(' ') + } +} diff --git a/lib/WorflowCutandrun.groovy b/lib/WorflowCutandrun.groovy new file mode 100644 index 00000000..e69de29b diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy new file mode 100644 index 00000000..4425c132 --- /dev/null +++ b/lib/WorkflowMain.groovy @@ -0,0 +1,106 @@ +// +// This file holds several functions specific to the main.nf workflow in the nf-core/rnaseq pipeline +// + +class WorkflowMain { + + // + // Citation string for pipeline + // + public static String citation(workflow) { + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + + "* The pipeline\n" + + " https://doi.org/10.5281/zenodo.1400710\n\n" + + "* The nf-core framework\n" + + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + + "* Software dependencies\n" + + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" + } + + // + // Print help to screen if required + // + public static String help(workflow, params, log) { + def command = "nextflow run nf-core/rnaseq --input samplesheet.csv --genome GRCh37 -profile docker" + def help_string = '' + help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) + help_string += NfcoreSchema.paramsHelp(workflow, params, command) + help_string += '\n' + citation(workflow) + '\n' + help_string += NfcoreTemplate.dashedLine(params.monochrome_logs) + return help_string + } + + // + // Print parameter summary log to screen + // + public static String paramsSummaryLog(workflow, params, log) { + def summary_log = '' + summary_log += NfcoreTemplate.logo(workflow, params.monochrome_logs) + summary_log += NfcoreSchema.paramsSummaryLog(workflow, params) + summary_log += '\n' + citation(workflow) + '\n' + summary_log += NfcoreTemplate.dashedLine(params.monochrome_logs) + return summary_log + } + + // + // Validate parameters and print summary to screen + // + public static void initialise(workflow, params, log) { + // Print help to screen if required + if (params.help) { + log.info help(workflow, params, log) + System.exit(0) + } + + // Validate workflow parameters via the JSON schema + if (params.validate_params) { + NfcoreSchema.validateParameters(workflow, params, log) + } + + // Print parameter summary log to screen + log.info paramsSummaryLog(workflow, params, log) + + // Check that conda channels are set-up correctly + if (params.enable_conda) { + Utils.checkCondaChannels(log) + } + + // Check AWS batch settings + NfcoreTemplate.awsBatch(workflow, params) + + // Check the hostnames against configured profiles + NfcoreTemplate.hostName(workflow, params, log) + + // Check at least one form of input has been provided + if (!params.public_data_ids && !params.input) { + log.error "Please specify at least one form of input for the pipeline e.g. '--input samplsheet.csv' or '--public_data_ids ids.txt'." + System.exit(1) + } + } + + // + // Get attribute from genome config file e.g. fasta + // + public static String getGenomeAttribute(params, attribute) { + def val = '' + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + val = params.genomes[ params.genome ][ attribute ] + } + } + return val + } + + // + // Get attribute from genome config file e.g. fasta + // + public static String getGenomeAttributeSpikeIn(params, attribute) { + def val = '' + if (params.genomes && params.spikein_genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.spikein_genome ].containsKey(attribute)) { + val = params.genomes[ params.spikein_genome ][ attribute ] + } + } + return val + } +} diff --git a/lib/WorkflowSraDownload.groovy b/lib/WorkflowSraDownload.groovy new file mode 100755 index 00000000..a1470c18 --- /dev/null +++ b/lib/WorkflowSraDownload.groovy @@ -0,0 +1,21 @@ +// +// This file holds functions specific to the workflow/sra_download.nf in the nf-core/rnaseq pipeline +// + +class WorkflowSraDownload { + + // + // Print a warning after SRA download has completed + // + public static void sraDownloadWarn(log) { + log.warn "=============================================================================\n" + + " Please double-check the samplesheet that has been auto-created using the\n" + + " public database ids provided via the '--public_data_ids' parameter.\n\n" + + " Public databases don't reliably hold information such as strandedness\n" + + " information.\n\n" + + " All of the sample metadata obtained from the ENA has been appended\n" + + " as additional columns to help you manually curate the samplesheet before\n" + + " you run the main workflow(s) in the pipeline.\n" + + "===================================================================================" + } +} diff --git a/lib/Checks.groovy b/lib/legacy/Checks.groovy similarity index 100% rename from lib/Checks.groovy rename to lib/legacy/Checks.groovy diff --git a/lib/Completion.groovy b/lib/legacy/Completion.groovy similarity index 100% rename from lib/Completion.groovy rename to lib/legacy/Completion.groovy diff --git a/lib/Headers.groovy b/lib/legacy/Headers.groovy similarity index 100% rename from lib/Headers.groovy rename to lib/legacy/Headers.groovy diff --git a/lib/Schema.groovy b/lib/legacy/Schema.groovy similarity index 100% rename from lib/Schema.groovy rename to lib/legacy/Schema.groovy diff --git a/lib/nfcore_external_java_deps.jar b/lib/nfcore_external_java_deps.jar new file mode 100644 index 0000000000000000000000000000000000000000..805c8bb5e4fd43a12a5891eea5a68788309629b0 GIT binary patch literal 2291171 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�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

A$B3k~{RycObG@6y| zeyU>ii({30?LWsXi#@9oW*zQ0b!mkPo|(rr8zWfmMaWsfzfTFD?@`h6W@rrSRdzSE zw`rXVJr@XY&cORs$=oKzyM!yXGTS5`I__O_k$Due=|(^Z9Sef!92Z=B)r(uD9!OxH zJId3bOa@)YwVx#S9MN7HC|7b|uhUXt3EHLxe9>U~Px8C8(se2A04P9bC( zkFz|#ZjrB^hnk=H@ltP zUI(v-cU*kW8bmtjYgIcfw>8iUcmN9%`}6Jj<=s{48qdCFt@+*GHWqiTl3la}e^g5$ zbaq!^wz9g~YH#ja+iY%rU#!nhC~r4zwT-FaMZE((|#TF6xj8P^k5!c{$MGq)qwaPu8l7Lh6Db*RY~ZxP-91i1`+&ge~gSYY>vlVGcd1P zTCoCk|2n>k{4+wejjz0Q1k| zKq(bmQ8Y;vIR&@=beY&+qBWQ*LmnI`H^C@Albdd=AM{EoD_Zvy)HS>JBi*W$shQpY zEbC`bRtZ4{Yieb}nuSbs(OUY((GcO8%HS8{Rl4CL00wl)>slFuLqSdAXsq>@n)mk=@nS^z8E@PsTFM!GuBkkhUFSnXI@j{h;6x> zFm?x8i$E=9Yddju+C1{r%=j)_tBFbhE;O-NtO-ptzVj^c@E>8+ESflNPm>Gt33=duqELk#a2tCTniYk~nayj_b_ z(m!@dRyc$ZeGEQ79l}fu*{*9h00(|+bxqT_4y^ZSk41uFH%Lk@?@#l zH-5eXkR3DuZ9asKDoi`;gcy-*3>NNTV3^G~QvO?e(@m0T$-Vj9dDHDTkEhn5{o=#@n> z{Hk}kshW#Td$$@6b7FDzM_x8@l^4)x!}agrDKCWVM9j{lCM7aY=_E(#TtT>bg6#RC zbDIYKe4=AGLO)5yUjPmkEBw@mHGM_}?ePNfqxMrEzhQ8cUZoVhH6p9dK|<Vp4{djYG{rl=B={BjVkbBc^k`8@Cc#Grsg-wq=JOKpg zzNXfJnx>y1JYhMKNflW1>U%?I%zRV$3L``iDZ+yKYUUljVh7=F2^KIFUIloM_rs8V z)iq-uh#+@_^;~WZLhwq`a6WZH@RB?{((%Fo@f>cEAbSMsC_jn$O6FhAbxR$0>_KV5 zu~l9zde}?nFCRk(#{h=s#P6z+9VkLy$$vsRY+MoFhah|8@W{Ob8TRk5x?%>2z&(6( z5hUm+y%Y5mUrl^L8nW0H+r}HMy)YIxJv46AcW0j;txyHYUjNr7!nVPKdSZ?rv8ZH+N& zk2h?U6E#ACP;#DLch%XWZKN$Ds*O}Rb97^3UpZOSXaR%OJ~kJtCJ~Hrg;{B!%kG+C zC$RAa^^Q+y(=LC4`RonPu19G2AFND#gBOi+omwklF&DH_+|ad-9T|woT82X?#D>v1 zy0p!EFaR>xzp@_7Fm0beeEx0>ai>vB%k}3+x8z)zXy*LUo&&I4oz>>*AkJvbz82x! z1Ej#fiFExC{&mB%(sSW_eQfmA=@g(QmyDz{LEP&ZFH!?fo`R<+9%ETlpPciES4yd-3AgAk%|Cu z3jyXMST2-LjBee7h~E*Q3_Ic-w)e9+HmMoJILZ<%-v|BxN)V>(Yc=sili3S83usoi z+0DF5c)oe!^i?y5Ou&JJ52K<;{bH?+!EhmC7?}j>PboUeB64T;bHNGZn;CRxA|>(J z&@)aozl`~IZve-0$Y~^Y0S_Ocl@91Trn~V9yJB9v zZjonzLf?KeD;Ut0-4B(GSG^z`!7g@-t5wo+W`~N?P4t$HZDK02*_=HP3r6eN{nFo{#%}>~CoQtpv zBTVIbz~p-3Uf}%y+PudG>_lYhvk^B;C9XSAj@cplCf!w~i!0G~S#&?;NZn#hGxv)a z8-;9NiCzLZkJHoRnU3%ylomRsml_PqmBpo3jgK&~lz_pMSdvH3AuCj3lwN2w|1J-| zWT^>*uIUI>EhtS9F=65Gh$+3dkBn4N%1Fq`LZj4TP7#An@sMwj=rbD~yqcaZ5#*Iy z;;=rq4ig2)eF8UFz+7vkmsJ@vKaFOe(KHnr**O*9=-Ngt<5=U9a^iu?EAc4mUqS#J z_PMQxy!E9#(_v2e+wAYAgrir9;l(T=4=0sY7OGeHCZudb>W)HRyXxF)bv}-X9Hroh zS8mie0F^S*%(7&KQ~F8BIdr3;4xdzSr8&0Pd;_}1f}`0NvL??$Qx07dDxX9Mk4)2~ z^~%yN;MtD3g$$;JRyaZ_I&zHi>Rq;JQP+TOS${vk1SA)d3;UFUPTXk}Im73RDf@y}RZ!D_LhxqEd77RbM2^AS0b62Ek0xn=T;M57pyR*d38~`CN;*nz=Vl7)O;Nun;G1$S|a<`FDG}?^r#RO)~W+*Vr(v_|_>y*fGtMwSPo}d&B*SuF?E|c|3 zeF7eIJ!THFi7f@c{hnP61766 zb%cefC^Sen+kwru&#|!7M*_5!+R!FTy(kd6lQD8m>N?|zF#qT zf=4d%?m*1Dz%h7ANhfFVueyvYn#RR)N~Yr35XEQoC{xdbFjh;8Q^}L+yrab507;)@&Ap<0;&&mg_#|qQFK9XxDGr;f=NTEM zno)FBSV*eUwwLadZK;cjmp>FbP0%phg&1fI77S)i1~Y3+far<99ls$Ay74Sa(t@m* z70-A!0Amz?DS&b6yyT^#rj3ql%_>T~cg`-oI7?t+e5US$kK;LMA}{Edhv}yx2TD!N zadT_J)TTgE%~}4LjBzjLE;LbugS(}@?Nhqx+Gf-}*`r(NEhiC4RdyybcG<%SGwZ0+ znpb6G`fgN#jx5M36@4?+!o$+1Ioh#U7l?Tq;2+lfo!H#G6R|FOzRe+iFJSXHKpDp7 zyfd*ba=y(6elGxXvVc$%DZjj#iBxLY)a+w4Bd7b34ViD)(!J0NH-mSc$4^IV+1Y?+ zih155!0yy7>-$%!1M@H6f>dlj>Zej(`)Li((=xnr5- z#PabnI}^r(*-qq5Rd!~?gZZTPJCB1U?RX)XYsk*ga(1@pjeBx$@y7gdmd2K5fpGR# zQM3O-)3LZWN3Dt=YE@3YH%ZOP0kuZ2z?-dZHIZ7gPxMV!w`N15+1SrB?<-2Q4=6%4 zAnfRvY3fTM>2H6$P3T<0qSV-P$26~C56{W-Cc$r}KNzlDD4S5` z**gLzu4JA+NO*d$E>r^KTsFz)Bl!5G>U;I)%kKi=!eYNZ$`RY6V9W1?OoPpo*n$)G zXA9#dIj|r~neUg-lM+!;-Q3bR<@G!mpsw5=RCJfeK650#wB%~B=hub-)6#*``JiA2 zw`^J#8bwQi%)7ATwnCpxHgMvs#C453HesYVCH-K~dLGcYr48}*Fbd~DP#WjjXJ3s; zFZL6j!oDot{QbbI(m%`@-tBPL`AqgXIx;@Z8OrsaL=$KWd<(jXP^?0+7H}$`|D4=n z5>GRh`(yVaVEA`L*Z)H>?&4_RY++|BYGGn+{NDxR|MQps6pW{6DQT(v2*#s`i-YYg zYzj)$HHR~$LRwc>Qz1i$lau4+6YY~)vBya{?AgI)ISNGZyzdt1_Os+Tk8b^OT4HD2 zy&hN8^8TX7T7|^p<6MkSf49+D)wR5EdYL?Y?D2g9?_=hI%m=w;?GMQC*@D=E1p#c2 zd;}5<)bHo&3)54ELmUPM>r30~(O-)(`X{;L1CRkz3>4$jjDwc~!+|UXR^yY6Lz#Z2 zlQeTpuCf@3Zp7MVycuWn!-3N+9eTdi-Ui#92(LWS6! z)>)dmOI5cAZUOC77PA+7+sKe*?}ZgQj5--1gSQHjP0+wrs{>j0e`8tVt2WXsF;*YW z>c56l=(e(?B~`VQ4-{Kaa+#XP7Gd+92C4Uh`BH=4fyV{86RIPc z2bv5-=Htr;st72^Bc8iUpI4h@GwYZ<_>fv}HIfvy;IA40HxST+r0OfxlhlL6_M;?& zYz3C>SDt%}gt0sBttci)a`+7^IjO{Qd8nmPS{zK(=`kLhewX_Tkq&NrH#*c%Y8};h z{#^MAN>NNYO|;ayJ1;5}FS#U}I&P|3W3W;$QjG_aYW0fc@j9mIIsT=|vF8AhV z8mR(4V>KJ51xIw)pm!>kdHm8#habhCC2V~u1=^jrCyqbvFEouJoN4)Tq_NpsW=Ro| z9wHJhf+G441Rjh@bFk_%jQ^#utJ+6HAr*n z?h#~2lDvqukK4(?^+mv(AAXU*dr}p#*-QFLZl9fnUeXVz(!Ug1KiF?!NA&&@>Fg63 zTH_`bPOmW}g!4WY@%QG&8cC@%ip0Tc{}UzL=Renl^%o^~ZXV+e6lOth|KQZ=wMTF8 za^vZ0mC$wk8F@c^=2i(xvjU}Od3LpJK`&-|$RR?jPc4wAii>TM*@Yg=zNPbZ?l%K( zj4zy>BzAA$r;qX-U|_X@YIcfoiH621_9cQkdrRlDxYBbzNr(I3ymPwVBTZnYW5Zby!OWGb~8=Y*DF%6iGf zKTh4PFW6-oX6iWAva1@a9I9xS+*MgmoR@>T#&xMnIJ8jn;D^XZ*@)r`KGF(^9GU&t zGLE_!)C)q$mtZe|XqBF01f1kaft8`fRP$P zT{JLa3Q%`Y5}xh|Wz;<-VlCZWryt8biDyE9c!Meo8OZ_{l1RtEmr1&5QV3;U#Z%+x z4mFNC4m(W9V?_SMT9DzsvX(|p&T-$Aomu8wb2piViNFjh@_U%B%a7ao>xvDwo3qTc z$uc)cZHbM;IW)}l#}2BqwB)#~>?G;jDID!^D|2oUA~aQ9N%0V(t;mpiY@Evc<+3rp zgb6WMJAviMOl6f}zRj%sGokIK)~O+%K}B$;>ey6!$yte&!b-BVZBp`LGt@ABfkJ3* zgO_7i=ZCb^S%}HD79}%L(kOhPxLi?=24b{CS7KS|=5GOqBQftgz-YzZz_KFfC@r2w zUjmcfDRqQrRdH(3o}fKkiCLJ8PXZa*ym05NDdunvGb_Dhnhn7z6%mnb8cgdMhQSD2P;3Jz0OOE5KDnP=gtGOKksudv9iOu>dI)#ZgzB_?aN zCNfq+;lRN>3SR{KGA5IY2UU%5&{H%e%5J^qsXT%fk z&5!Yp&AprK&}Z8?R#Zg0Uj)I3eeMVd0q>9qLGF+Ow@o;E(1LVUo@F~~+d)$3xhJ!24B?Zfg*dibPpO85XIRA{G^TXc4B2 zN^djljFhuYVGEUL4vi!x>Lz@hDn%Bh$gS&328ya7luC^TM|7tweV1&`jfTuxaSgZ3 zobBDNy>7CLlM;wcTbo_l;Z3BfG;p7-$}Fli=HHD???mA<)kRO$%*)5jF=?T<&@x7X zxLodri1^%2{MEpJ{rJ;BaIuBLjnUrcBsQl-|B=cNUP#Q;W>f}Hl-J_DiLBeL83Ap4{qV_l9ITs z9P$`E&?cs8bYa+m2^NR%XES4O1i0hL=w3N3i|X&APHe$DgjxP&(2!NF+!Udb+9Tp< zdxMa`tYozvhTTL+>=oO;=9zqj0^U#vZe6%K_LWTpZJ5a+v;nFCD(K&l8+h3b(%URN zY@OdLkhepqDf3Ybs|#{m;EVLKmfOPynCol`pTCWIS!N#+*4KBD)rj56PI zM7}3uHca#WE4|s2!V_YRr|iAQt7w7Lr?u~dQom*ir5g$V8jkcyHj$oX78iBaM_nKF z&sAbEZ5H%p)8~)b*zJ>V`ID5MDAuMCUQHb4&_Obi#NybTDD0peffjDQQ3%c?Ebhjr z0$D}eF_ZB9W`?~hsfaUY0fV%9T8sAtDGis8gcXsi3Xv<<&UBJ@tauB8SGN2L%i+VS zc*YmnKYF7wEyrB!KQX{*|JKz(@xM0U|8f%kBh{T)+Q8F8!q(zHx8oF54R5k`yZg20rg%^uizpoA^x6|y5gsR;}CddUx5!e1|Ndu5P3yjnGcwP(ZKUay2W3y4<3T) z;Csbi5f7$<>)?AO-6L*U2G=0=@V%36X$IRM_6WSwZg~b@An1^M`CkbR#DejVd<9>B z^6P{1#%`fL8AGvkImQpwF#l>6sTIA-AosP*CrzH6E;)@z^Qz5~LZNz^(N(FWn73iG zC8$slp~9l(be3uU>2JN=m;G}-x~ihfqhJjZtA@8Rm2HCO^A-_d*r}X5K4+3tqUbq0 z*k6sejFk2_Q?fbRgsb5kY^pK^U5%z|_#?u8s}ZP`m;SfA>}7Sxc>jKP$aS(_lS^@| z+1ch43Kw}rEnxQ#4n61B{?xN2&1SVBxN_U#=Z@wCF zmNGU4u=|E$*liCLkuM#(L)SRUWn+~pH^AeF7&B-Zxb-AO9H?UVj^Mhx;#ajPlQ-l` zl?t}?8L5vzR9sMVED1Xf$w|v1rJpezCttkV{- zSjA$_RPRxf^>qIEtxcp+bIH)@u%)%)hD&jre$C=saIlr@q!OmNJzIuJec21k9zA)> z@geCk0GFzsu#mBBfs9diN^WPRbEhK)rjWjct6yLPM$^ZArrdI-Y}<8aSjGK^joT(U z+ju0R#yhC9YbSA17~2E| z3i(b$LbK@!X;$?L_OqS>iVt3g^Lfcd`S4HfYSrWt#EfkM(^b)?{i6ahSMd#PMJg-a zk});$7?!1k(gT)RMFmCQw3+rSr>@YLDx}d;q+!rUQ9<+8MQm7NUo)y{DkM*HRtcbU_D)JB_g9^)rD$9xLTc~!^*~^0e_8QLmn#HI0Nu!R*Z`PJZLoXJiG(BzWO=&skD;z{L zri{O{6*IFZ6^`X6c3IA4FJ`lU9Y-u!6l3_=^7PIgu=aSuxqi&gMxMC43|MdHYMa@A zhPIk^*fSD(ruTIx2mj!NQS7;7ID7AK_t@BN)ZO{~&cN&aT^pb?xI zpg?Qf4D^H$T>^%(6 zAe%F&*a*06xB_&f*quLnl+z)0>4*_KU81{Ww1Gr%J>}?KwfGSTLqOUvu`a5TyNGc; zZRwpFLr`Co#;1_+om|3DpD^w>Du`70SPd_O84i-jWiz?P&|x%*@)dP8cV_ z^DAW~wi2r&0UpE`!DNj93#BFkL#tjSN+*WQ&|cXV7vPcy9@g+sKcR91h={CPuB_^= z<}T}6+F8kYt+hV?`u_gzme`dorT6Cj{Jwed+I!iZp7pZZJsvrdG@r}&BylBe_v60%1AnK*cf>??AxhU_bJ(1z?QcJP9{ z3(k-J#b3e)O8-gm%P+J~{-TceH48Kh@YcfQ>RT=G9#UU>^A+M4Z3H&W5@pek!hclu1nPYj^{;;aF^?VTLiA z*po2HWGY0~V;G@~n<76o@OLD)h!R`#Y?`X6n)o#fx;5};99>Yw?J9?;<5ftGR7z_b z=K!~EwQ1}~{7}`~480Z?b5EI}su}(?^b;K;)0A2rUp zFP>xKZ0Hwz8Db%xC&vyWMYxl4uG>78B?1AOPFK4zOhne0+B7g+5f8-_1yLPMEKomd zT4QMAU>k68uIFOPIB6+4miVE|RONjMSNbIxCa0e~s~g(;JBtI1&g|D~G;$svY7VUv z29DzX=!z>;T3@-+!N*8m;Ry5LM5wbl0)YVVHSsOy8BvTn=rY<$eNI&Ui7 zKbX;KJ2-Tq%$On$6GOv!0aO--Gv^#CsHpDFd-3v;Pdku7t4ULr3lP$n-+ zAY2eANP>-OKT0t=*5hjkAmc|;LHxT*|04@CaVshRDh%!dr7;jAW|pzS3smrbf@MV zcey80H|QrJcur`i?A+x?zxEg=ua|!grBL_tq%elu1K`qE2qupei7U)gd~UGpAYv!n zBe4LnOcW_wC`;kV^qVG9wrG}|Gs;tW0j*%S@;ojdSLu=U^REMmp$8|8)NI5BMGiO8L|D!^BiBaYu`gNUwk)m4y+4wM0ok0ueLfP$ zh-|IkJpx(dqUVN%=Z|nN7nodECoK86W3!#lZE4=4 zQ!(Rv4K}#YiL-5KC{n&NQwjPv54NPliL)JQanip1f4qyZO+`=8b!c=-`)TJJ z5yo|Tdanb6=>?+8Fcx6y1m^x`UVaSOJ(w84I3(|WfG9UDTFnY_D;QfvZZ$VZPHB);xKPgo8Hy#VFsfyZ$i_z%hfG) z_kBLS^OW|*D4Qlv~N8@X=oF#)2|ERq4SD*n#87VV2AUPdZK)uHLZ*9 zdAU?_yakA&(yvpgGqr>8GCb6GCr~!J@^}1vEFYSSd3)7p0OTW@9h(b59>o#gjvV{? z>)!1L8uu`EyZ*(AJF^!^^U9Ke(o&D2H@GDXrcFre|HlyO3ZBa#Z5^mvbWKW^VMp-p&)KgwiKjDH83i2fI7QZz9zHZZg{`R_DnqLkbq zKXS<2FGYTNWp5(hLqJy6S_aa{Onqk3!N?u)Fveo%dK~FjE80(hFY=>5;RF74A|EVn zvpi1MGJ1QtdcUxZ_5>#eYeRTKo2eda9=S0Xho@4kLa|jWclh5Xm9E1J)N8lP`&+yw z4_Z@w4CG|1piw8ZCeffvFb+W03MKFsI3$jUP1vcw^E(p(sbecJl&c2dE(hNn zF4&*p{G*Bo;#2f40Ka~n0sgxx693C8{uh_>AIR4waYA;89zJwTJ`*rR@!1Eg1&z>F zJR3f$e3=qaL=ao%cPO$^(Xznf3j6IZZe+tlY4Z)(g|jy^-;cJ#m$)^yU+lp?V68ao z4*F>V4DhGXFWt{E@Nm$fR4bT45z^M?Cf8u0wjgon$qmw@N=kEmrVhM9GX-o_|VjTPzneiVen{$!!in1W~XO zU`;Y{C^gg;A2-uDXBm?W#S)7pq9z%N=Gqa~4v4PXv@2F!klS%~4r>J_W<1Bx`_DzK zUvrRshF0l@;t(EDqHQzDl>vhOO7;xpbx?IcZYy)wex=f{yhYLFN|&pw1@M51`JpS3 zuogI9Zk{QAHmM-dT}DO88}4>c4QK_u!6JeMJ>8_ea)j_T_cgh#A@my5Kev^Yc7{@2 z*}c%PP>A%ONFWc#y#n{rrkVBYgZCMD4?J*ya-ak7pGLqo@MDw2B8)|d90EHesuRj0 zObuHcLOZ0gi)EA1_7|QYQft-rQ)db&M*Ys1a#}p(Fh*w5j3`IRpv>qBX zMPth{)NJ`GUq!>i(et?-!N6;#%xPfaeX3yU{UBqXeLaqni#^-cUd%Bm8NB8B==j+2 zy6ND9h5LGYL;J-JkvBmPY>J)>7-gJvY=f9pEN~dlEK!?aozN|`NZ29kC?x8k7W%U9 zca2_FPUB2S{8x*rKlg-9)7uMsGPNG&O!x?c!Pg20P-V1!@`VPC&rZmQB! zl_aC(;yjhT$Wo+fZDR>YjCk3L7iuuk2Zq<3|2VTw$tZHpp_RuVbK;ZHJvy+=CU|L!C&$7 z`_F6hs%4uZ533!Uzz^n(LCO@@a!Q|4tE zqZc4BZdivV1U401)FMxvEdfHC&~&A$w^dpWE?jCFt{p~0%x_7A`7Qr^u#MY>H!p2? zj4U3&mtH)a<>olMMpNU!Lduzed2r?+sB>lqddk)uk&ZTA{$^n@C^w~1u(#f+KG+sI z>a5^017WA{{&*6HP-8byxjXXF*jaX*d9O4@TTubh5_H+2cjkr>3lsYqBaDElG0aeT zjB?qr=5&q?v{GFfC9kO%U8&q09OLH#Zez9qGDKS zb&wykl>3D@Mg^*OcWt1l*Wqs^zfkI|xzwve-|Afjq%H!I8);5h)y0Md)3~55udH57-PEx882_t$}PV+XljZ9}Ziu&b=M-`MXoq z!QM_i$(97NI`({Ri|qG2u1~|sV9C`3M=26fNk6=5F9H0%1$zIU*}jH1uj~j&XaU|K z{pP`0e4g7K#Bp$x9zXBJq0%^A=PUEQ6s<4D8wy%qr1$7Z9YI`&JNBCkTAqmS(1;x& znGSbAbXVBi-{ur***o{xF$-KK?%7-RDWlXe4qPYhQ;q0_2}1_|EY1FeC~*huuBb|r zPg?N1g}nSrugcwe|4k@m%Cv<(K!f%`Ka%$TKCb8lUqH9~kFHrXg4N2Rhr&FjeV5I1 z>JN?}-7^?x+IJ2i-7^|z-Fv4<-Ltdv?yIxp?peBpj^i_EuN=Jsr;RxZubjPnr;#~~ zJIl@|v}-7_BNO5a)Bx(8lPwZGXtx@UFe>LTq<@I)=3M|^^5YwuWJSYyA3G_C4K z`7jQ}sIl>OLVdR2|E@l4;FWjIfp6WWy9M|02fD29ukPKMFV3yK;H$>+;I>13`1$LC zf(1f*qCbY9k3;9eV~|6?lYklWb)K@_77qrKw`?lyVl<2A8BBq`Nuw}zXq+|^3%pOh5UE>Aol+{0VQmmf1Hm7*8g$x<)~RX zYpbAq%^I6t8#_LjXTjzW+mK!mB}ptI&=eDkh-aqCW-=!fkU1@JvDpYH z#4Cb8kuQUxm{UnANXZD06|Ahj=ZA|ZR|dXne)Z$klJG5`7}2O-`<%&=K1fpXUGtt@ zb@l!I<21`#m$u8{1lzyz8We261}wV09uXd_gXr3Iz`q=#Kx;(J%yxxt6vadBjCQDv zX&Y@+hxJjv7qjI6cFFsDbj-dC3vY}}eS5_3#`Pd++5s*Ki2B;42nB5C6`6O2rO5*? z>O*6D=XP zWDAk4H%6SpABS3=ftDh~SP6F811dli2bDPTg_=s-IP(UY0$P9t8u?Dus1XIMvAV72w`Be9Rf<7xwh!!TjP~jaM}l`Y}9A;P)_U2 z`hr4>uz3y5o;xf{{#zXtqEwx@f_iIDlj4Un6kLA}8SB7V z0`)+XebJ(Xv+BHJTxIOTIA!WslS@QkW}q4W%pNqxlOJ;_^!pv$j=6;5AtgI=`Q&rf z*ttM$Fp2SJ9s|U3*#kRrOeK+Ivk)Ezo{G_E=U<`U=x);cl~+0SPTYtvRh%E5kc?T#Md}AaSefyhqca_mo+n*@DG)F<}q(`c#eFIjEx@PlsCfxyh6R+U5 zN1Hb$SN%54b!M}R`G{&kImC-uBZ(Vmv?f^`TnIGm`nk>tT!~@&XG2dY1_@r|CC$2U834;*53hK zVo6{=doPA|i3O#&x3E#AZdBGPfUSFd zq8$rK$E@D%yb9=>&}(c~uQV5}W&`+!E>Km^_2QUrtazNfhqcH6W%s9mrLI^AVhfVNXfJyZ- z@+J3Daw((<2m~gB=yx80Fxk^3A314AdM@AFWOH)>*+$y~+Mm{Ca>RN%nbg z$SOa%1Y6nupYEjw7O4g;K4O3-S(>NK*@7N`C^pX&(^gL5tYzj&nNf)8el=DFRfXT= z+se^6LM3YqAs`USh%bYz7r>I;u9cpf*)$&2buW^1#*Mlu6Pfp`hMq?a_nbY8#Hcdv ze`u~+(|MA!_=xEQx{*>5R;m__Fojqqz|SM15wAueqYFcttMUuryzHTzIctv|VRxgt zE*8AtKOFE{U>Cez5w;_a9x;7U-438(_W`d*sEi#laQp2NR<_#pkdNZi!@z>U;37Re z7a=?4tD8zaF=onxB-Qd;Wu*(>ADxwLC877pMO>zZtJ~mx1=%Z-AqI%#lfa&!pN^6v zIwu5a+T=$_DdCQxwb`u%S=Hl9l0!t4B?C%NC8%dXwTb=cGX3Rs`xCAEtAN|B0XrW6 zEt>%Ri2L)T`$xNf>9OwH0lQBDKOTcDn*i;S{xIeFZlL|C!1K<_W&pw%*@fG{){|55 zK;=aIJQnZsb^w*-$1K)R#x<4;()U2^8;w{68D|()cA0~Vx%^6iQ?dO7q~-wBcAmIY zz@_u^0yKOrm>nqQEl$24+^&nPGKCy6@*}mwpo3xZl${E+p7rXFg&OvJprsOU2oyFX z=WG&5%s3L?HCHYkRY@3HI=E$HzON9}`hsygN74-M+_Z{wY%8>Sl2nTcz|%FBY$Avu z)S?O$hUJKu-iFY=4PaFvu~@>`S;OoEtVU5N8}v4gu9RF^w1uvaG}{j+y+d(}ocaFV zVR8J8dHy};#*CU@Qha9`M?yQ|TGC^Tc|4It^-)Il5l6^FNsne!G_S;FTrr?zLM$&u z7ZmJ(r=WwqGJP0A+M^cyI4%)O_EBfzQfq!w3z&|>5{gPzqb|fJ5m{f^6Ox{sVTKO4 zB!_?&ZAU_>WuWh4L-K-1&5cC+Quyo%DUNC8)_SBfHE$PxEj(dMTYvqv68`2~=o8q4 zn-l!bwSH%d_@XN=0E-1tjOb0Dv;uc_0V5mnN@AdQ(PFH@*6kWQXd=7qRdphJVdqX< z%SBj2bOgF{bNq%&j_@lK{Di{2vs(`T&KLMht9JdwOZJUgOf603j`dDv1;b_~o3uux zv>v%#-!5-R$sZt1N(mH*a)jDQWWl5mhyo%EP$AWzbE|9WsEB=cm8lAf_{|-Ay1ind z1>7|Q)mDRf(u%3PiE7kf1EB$pQrhmCIXH*hY5^HnM2javq%aTI%z`8WrBF>AiLVhn zV-^1XPl2!uy9Avs#IIjmsQ(V9{p%(jvAm<5y@{i<$A32I)GVBkP2hb=*QRAjkMV)U z{ei{po3J*31ppQBsUfVT!3Dts$)y{IOb?AoXJ=1udr@w*5Kx|)R1H#~Q&Y#xsy;!! z0O#(T@W{K&=BT@-eAjbxeLp-p_k8!RrF}c@cH(}$--blnupbDak*a4WGejscUJqGd znA!J*Hxc5-6C4U)AkH?p=BBBvma1o&BA663wBsYmM2|p2=?qs#hw0x!IZO{2|M6xK z5qoNFiZ?LGoxnBinyGU*bx<8wZXh<)7&ZdLJj|@A8Z9;*bD84C;2`ElN03Kr zoo+A6{6B=fWl*F4^7c7{ySohT4#6D;cXt@v-F*gk*Wm6jxWnKuxVvj`cX>GH>~8Jz z?EiN*FH)&g?#f-MRCj;7`}$lHg;wMZ$8-!Y_LXlZ%^whwUgWLBKh{f4heYbtRS~(L zGqHFIc~&53z`?9;4fWXa!8ow4u2Pn-7}w{re8HaI29~5*T@>I-;dGSbgx*T+tR&E# zRe=0?^0+2tdJV1;_&LD&Vw!cgkE6=A+z=PKBtSG(=2MV!Z!Np)1X)68N^zrS=rIcR z6<6o1Gyrik2{|^c)dE#P(a{K)xZ=^?{eq?Q5Py?qhvTIyRMedjDW7r~Wt*O2IFJHq z(-KbBE)CJRmraQ|r41k+QZAT=rL!4Fx6Tk$?yVmeR5of1_mE#c?r07LxrE+A(Jh9nr^JS9RtLmzP za0xl+N9Bu`w{Uxbb}0Tcb9?DArGvo)-3L*Q!S=?3d=0tjQW-wI(o3^0O+FXLGc8`QRL$Ak>KPU^&?Yq$8-?2|O zsR30o*J^Hw+1w$G>S=@AwSu(Vb;j#toFf5InE~l|z6iFIvMX68b!`2Tx&|zRqI4E} zYxuV0FomUZ+{HvK^`}lF+x#{R!Ke{ccJ&w<6&)w1vc1!_{Nuxk%3Imdv5L>9bTvST z`WVf#2q+&JBNwfz1LYD*}0P9HV`bBpb5{>Vtwq;x? zvQZ?){gHK;3+H{p;+J#jGdD7R$oJeGf*Lbwt0n4aG*rZ;Bx~rNWi{!LsyEun7jn

z!D1Jl9mXj*54L*|E>|A@An@ z9HNuFkOQ7gT%N6_4=c!Gr)8(k^t-<@c#64BJ334Go=Cl@Gy}vW^xUKLX3kZ8TZ8yE$kExORg7-95&%6A|n?$lc7Ue zI2(Grm7ZdSdX={0SKIYSc-v`du$hR)$oZ9(w)v_m?PhiB_2Xxa_s!OeaRK`;Z|o22 zXS|1>z!dNER`;V_1HnfWRJmlT_I@X1*y&R=2D|BFl2FZ_{oQpV3jbBUe7(w@HLF-I zVV_Y7o;9QBP!|_;s))pveUoOc0a2ye1q%7QDdy?1@K~J%M^`E;y-b{M(+pmGMxB?= zCr}ev2YKGVghc;{su>w~!9>JCOEF<99Fm`+qN0vN=f@_p=^CN;P2Pr$@2qBKsu53M zZEo)oocl8#P8e?=I(IYBpMlx6#3e@R?zA&H)`psen>Dutb*DOA^UE{dOvyTfF&^&0 zExh_Rw08vbA*ytr0hQe)>ZeNUV|j4O{v3Pi3@*?O`qW z*R=fP-Td3S%GH`xw9zBloro&vW+WyF&{L502$fme&qI<$<5?e4XZELE{_jQni(`#HAiyk>T5wDg02yUuWObCwgN0?$0%HeurA8y*ozeGCrm z-AQG7R$Qp|7W|i6VSS9<0+I{djE&R|qf97rWNE-U^X5<@8 zy!80>80Zm@DCpIn)1R36!p8X;+|D=9=K)MK=kiR!&vp*)_Bx`y;#=(aGZLBE(LXYp z`5K+r?RF~F(2BUjzJPO))4Rb^wdIzSAqg73vGkoQ+MDwx9MlrE*hS`}jWQk5(`F??Sd2s9AK> z-Q%0+w_-27A-R@iRW~W2z5I>%B6?jbrTzs1j;HrK4j^uBy;^Y<*B z#kRPI2J=Js{b#d9fB-H8Ebm*CpDHlyJARz}hq8f5C$R)`gOsA>d||_c^tp(^oRC2k z%bY2*zyFj4XtiYmruk(7Qjx8lHjCoR*>EK+WOQrm_X$}E%J|V>=lkbgREum~Q+bU~ zmP?s!;C9kd?QE%bc|`ustO%Q=Y4)HkaDT`jj^)KXP z#v$@^0sIeGwM2Dz+R4tsBNm>;nLND;?ZKRga#QF;0A+y;uoQKKZL`fTa2i+bPNja1 zNLK5thsAQ`rW^*NA_YjU=QJgapVTs~I-Eaz{ z?#5p1m>nF&KBkxuBhkv(Cb8+6mCmW53ARAhN+RlU9{TQ72!ia&>g7$$+lR^_ZBHz` zPQ!xPl7(C@%cO9xpAwXT_%FSNWH|d^lq)t;Fa(LozLma=8Ee}y#ISr^coE(xiGQX+ zJF4w?4OJJl#r=sm$+@6VMk=ZA6`#hY)##G!klWppmymVoB9&*qzd`lO|BRX+XMQ6{xZX{G7#D02wD{}EF1oMQI zT3z)|p_#Z4=4$XrpmUilw4)l@d|tRyW(BW0^mL{iiV|h2NHg^UNqUWP!uJ+t{U#hL zp0p%FDCe?<*p9?S;R{*9=>ygKrwsIhSy_Q|IY%o<{KRE!J89$W&Ey|vAZa5Tjx?L~ z={VfyVhPSG=2ie(lpXSb4wVVwQhgXVk4{6@WvrE3)T!cRJ{xbeK3(}F9)rUgdkxzU zv5xE}MS~V}oq!A0;49CZUM_-Wj?w&Cm0Li}QqXNmm(UNf;mI!ki7yb35T#2?*x~A1 zbxO4pr7-zKQ#+zqR|sbGsD~ye5|eHH5^ax~uL>nYN3o1o;fw-BL#WH-s+^Eu;;~GM zMCYJY7-LCg!8YGcrD;n&V%Gllesi8qDf{2RR7d`u2|XNLO5`ilKnLAwlE(-=O2TtiqQ}E8+l}TDq!%~rWZ*QCN8cuy+PCMBO3*_a z;mWQ2EpHT!J0h~Ejh;>GRj%Y?=A|u-4jN?CML=$$JCh039>u2ff&$AC^cX3gq!e-S>UQ3l_RZ zBUSCsl0Dh1t{-3P_iVDd3TsgKmL(EWmK}YIeg76f$|+N3E|KM(M_3?CVX}_l{t;_O z?Z@WRID z;rx_(k?zeh`U&_LRz?$ zVPpwBc6>*h6QGbbSvv4bk@}N-!!XJ`p$S;9@QZe+XF56=vAcHj?J>p~v^snAsL1tP z?xn}i109X|nk=eJ)%E#akD8K+qKPUgm@lDZAi0?eWG?oJ`Vk7$j&!{C1C3T^2bf~y zI#OhiFP2#sOW_ln>gziB4D6W*;?}L(v1`Xq@puI_$yzDITz?3Zu>l_ z_Tg<#YkQJ77@bc{`NX%%ldtO$2$*dE$2T{aWLXY8&&;q?ef6g=duBHR9dL_jX#*B| z$FRhayi({Vr8}InBp|vQxon6;g1k0?j2O0EhRdmkeMRe!j0<-X)53{zQ)>@0)p7>M zsZbAzAZ*LE9=H1I#AQ2=gXPg0c$rUp>bF2>I!>a~NW7|bU0b^q4se%t2OV_=v#eHv zs&%uBTrXbI1M#t?QPBAD@Ph;%!XwJA;zq+_;dh+y-Lbv{dzY7Iu(a%*B&wl8Q`H)J z+cVoPw%=@IR@cecPLFMEtRjtb60Dicmin=X)#~Y4m|;h#2F=q5Q12Um%&;~J{c5I+ zyMxlai&<|_8CJU>*c-zp#t-ndHpEXn$680cR3mSzB13#_R&ZCDuV_8$ zPlM|t%slfZe6+`}Sy|3ekRU2ik2OjYNz&YYue|oAlL_7R6U9XbRnB22iKZkIc}wp+ zh~JR>oir~t3-Uz;N(Y=%NO8`}JIzu*t;b%2H}LA8OL!8ObwKZTO6@}{ z4bEfk8Em!iBH#Gu9^;+&+eO^L zwv0>Dr$zC+HwU-sndC(Qz=DXIC!*o2)46%2`_F5%Es-6fTPBidMzMERioJ&>5nU;f zHIPVkXdHgrCK5^P^zIh^?zqU>27gj_C?BZfB41GRiR#jHkBH&!^IKRB)x2NIhzTE@ zZ{N`QE${R~wGR}{mFIaQpb!!c)JRPUF{6~D-C1G(50juXk-mk7b2omfk9Uy=P=8nqd7KzNr>O^MI| zIWuaf2Ob=ARl&U?=u7fCHuj#OUH(r#5sh4PdPPj3F>P}c&FF~$+B`58>AdVl#a#x~ zE)mmTvgFOB%5jGY#7K}dlM}X3#B7**HCQHK#CXl#qg3YR3qnu%N`~3Z%q3sqLoYDW zc5!n5>QFwY47>rFI&xw%tMZtu2O=BlaIl#DIOQ(oH{{SSWU?HlrGc7Xm+8th8G27&>?y5HFbK7U2s%Eu0qt0$zT-?p5lmu0Ss&WK9@Z|fahs~uH9 zVgwW|Ua3WssviU`XW(B3fXJG3LBFj_VM|sFn){TpV@dwC)0$t_r`176k!iuhloB|A z-B*C<=i9k@Znsu$@|P>D^gpljr@!bY$xN6FmgUDNhP@-RX!gXfXu~9g&mUB&zZIZe zaV19zPI+8G0N%3R4M#45d^S{_JzHXx<5%jDryvGuY_Jg`@qZY-0c?3Ohk)aM9oGgj z4#fLs_s}MP7-sk7za}5RaFl2qsmYMo1JtQ++=|;cuPDt9*`G`1nJmsq28td^MgLg8 zt8kje75yDCnl#)mz7SyzOqAxzOecJ?z*?I+%`bSdl(!U|znfkA3TzgP-jz_Le3vjD zDA{`CR*Phse&*>k1a+;gyz8Z$7g@HYj}koAJt@Xc2Ke!qm1t$gYga~LBB!U%mC0f$ zHxh`r)`bE092&Z$>?y|K>NRx4cj9;ivnvXt?mTEb$>D!_jxuFDodht4AzhLxOFZk8KyS@O52`X32r@NAA+8!a zZ4z^Zbgl)(+$uWo4UHnJR{+iG!jZbH;*t5d52Q|OOMF|x4S9~6oI+r!Zs@Jxt$s&E zn0r>5o95_j+R>Dg_vdU!r9)8 zTin4CXyEG{5GU+<>sr?7@AzJVxnb)>vEel@Ks{S@cK_+Y>2Ior&|0#^Q=C9uzfIE;C(S)lCn*fCWIZYg~zo8 z0Zw$Wcs;8xz+LDr3r>mpBH+251?XL>^p4OeQ2aq5Cc(GqsXwh?3qpSnJAMhDUo?Lj zPv^Q>O|7^5qp!hUzl~fn-xYFPdzrlnJTvK5iu!HwYI7)Xd_?WGfG`ErvsAy~JL>#m z#WW-NgqA#-IzqQB>C@mIa3HZxGSYS*_bpLdHdbR4+V?Ve6S#I)b;$X;5@#k9!&V#1 zDSD%&y2F(*$UTua665@|iF@;rG~r}j(uQJvH){#1cPcoh*?pNVfZ+)IArQ(`a$ZNq zNmNy#J;MOY5B|6s)=m5_lBiPocaQJOL`w(Pw?fnyU)A$R3N`L;V2Ghpb;~ODJp0|H zUGf$71(+u(8KY1|w&Olh+*!_B*yp8R!zD$+uBBo$ew)-N|Jr4b6EY#b4jM&!EXG{Y z8`@28j?K6F*<$5#Mcl|3wB<{%nKjLdik_M6 zTG~F3wBpPL+?E%q1E0=mkx;dO+@?T!VUWT5DASMUfmCzIlOQ3T^;){&0NBrkHT5HE zmn~}7nbz4y*qG2@hJ0udFz@*Dz&I=t(4Pksr?O<^k#ko0elta({Z+3D)Sw2Q;_uur zxb_pZ{!C|EgTkoiYAB^1w$A_VJhz7+Cpkm>b00A`K*kmUq|JRW6=IfFjVr9oVYK*h;p7Kou^P>N z=AxYgmT6k&X|2F%=My611snYq+ck<5*P)DtNB$+g?3VpY)5b8ql{za5?y2!xoE9=G zzR&?6ZaM5kB<{enQ*(G$*eVRiD!vUjiSMzx>Yb2rTN*Ob?gzW8{7_{Fswa$L7u^vD zGhTdiDr1UjQz&DrMUxCBQ?hF61;fY?PSf;M!Yf*)s+@78-rH?w2>eZd40voIYNiMz zu?K8xqs&NwUdZbEK0u^BV9;{2#BwE>*b|ff+{#K+FSH5MB(ndvEH;En7rm{ZwR^#h z1559*Pi14ysI+lGZ-?GQps0nnQfD)1aLUTqir?63-|rj=X8Z1thMl#U>S2a6NJ($h z8T}9d!Jv_eo#o~v!5a~Fmn6D%>B5TPepL~^kbWF-k zJ@=+mG-Hphz9JiPzCOrtfar%UDmipH?H>NHf68t(fh_KTKBi!Nlb8 z|1z*RMSs|+sE-=kN~Nt37AW^saJa=foz9m{$oNcXap~td*pVdflsf*D@0aL$a6M~q zFO*zq-YFM+6#L^Vx7-sOA%(Ai9wa~?)GeA2`sXF9KON#R)!cINZG?!x03%4Mmf+8D z#5IH#I&O;D__@cAF{QOO9xa?BF~4ycC6{3-uVIL-ZQ>XAgybQd>KL4?k@o0`OO{A$ z#((KTm{c)1c_EQ|=N5c^VqfU_SEf~DW<0njW!&uN8;3&rNP8|idx+d|1ZR`K#ncak zHo*5}b@o0vNu5FyX!SH#HWQS*-=9QA!Blkf!gmP$UF7H3wGZzQHVewIyw*I;s#m7hb@QY45X z$Us+1hh!%xeasQ9lUHpU`gMt7EGlU-#STL);qJ=$EngTZ%hFZh=dJU*=A8!O%b+T4}o9m(Bo zo~BhTu66CmgSwzB=ff<6rCp|af(~H7zoBj88PWMnpbhiukgZ?|#lvg@zsrk$o9GNI zt-rbQ`;gQVq101*!nHfq{sqfTc<2XglESOmah@xT29KjDsJH4*F3)lCz#O=jA5Snx z9L8wahyD1_v_iOjSU`2}rb6l7$Jc)?BDM|nvD@N&;tYiTGq?EMNBopmV5qc9e(oOr zKM#!0SN2ZkOjhfOjUdf03`4{&|I)`5&(MZfav{{yFaW-<_5JGyF(Sk#fOM z!w9jD&r2*u6OsHQ6c^OvLaB`*JU~O48;%+uME!kAx@|_awA!w`B3%_Gzm#iohi?*` z)&&EDKv-A__qN4hyEhmfn^CuA>QfPoO?Z7Oy#sRY((v8%zwmzO$~)c?Y=1zTrhlGR zz@A-?@_wC@e0VO$bb%a=v#R2!cnCXI!^iY?IZ*3%MtB!z1t+_=seo z-bY1brmW=ESk|U54qfAshgC&Z@h9?8Zp`FpSg4{r!L~v@lF7Z8U$78HhsUvTw&{Zt zWnKwurZB24Jv&MhQqT2D7kLuzP-{k5clsgx1%qcwc|8j0)iSL4x#|9UIVJ`7G zhc{5{qqPmkC?_JZxN1eHCiz7J(vBWwmCr43g`vpsf)eR>Mv%I=Sx-Gc=hVR}#k^Fh zoMl)tXXB=2aJ6|PXmXc>42~Z%c0NapLx|{7-}@=3@A(cmTwA_t0ercX%-Kf!aaP(A z2dQy?U;6cc;CShtOiW5Kz>*M$XT48@VmHP8@*vFsRwYhDv}L^urTE1?qXyLP`sL~T z)s@t?lGboD#ZT5Q@Di&FWI)4Um*JaC3o8;9Z5@E2`>yo1j;nH_-Lc^sYo4&ixa@>* zk=WdXX7A%SNWvw|amw~|L^m$fo+4I%z2UN z<&d1e7h$!@7OA)C7FAf5NyCHShzQjzab3$@5E(QqA$PUgX9xf^z61$}x5~=52K3ILIb62OLzTr|^;&SQnjAUM61tB3qwugE{W1QIGnQ#w6>;ee_Ns*d5!Vc^QR!5qVzJE zWotEq0~f&5xW$KX1xsC^U1?R>Jcc5SpxKzn)jh&E;oNG|f>05g!fW7-MUPD*!RJ_h zr$Vn2|5m^~pa@PJs}X{~I$;Zbj2#&#&=B>^oo>&dy>gwCgk#^naU>ltf%NEt$Vo3a zQl>rd4L&s5(9Rzi6yb#iin&m<;CvJ-Va*kPpVp4H?W4uNV;>Y|7n{GlD%V(k-MNdiW!|hbs_rP&)9=IN^L1DBsABhDM$<{`_|DqNww$nDXA&p&f08ZFTS3H4SYK z4m9sVH+g##xk$gDse3m>;q)5xp`t1~m6Q5Nn|dg|<9^JV(x9}=uk@Eb(rA6gt?v3G z*8<>`O5CI2hX#taC5p;sPCCYT~NpsJm-J_xC znctvM{rkKwVqd~Et?I+xs5Bbaqq=Nda~bAsduCbpu98PoE;+kTdWOvybD|7s&A7r+ zEu-b8C7)n6EDzli)B?-8W>7M6+_$yT;MG*Y_>0HB+u`qO{BouLE(&} z=GFeTqY3!6$UB7HWe0PG>C@!ao&NIN@bW9zPCZq9n|jP!g`&4yk$lPrYHm*2#o@fB4qJwaK_!xJlRg zmQ%K1L6wxlpE`W|^`@QzVG1g-x|0b=K;13Qw(d9cUe7Z-fAR)4h4RP0^c_`&rL{Ln=@JkX$dU*upb`QCd0B#V84P zE34n2(ESbmU%CFF8C^m5lN$$)`QLUF82%x1E0~!%o4Wkp(z}1tC;pSRi`4!t!g_Cd z66*~S3A!$jLytf*RDo?Ap#7mk{3B4&>S>;o7QR&qo3q^|k$En4LGX`;`Kc%okNins z6pyHs1mRr|F5wWg!JDWL=Hzn!7oA?NS;NQk)X482Q4(vftOpBMZGX;3~+yX}W{hWVQq}wT=nDL4YTaSdd%W0g>ul)Y^xa z$k=pF8WJ)44F4X>WvyhcWG%#n5FHGyL~f=490V7YJ$L-R23n34C7>0;!uBZ54r8kp zFxMQ5ZHN0WYwNzZztlqHaAb|_iT$#mfwi-hW;+#LPue1!L8x+&5;3=#X{ZZlXRD%w z)0QVsuo50iV5x@X=TAFMFG*8kV<0EUnL}`_O4C7IsBFtmG~YYgD!?+osE(}jx)u{t zZi=EC<#ipR^s=aDWY0?33YRPNqC9mBkVx-{D1$8brr<(5aWrenVV2y_7ou%Vp*uKD%tIdJ;#{q+) zggUf(5f3i57FQPu9F}X)nV|1d)9F-eK=C03 zz;>!4q1C#12ZmEIdsg6CiF%XE&ZJBJgjCPc#DIRlx(wX9k!kF!k{5o#Epp5BFSetA zpj1mYgc{<022r;#{K0RS-Zqr-1m>^?Ma!OE*?NE`+N;N!ODTn|$O|DJOrFmU^45Dw z3i&M>lq81a7R0m7ukT{S;$U`orWAf0x@1-;cQ|zg&$LQ8(-NJ42^Ce?>`QQn?$8JI zVGWUW1?fkcR|dPkWGMQ6LE=R={9K0qvEKbMZs}|z6aXGsPV;$kG^#iaho4zZ#WYKcFDaGgly(pAL0_zYzt~JyQ znWBFZ7glJ%;^c}r(C{Qlwgl~JU{KVFKG`Pras*6HVJw#qaxTrdZv_T(wB=XM8q8l! ztcF#gY$SSELXYdjjQdD?)Z(ov&^S1>*D+Ow zyA1|QrcTxEbL~x{_Jdzf$*9C1RbouloNhr-OdZp2iuV4p>dd<3pn5~y&Rv(3jhz|Z z;3>YyeZz--VIk>E#dK@wy}vZe>@`5w7f8Z$QO-e~+0`Q3M>3c5CnhM95(E`~$Z}~X z`u&yq2xitw{N^^}PexE7C3sf&A^1VT{7ts#{om><;(j}; z>QD8RM()=1Ovjz~OpvF#f~^7)HT>+P;WmuKh{7 z?4XeyG?irr?6n%>wPLtm7uzxn7glRv3LY7z{Sgmt*b2CrK;}~5}JItY+O>!IKuxjCx>dhQ+P9M4cC4%{e zQy7+&_jm_8y92L-Pq!w8N5?$_Q7k*^Qi4nQp20JqXncUa#@f2i`q(hVTIDHUXAn6g zqDp2uz2P*2A+6YiAtwU^wGeF^m{*cyrY5v4w#YJDbU^zr!A?p9k_)Q^RcqGwf_%g? zqjYu0uj8zC6=^+$xb?K8VdX86+_(>_YZ9_z1UIy39>m7N1EPG&SDK|cKjMW2!&(12 z^U3(6qbZm3x;~W|+t^*pD$V9)E!0I~{s@`)dxj=w$+*Z0m42< $@vz03z8Z`qI{ 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

=%>>2|D73@_9Fx}<*!s;{SFX;r+XReUC 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 z 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

qm4Wk) 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 z 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�!!ybUdR4n8i&a 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≻pfc-p+kq>A@&EZJ32ii;nzX4TDQYlf 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
gy>fqEPDaO`QF}o` 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%0AO0^D-A)i$ldleqyk}TE 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 z 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

tyv*0yP}nk-pv4zbBt@DbR|3V7ZQ73LXi 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 kF-h#lNtCW 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 literal 0 HcmV?d00001 From 7d9a9ef13d730777259857070993f744d30ca19c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 14 May 2021 12:37:13 +0100 Subject: [PATCH 167/675] Reviewed test configs and main.nf for new libs --- conf/local.config | 2 +- conf/test.config | 49 ++++++++++++--------- conf/test_full.config | 17 ------- conf/test_hg38_chr7.config | 28 ++++++------ main.nf | 39 +++++++++++++---- nextflow.config | 90 +++++++++++++++++++++++++------------- 6 files changed, 134 insertions(+), 91 deletions(-) delete mode 100644 conf/test_full.config diff --git a/conf/local.config b/conf/local.config index 30c9232e..2b457324 100644 --- a/conf/local.config +++ b/conf/local.config @@ -1,11 +1,11 @@ /* * --------------------------------------------------- * Nextflow config file for running tests on a laptop + * or other local device * --------------------------------------------------- */ params { max_cpus = 4 max_memory = 8.GB - max_time = 24.h } diff --git a/conf/test.config b/conf/test.config index e3b40534..3931e315 100644 --- a/conf/test.config +++ b/conf/test.config @@ -1,26 +1,33 @@ /* - * ------------------------------------------------- - * Nextflow config file for running tests - * ------------------------------------------------- - * Defines bundled input files and everything required - * to run a fast and simple test. Use as follows: - * nextflow run nf-core/cutandrun -profile test, - */ +======================================================================================== + Nextflow config file for running minimal tests +======================================================================================== + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/cutandrun -profile test, + +---------------------------------------------------------------------------------------- +*/ params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = 6.GB - max_time = 6.h + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Limit resources so that this can run CI + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h - // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design.csv' + // Input data + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-small.csv' - // Genome references - genome = 'GRCh38' -} + // Genome references + fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' + gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' +} \ No newline at end of file diff --git a/conf/test_full.config b/conf/test_full.config deleted file mode 100644 index 051c819b..00000000 --- a/conf/test_full.config +++ /dev/null @@ -1,17 +0,0 @@ -/* - * ------------------------------------------------- - * Nextflow config file for running full-size tests - * ------------------------------------------------- - * Defines bundled input files and everything required - * to run a full size pipeline test. Use as follows: - * nextflow run nf-core/cutandrun -profile test_full, - */ - -params { - config_profile_name = 'Full test profile' - config_profile_description = 'Full test dataset to check pipeline function' - - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - genome = 'GRCh38' -} diff --git a/conf/test_hg38_chr7.config b/conf/test_hg38_chr7.config index 4146fa2b..b6322c7f 100644 --- a/conf/test_hg38_chr7.config +++ b/conf/test_hg38_chr7.config @@ -1,18 +1,20 @@ /* - * ------------------------------------------------- - * Nextflow config file for running full-size tests - * ------------------------------------------------- - * Defines bundled input files and everything required - * to run a full size pipeline test. Use as follows: - * nextflow run nf-core/cutandrun -profile test_full, - */ +======================================================================================== + Nextflow config file for running minimal tests +======================================================================================== + Defines input files and everything required to run a more robust test. + + Use as follows: + nextflow run nf-core/cutandrun -profile test_hg38_chr7, + +---------------------------------------------------------------------------------------- +*/ params { - config_profile_name = 'Subset test profile' - config_profile_description = 'Subset test dataset to check pipeline function' + config_profile_name = 'GSE145187 hg38-chr7' + config_profile_description = 'Runs on full data for GSE145187 but just on chr7 of hg38' - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-design-all.csv' - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" genome = 'GRCh38' -} + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' + fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' +} \ No newline at end of file diff --git a/main.nf b/main.nf index fb180c23..c4d5dff1 100644 --- a/main.nf +++ b/main.nf @@ -11,6 +11,36 @@ nextflow.enable.dsl = 2 +/* +======================================================================================== + GENOME PARAMETER VALUES +======================================================================================== +*/ + +params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') +params.gtf = WorkflowMain.getGenomeAttribute(params, 'gtf') +params.gene_bed = WorkflowMain.getGenomeAttribute(params, 'bed12') +params.blacklist = WorkflowMain.getGenomeAttribute(params, 'blacklist') +params.bowtie2 = WorkflowMain.getGenomeAttribute(params, 'bowtie2') + +/* +======================================================================================== + SPIKEIN GENOME PARAMETER VALUES +======================================================================================== +*/ + +params.spikein_fasta = WorkflowMain.getGenomeAttributeSpikeIn(params, 'fasta') +params.spikein_bowtie2 = WorkflowMain.getGenomeAttributeSpikeIn(params, 'bowtie2') + +/* +======================================================================================== + VALIDATE & PRINT PARAMETER SUMMARY +======================================================================================== +*/ + +WorkflowMain.initialise(workflow, params, log) + + //////////////////////////////////////////////////// /* -- PRINT HELP -- */ //////////////////////////////////////////////////// @@ -22,16 +52,7 @@ if (params.help) { exit 0 } -//////////////////////////////////////////////////// -/* -- GENOME PARAMETER VALUES -- */ -//////////////////////////////////////////////////// - -params.fasta = Checks.get_genome_attribute(params, 'fasta') -params.gtf = Checks.get_genome_attribute(params, 'gtf') -params.blacklist = Checks.get_genome_attribute(params, 'blacklist') -params.gene_bed = Checks.get_genome_attribute(params, 'bed12') -log.info 'test-' + params.blacklist //////////////////////////////////////////////////// /* -- PRINT PARAMETER SUMMARY -- */ diff --git a/nextflow.config b/nextflow.config index ea02d9b1..3e0e7850 100644 --- a/nextflow.config +++ b/nextflow.config @@ -8,18 +8,15 @@ // Global default params, used in configs params { - // TODO nf-core: Specify your pipeline's command line flags // Input options - input = '' + input = null + public_data_ids = null + skip_sra_fastq_download = false // References - genome = '' - blacklist = '' + genome = null spikein_geome = 'K12-MG1655' save_reference = false - bowtie2_index = '' - spikein_fasta = '' - spikein_bowtie2_index = '' // QC skip_qc = false @@ -58,13 +55,13 @@ params { // Boilerplate options enable_conda = false - clusterOptions = '' + clusterOptions = null outdir = './results' publish_dir_mode = 'copy' - multiqc_config = '' + multiqc_config = null multiqc_title = 'This is a test title' - email = '' - email_on_fail = '' + email = null + email_on_fail = null max_multiqc_email_size = '25.MB' plaintext_email = false monochrome_logs = false @@ -78,9 +75,9 @@ params { custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" hostnames = [:] - config_profile_description = '' - config_profile_contact = '' - config_profile_url = '' + config_profile_description = null + config_profile_contact = null + config_profile_url = null // Max resource options // Defaults only, expecting to be overwritten @@ -110,22 +107,55 @@ if (!params.igenomes_ignore) { } profiles { - debug { process.beforeScript = 'echo $HOSTNAME' } - conda { params.enable_conda = true } - docker { - docker.enabled = true - // 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 { - singularity.enabled = true - singularity.autoMounts = true - } - podman { - podman.enabled = true + debug { process.beforeScript = 'echo $HOSTNAME' } + conda { + params.enable_conda = true + docker.enabled = false + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + docker { + docker.enabled = true + // 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.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 } local { includeConfig 'conf/local.config' } test { includeConfig 'conf/test.config' } From 12859b5257962fbb759c399ae05a54ce92339a52 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 14 May 2021 12:43:01 +0100 Subject: [PATCH 168/675] Syntax update --- nextflow.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nextflow.config b/nextflow.config index dfda25e0..fe0c82b8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -161,10 +161,10 @@ profiles { podman.enabled = false shifter.enabled = false } - local { includeConfig 'conf/local.config' } - test { includeConfig 'conf/test.config' } - test_sra { includeConfig 'conf/test_sra.config' } - test_full { includeConfig 'conf/test_full.config' } + local { includeConfig 'conf/local.config' } + test { includeConfig 'conf/test.config' } + test_sra { includeConfig 'conf/test_sra.config' } + test_full { includeConfig 'conf/test_full.config' } test_hg38_chr7 { includeConfig 'conf/test_hg38_chr7.config' } } From a2e2bebdc906eecc71e0e4e67d067e6e9e40a57f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 14 May 2021 15:37:04 +0100 Subject: [PATCH 169/675] Working back towards stable pipeline --- .../dummy_file.txt | 0 assets/samplesheet.csv | 8 - lib/WorkflowCutandrun.groovy | 104 +++++ main.nf | 42 +- nextflow.config | 12 +- nextflow_schema.json | 361 ++++++++++++------ subworkflows/local/prepare_genome.nf | 18 +- workflows/cutandrun.nf | 220 ++++++----- 8 files changed, 460 insertions(+), 305 deletions(-) rename lib/WorflowCutandrun.groovy => assets/dummy_file.txt (100%) delete mode 100644 assets/samplesheet.csv create mode 100644 lib/WorkflowCutandrun.groovy diff --git a/lib/WorflowCutandrun.groovy b/assets/dummy_file.txt similarity index 100% rename from lib/WorflowCutandrun.groovy rename to assets/dummy_file.txt diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv deleted file mode 100644 index cd5a39a0..00000000 --- a/assets/samplesheet.csv +++ /dev/null @@ -1,8 +0,0 @@ -group,replicate,fastq_1,fastq_2 -control,1,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz -control,2,/path/to/fastq/files/AEG588A2_S2_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A2_S2_L002_R2_001.fastq.gz -control,3,/path/to/fastq/files/AEG588A3_S3_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A3_S3_L002_R2_001.fastq.gz -treatment,1,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, -treatment,2,/path/to/fastq/files/AEG588A5_S5_L003_R1_001.fastq.gz, -treatment,3,/path/to/fastq/files/AEG588A6_S6_L003_R1_001.fastq.gz, -treatment,3,/path/to/fastq/files/AEG588A6_S6_L004_R1_001.fastq.gz, diff --git a/lib/WorkflowCutandrun.groovy b/lib/WorkflowCutandrun.groovy new file mode 100644 index 00000000..3c0d79b0 --- /dev/null +++ b/lib/WorkflowCutandrun.groovy @@ -0,0 +1,104 @@ +// +// This file holds several functions specific to the workflow/cutandrun.nf in the nf-core/cutandrun pipeline +// + +class WorkflowCutandrun { + + // + // Check and validate parameters + // + public static void initialise(params, log) { + genomeExistsError(params, log) + + if (!params.fasta) { + log.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." + System.exit(1) + } + + if (!params.spikein_fasta) { + log.error "Spike-in fasta file not specified with e.g. '--spikein_fasta genome.fa' or via a detectable config file." + System.exit(1) + } + + if (!params.gtf) { + log.error "No GTF annotation specified!" + System.exit(1) + } + + if (params.gtf) { + if (params.genome == 'GRCh38' && params.gtf.contains('Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf')) { + ncbiGenomeWarn(log) + } + if (params.gtf.contains('/UCSC/') && params.gtf.contains('Annotation/Genes/genes.gtf')) { + ucscGenomeWarn(log) + } + } + } + + // + // Get workflow summary for MultiQC + // + public static String paramsSummaryMultiqc(workflow, summary) { + String summary_section = '' + for (group in summary.keySet()) { + def group_params = summary.get(group) // This gets the parameters of that particular group + if (group_params) { + summary_section += "

$group

\n" + summary_section += "
\n" + for (param in group_params.keySet()) { + summary_section += "
$param
${group_params.get(param) ?: 'N/A'}
\n" + } + summary_section += "
\n" + } + } + + String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" + return yaml_file_text + } + + // + // Exit pipeline if incorrect --genome key provided + // + private static void genomeExistsError(params, log) { + if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + log.error "=============================================================================\n" + + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + + " Currently, the available genome keys are:\n" + + " ${params.genomes.keySet().join(", ")}\n" + + "===================================================================================" + System.exit(1) + } + } + + // + // Print a warning if using GRCh38 assembly from igenomes.config + // + private static void ncbiGenomeWarn(log) { + log.warn "=============================================================================\n" + + " When using '--genome GRCh38' the assembly is from the NCBI and NOT Ensembl.\n" + + " Biotype QC will be skipped to circumvent the issue below:\n" + + " https://github.com/nf-core/rnaseq/issues/460\n\n" + + " If you would like to use the soft-masked Ensembl assembly instead please see:\n" + + " https://github.com/nf-core/rnaseq/issues/159#issuecomment-501184312\n" + + "===================================================================================" + } + + // + // Print a warning if using a UCSC assembly from igenomes.config + // + private static void ucscGenomeWarn(log) { + log.warn "=============================================================================\n" + + " When using UCSC assemblies the 'gene_biotype' field is absent from the GTF file.\n" + + " Biotype QC will be skipped to circumvent the issue below:\n" + + " https://github.com/nf-core/rnaseq/issues/460\n\n" + + " If you would like to use the soft-masked Ensembl assembly instead please see:\n" + + " https://github.com/nf-core/rnaseq/issues/159#issuecomment-501184312\n" + + "===================================================================================" + } +} diff --git a/main.nf b/main.nf index e4b773b7..749ffc46 100644 --- a/main.nf +++ b/main.nf @@ -40,46 +40,6 @@ params.spikein_bowtie2 = WorkflowMain.getGenomeAttributeSpikeIn(params, 'bowtie2 WorkflowMain.initialise(workflow, params, log) - -//////////////////////////////////////////////////// -/* -- PRINT HELP -- */ -//////////////////////////////////////////////////// - -def json_schema = "$projectDir/nextflow_schema.json" -if (params.help) { - def command = "nextflow run nf-core/cutandrun --input samplesheet.csv -profile docker" - log.info Schema.params_help(workflow, params, json_schema, command) - exit 0 -} - - - -//////////////////////////////////////////////////// -/* -- PRINT PARAMETER SUMMARY -- */ -//////////////////////////////////////////////////// - -def summary_params = Schema.params_summary_map(workflow, params, json_schema) -log.info Schema.params_summary_log(workflow, params, json_schema) - -//////////////////////////////////////////////////// -/* -- PARAMETER CHECKS -- */ -//////////////////////////////////////////////////// - -// Check that conda channels are set-up correctly -if (params.enable_conda) { - Checks.check_conda_channels(log) -} - -// Check AWS batch settings -Checks.aws_batch(workflow, params) - -// Check the hostnames against configured profiles -Checks.hostname(workflow, params, log) - -// Check genome key exists if provided -Checks.genome_exists(params, log) - - /* ======================================================================================== NAMED WORKFLOW FOR PIPELINE @@ -98,7 +58,7 @@ workflow NFCORE_CUTANDRUN { * WORKFLOW: Run main nf-core/cutandrun analysis pipeline */ } else { - include { CUTANDRUN } from './workflows/cutandrun' addParams( summary_params: summary_params ) + include { CUTANDRUN } from './workflows/cutandrun' CUTANDRUN () } } diff --git a/nextflow.config b/nextflow.config index fe0c82b8..9bf985ee 100644 --- a/nextflow.config +++ b/nextflow.config @@ -15,7 +15,7 @@ params { // References genome = null - spikein_geome = 'K12-MG1655' + spikein_genome = 'K12-MG1655' save_reference = false // QC @@ -201,18 +201,10 @@ manifest { homePage = 'https://github.com/nf-core/cutandrun' description = 'Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.' mainScript = 'main.nf' - nextflowVersion = '!>=20.10.0' + nextflowVersion = '!>=21.04.0' version = '1.0-dev' } -process { - withName:DEEPTOOLS_PLOTHEATMAP { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 36.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } - } -} - // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(obj, type) { diff --git a/nextflow_schema.json b/nextflow_schema.json index 33c673af..27781e29 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -16,13 +16,13 @@ "properties": { "input": { "type": "string", - "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location.", - "fa_icon": "fas fa-file-csv" + "fa_icon": "fas fa-dna", + "description": "Input FastQ files.", + "help_text": "Use this to specify the location of your input FastQ files. For example:\n\n```bash\n--input 'path/to/data/sample_*_{1,2}.fastq'\n```\n\nPlease note the following requirements:\n\n1. The path must be enclosed in quotes\n2. The path must have at least one `*` wildcard character\n3. When using the pipeline with paired end data, the path must use `{1,2}` notation to specify read pairs.\n\nIf left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz`" }, "outdir": { "type": "string", - "description": "Path to the output directory where the results will be saved.", + "description": "The output directory where the results will be saved.", "default": "./results", "fa_icon": "fas fa-folder-open" }, @@ -39,30 +39,24 @@ "title": "Reference genome options", "type": "object", "fa_icon": "fas fa-dna", - "description": "Reference genome related files and options required for the workflow.", + "description": "Options for the reference genome indices used to align reads.", "properties": { "genome": { "type": "string", "description": "Name of iGenomes reference.", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`.\n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." }, "fasta": { "type": "string", + "fa_icon": "fas fa-font", "description": "Path to FASTA genome file.", - "help_text": "This parameter is *mandatory* if `--genome` is not specified.", - "fa_icon": "far fa-file-code" - }, - "blacklist": { - "type": "string", - "description": "Path to gneome blacklist file.", - "help_text": "This parameter is *mandatory* if `--genome` is not specified.", - "fa_icon": "far fa-file-code" + "help_text": "If you have no genome reference available, the pipeline can build one using a FASTA file. This requires additional time and resources, so it's better to use a pre-build index if possible." }, "igenomes_base": { "type": "string", "description": "Directory / URL base for iGenomes references.", - "default": "s3://ngi-igenomes/igenomes/", + "default": "s3://ngi-igenomes/igenomes", "fa_icon": "fas fa-cloud-download-alt", "hidden": true }, @@ -75,51 +69,77 @@ } } }, - "institutional_config_options": { - "title": "Institutional config options", + "generic_options": { + "title": "Generic options", "type": "object", - "fa_icon": "fas fa-university", - "description": "Parameters used to describe centralised config profiles. These should not be edited.", - "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", + "fa_icon": "fas fa-file-import", + "description": "Less common options for the pipeline, typically set in a config file.", + "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "custom_config_version": { - "type": "string", - "description": "Git commit id for Institutional configs.", - "default": "master", + "help": { + "type": "boolean", + "description": "Display help text.", "hidden": true, - "fa_icon": "fas fa-users-cog" + "fa_icon": "fas fa-question-circle" }, - "custom_config_base": { + "publish_dir_mode": { "type": "string", - "description": "Base directory for Institutional configs.", - "default": "https://raw.githubusercontent.com/nf-core/configs/master", + "default": "copy", "hidden": true, - "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", - "fa_icon": "fas fa-users-cog" + "description": "Method used to save pipeline results to output directory.", + "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", + "fa_icon": "fas fa-copy", + "enum": [ + "symlink", + "rellink", + "link", + "copy", + "copyNoFollow", + "move" + ] }, - "hostnames": { + "email_on_fail": { "type": "string", - "description": "Institutional configs hostname.", + "description": "Email address for completion summary, only when pipeline fails.", + "fa_icon": "fas fa-exclamation-triangle", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "This works exactly as with `--email`, except emails are only sent if the workflow is not successful." }, - "config_profile_description": { - "type": "string", - "description": "Institutional config description.", + "plaintext_email": { + "type": "boolean", + "description": "Send plain-text email instead of HTML.", + "fa_icon": "fas fa-remove-format", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "Set to receive plain-text e-mails instead of HTML formatted." }, - "config_profile_contact": { + "max_multiqc_email_size": { "type": "string", - "description": "Institutional config contact information.", + "description": "File size limit when attaching MultiQC reports to summary emails.", + "default": "25.MB", + "fa_icon": "fas fa-file-upload", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "If file generated by pipeline exceeds the threshold, it will not be attached." }, - "config_profile_url": { - "type": "string", - "description": "Institutional config URL link.", + "monochrome_logs": { + "type": "boolean", + "description": "Do not use coloured log outputs.", + "fa_icon": "fas fa-palette", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "Set to disable colourful command line output and live life in monochrome." + }, + "multiqc_config": { + "type": "string", + "description": "Custom config file to supply to MultiQC.", + "fa_icon": "fas fa-cog", + "hidden": true + }, + "tracedir": { + "type": "string", + "description": "Directory to keep pipeline Nextflow logs and reports.", + "default": "${params.outdir}/pipeline_info", + "fa_icon": "fas fa-cogs", + "hidden": true } } }, @@ -132,7 +152,7 @@ "properties": { "max_cpus": { "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", + "description": "Maximum number of CPUs that can be requested for any single job.", "default": 16, "fa_icon": "fas fa-microchip", "hidden": true, @@ -143,6 +163,7 @@ "description": "Maximum amount of memory that can be requested for any single job.", "default": "128.GB", "fa_icon": "fas fa-memory", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", "hidden": true, "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, @@ -151,102 +172,58 @@ "description": "Maximum amount of time that can be requested for any single job.", "default": "240.h", "fa_icon": "far fa-clock", + "pattern": "^(\\d+\\.?\\s*(s|m|h|day)\\s*)+$", "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } } }, - "generic_options": { - "title": "Generic options", + "institutional_config_options": { + "title": "Institutional config options", "type": "object", - "fa_icon": "fas fa-file-import", - "description": "Less common options for the pipeline, typically set in a config file.", - "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", + "fa_icon": "fas fa-university", + "description": "Parameters used to describe centralised config profiles. These should not be edited.", + "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, - "publish_dir_mode": { - "type": "string", - "default": "copy", - "description": "Method used to save pipeline results to output directory.", - "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", - "fa_icon": "fas fa-copy", - "enum": [ - "symlink", - "rellink", - "link", - "copy", - "copyNoFollow", - "move" - ], - "hidden": true - }, - "email_on_fail": { + "custom_config_version": { "type": "string", - "description": "Email address for completion summary, only when pipeline fails.", - "fa_icon": "fas fa-exclamation-triangle", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", - "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", - "hidden": true - }, - "plaintext_email": { - "type": "boolean", - "description": "Send plain-text email instead of HTML.", - "fa_icon": "fas fa-remove-format", - "hidden": true + "description": "Git commit id for Institutional configs.", + "default": "master", + "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default: `master`.\n\n```bash\n## Download and use config file with following git commit id\n--custom_config_version d52db660777c4bf36546ddb188ec530c3ada1b96\n```" }, - "tracedir": { + "custom_config_base": { "type": "string", - "description": "Directory to keep pipeline Nextflow logs and reports.", - "default": "${params.outdir}/pipeline_info", - "fa_icon": "fas fa-cogs", - "hidden": true - }, - "monochrome_logs": { - "type": "boolean", - "description": "Do not use coloured log outputs.", - "fa_icon": "fas fa-palette", - "hidden": true - }, - "skip_multiqc": { - "type": "boolean", - "description": "Skip MultiQC.", - "fa_icon": "fas fa-fast-forward" + "description": "Base directory for Institutional configs.", + "default": "https://raw.githubusercontent.com/nf-core/configs/master", + "hidden": true, + "help_text": "If you're running offline, nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell nextflow where to find them with the `custom_config_base` option. For example:\n\n```bash\n## Download and unzip the config files\ncd /path/to/my/configs\nwget https://github.com/nf-core/configs/archive/master.zip\nunzip master.zip\n\n## Run the pipeline\ncd /path/to/my/data\nnextflow run /path/to/pipeline/ --custom_config_base /path/to/my/configs/configs-master/\n```\n\n> Note that the nf-core/tools helper package has a `download` command to download all required pipeline files + singularity containers + institutional configs in one go for you, to make this process easier.", + "fa_icon": "fas fa-users-cog" }, - "multiqc_config": { + "hostnames": { "type": "string", - "description": "Custom config file to supply to MultiQC.", - "fa_icon": "fas fa-cog", - "hidden": true + "description": "Institutional configs hostname.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "multiqc_title": { + "config_profile_description": { "type": "string", - "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", - "fa_icon": "fas fa-file-signature" + "description": "Institutional config description.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "max_multiqc_email_size": { + "config_profile_contact": { "type": "string", - "description": "File size limit when attaching MultiQC reports to summary emails.", - "default": "25.MB", - "fa_icon": "fas fa-file-upload", - "hidden": true - }, - "enable_conda": { - "type": "boolean", - "description": "Run this workflow with Conda. You can also use '-profile conda' instead of providing this parameter.", + "description": "Institutional config contact information.", "hidden": true, - "fa_icon": "fas fa-bacon" + "fa_icon": "fas fa-users-cog" }, - "singularity_pull_docker_container": { - "type": "boolean", - "description": "Instead of directly downloading Singularity images for use with Singularity, force the workflow to pull and convert Docker containers instead.", + "config_profile_url": { + "type": "string", + "description": "Institutional config URL link.", "hidden": true, - "fa_icon": "fas fa-toolbox", - "help_text": "This may be useful for example if you are unable to directly pull Singularity containers to run the pipeline due to http/https proxy issues." + "fa_icon": "fas fa-users-cog" } } } @@ -259,13 +236,147 @@ "$ref": "#/definitions/reference_genome_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/definitions/generic_options" }, { "$ref": "#/definitions/max_job_request_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/definitions/institutional_config_options" + } + ], + "properties": { + "public_data_ids": { + "type": "string", + "default": "null" + }, + "skip_sra_fastq_download": { + "type": "string" + }, + "spikein_genome": { + "type": "string", + "default": "K12-MG1655" + }, + "save_reference": { + "type": "string" + }, + "skip_qc": { + "type": "string" + }, + "skip_fastqc": { + "type": "string" + }, + "skip_multiqc": { + "type": "string" + }, + "save_merged_fastq": { + "type": "string" + }, + "clip_r1": { + "type": "integer", + "default": 0 + }, + "clip_r2": { + "type": "integer", + "default": 0 + }, + "three_prime_clip_r1": { + "type": "integer", + "default": 0 + }, + "three_prime_clip_r2": { + "type": "integer", + "default": 0 + }, + "trim_nextseq": { + "type": "integer", + "default": 0 + }, + "save_trimmed": { + "type": "string" + }, + "skip_trimming": { + "type": "string" + }, + "aligner": { + "type": "string", + "default": "bowtie2" + }, + "save_unaligned": { + "type": "string" + }, + "save_spikein_aligned": { + "type": "string" + }, + "publish_align_intermed": { + "type": "string" + }, + "skip_markduplicates": { + "type": "string" + }, + "skip_removeduplicates": { + "type": "string" + }, + "dedup_target_reads": { + "type": "string" + }, + "minimum_alignment_q_score": { + "type": "integer", + "default": 0 + }, + "normalisation_c": { + "type": "integer", + "default": 10000 + }, + "skip_coverage": { + "type": "string" + }, + "skip_igv": { + "type": "string" + }, + "skip_reporting": { + "type": "string" + }, + "igg_control": { + "type": "string", + "default": "true" + }, + "peak_threshold": { + "type": "number", + "default": 0.05 + }, + "enable_conda": { + "type": "string" + }, + "clusterOptions": { + "type": "string", + "default": "null" + }, + "multiqc_title": { + "type": "string", + "default": "This is a test title" + }, + "singularity_pull_docker_container": { + "type": "string", + "default": "true" + }, + "gtf": { + "type": "string" + }, + "gene_bed": { + "type": "string" + }, + "blacklist": { + "type": "string" + }, + "bowtie2": { + "type": "string" + }, + "spikein_fasta": { + "type": "string" + }, + "spikein_bowtie2": { + "type": "string" } - ] + } } \ No newline at end of file diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index dac7d3d0..4d26eb48 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -35,7 +35,7 @@ workflow PREPARE_GENOME { * Uncompress spike-in genome fasta file if required */ if (params.spikein_fasta.endsWith('.gz')) { - ch_spikein_fasta = GUNZIP_FASTA ( params.spikein_fasta ).gunzip + ch_spikein_fasta = GUNZIP_SPIKEIN_FASTA ( params.spikein_fasta ).gunzip } else { ch_spikein_fasta = file(params.spikein_fasta) } @@ -67,22 +67,22 @@ workflow PREPARE_GENOME { ch_bt2_spikein_index = Channel.empty() ch_bt2_version = Channel.empty() if ('bowtie2' in prepare_tool_indices) { - if (params.bowtie2_index) { - if (params.bowtie2_index.endsWith('.tar.gz')) { - ch_bt2_index = UNTAR_BT2_INDEX ( params.bowtie2_index ).untar + if (params.bowtie2) { + if (params.bowtie2.endsWith('.tar.gz')) { + ch_bt2_index = UNTAR_BT2_INDEX ( params.bowtie2 ).untar } else { - ch_bt2_index = file(params.bowtie2_index) + ch_bt2_index = file(params.bowtie2) } } else { ch_bt2_index = BOWTIE2_BUILD ( ch_fasta ).index ch_bt2_version = BOWTIE2_BUILD.out.version } - if (params.spikein_bowtie2_index) { - if (params.spikein_bowtie2_index.endsWith('.tar.gz')) { - ch_bt2_index = UNTAR_SPIKEIN_BT2_BUILD ( params.spikein_bowtie2_index ).untar + if (params.spikein_bowtie2) { + if (params.spikein_bowtie2.endsWith('.tar.gz')) { + ch_bt2_index = UNTAR_SPIKEIN_BT2_BUILD ( params.spikein_bowtie2 ).untar } else { - ch_bt2_index = file(params.spikein_bowtie2_index) + ch_bt2_index = file(params.spikein_bowtie2) } } else { ch_bt2_spikein_index = BOWTIE2_SPIKEIN_BUILD ( ch_spikein_fasta ).index diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 1a960419..83894e10 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -1,43 +1,42 @@ -//////////////////////////////////////////////////// -/* -- LOCAL PARAMETER VALUES -- */ -//////////////////////////////////////////////////// +/* +======================================================================================== + VALIDATE INPUTS +======================================================================================== +*/ -params.summary_params = [:] +def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) -//////////////////////////////////////////////////// -/* -- VALIDATE INPUTS -- */ -//////////////////////////////////////////////////// +// Validate input parameters in specialised library +WorkflowCutandrun.initialise(params, log) -// Check input path parameters to see if they exist +// Check input path parameters to see if the files exist if they have been specified checkPathParamList = [ params.input, params.fasta, params.gtf, params.blacklist, params.gene_bed, - params.bowtie2_index, + params.bowtie2, params.spikein_fasta, - params.spikein_bowtie2_index + params.spikein_bowtie2 ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } -// Check mandatory parameters -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -if (params.fasta) { ch_fasta = file(params.fasta) } else { exit 1, 'Genome fasta file not specified!' } -if (params.gtf) { ch_gtf = file(params.gtf) } else { exit 1, 'Genome GTF file not specified!' } +// Check mandatory parameters that cannot be checked in the groovy lib as we want a channel for them +if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, 'Genome blacklist file not specified!' } -if (params.gene_bed) { ch_gene_bed = file(params.gene_bed) } else { exit 1, 'Genome gene bed file not specified!' } - -// Resolve spike-in genome -def spikein_fasta = params.spikein_fasta -if(!params.spikein_bowtie2_index && !params.spikein_fasta) { - if(params.genomes[params.spikein_geome] != null) { - spikein_fasta = params.genomes[params.spikein_geome].fasta - } - else { - exit 1, 'Invalid spike-in genome specified!' - } -} +if (params.gene_bed) { ch_gene_bed = file(params.gene_bed) } else { exit 1, 'Genome gene bed file not specified!' } + +// // Resolve spike-in genome +// def spikein_fasta = params.spikein_fasta +// if(!params.spikein_bowtie2_index && !params.spikein_fasta) { +// if(params.genomes[params.spikein_geome] != null) { +// spikein_fasta = params.genomes[params.spikein_geome].fasta +// } +// else { +// exit 1, 'Invalid spike-in genome specified!' +// } +// } // Save AWS IGenomes file containing annotation version def anno_readme = params.genomes[ params.genome ]?.readme @@ -47,26 +46,26 @@ if (anno_readme && file(anno_readme).exists()) { } // Stage dummy file to be used as an optional input where required -//ch_dummy_file = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) +ch_dummy_file = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) -//////////////////////////////////////////////////// -/* -- CONFIG FILES -- */ -//////////////////////////////////////////////////// +// Stage awk files for parsing log files +ch_bt2_to_csv_awk = file("$projectDir/assets/awk/bt2_report_to_csv.awk" , checkIfExists: true) +ch_dt_frag_to_csv_awk = file("$projectDir/assets/awk/dt_frag_report_to_csv.awk", checkIfExists: true) + +/* +======================================================================================== + CONFIG FILES +======================================================================================== +*/ ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() -//////////////////////////////////////////////////// -/* -- ASSETS -- */ -//////////////////////////////////////////////////// - -ch_dummy_file = file("dummy/file", checkIfExists: false) -ch_bt2_to_csv_awk = file("$projectDir/assets/awk/bt2_report_to_csv.awk", checkIfExists: true) -ch_dt_frag_to_csv_awk = file("$projectDir/assets/awk/dt_frag_report_to_csv.awk", checkIfExists: true) - -//////////////////////////////////////////////////// -/* -- INIALISE PARAMETERS AND OPTIONS -- */ -//////////////////////////////////////////////////// +/* +======================================================================================== + INIALISE PARAMETERS AND OPTIONS +======================================================================================== +*/ // Don't overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() @@ -133,9 +132,11 @@ def awk_bt2_spikein_options = modules['awk_bt2_spikein'] def awk_dedup_options = modules['awk_dedup'] def awk_dt_frag_options = modules['awk_dt_frag'] -//////////////////////////////////////////////////// -/* -- IMPORT LOCAL MODULES/SUBWORKFLOWS -- */ -//////////////////////////////////////////////////// +/* +======================================================================================== + IMPORT LOCAL MODULES/SUBWORKFLOWS +======================================================================================== +*/ /* * MODULES @@ -164,8 +165,7 @@ include { SEACR_CALLPEAK as SEACR_NO_IGG } from '../modules/local/seacr_no_igg' include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( genome_options: publish_genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, - bt2_spikein_index_options: bowtie2_spikein_index_options, - spikein_fasta: spikein_fasta ) + bt2_spikein_index_options: bowtie2_spikein_index_options) include { ALIGN_BOWTIE2 } from '../subworkflows/local/align_bowtie2' addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, @@ -179,9 +179,11 @@ include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../subworkflows/local include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) -//////////////////////////////////////////////////// -/* -- IMPORT NF-CORE MODULES/SUBWORKFLOWS -- */ -//////////////////////////////////////////////////// +/* +======================================================================================== + IMPORT NF-CORE MODULES/SUBWORKFLOWS +======================================================================================== +*/ /* * MODULES @@ -200,10 +202,11 @@ include { FASTQC_TRIMGALORE } from '../su include { MARK_DUPLICATES_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) - -//////////////////////////////////////////////////// -/* -- RUN MAIN WORKFLOW -- */ -//////////////////////////////////////////////////// +/* +======================================================================================== + RUN MAIN WORKFLOW +======================================================================================== +*/ workflow CUTANDRUN { @@ -475,7 +478,7 @@ workflow CUTANDRUN { ch_seacr_bed.collect{it[1]}, ch_samtools_bam.collect{it[1]} ) - ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) /* * MODULE: Clip off-chromosome peaks @@ -497,44 +500,12 @@ workflow CUTANDRUN { /* * MODULE: Create igv session */ - IGV_SESSION ( - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.gtf, - ch_seacr_bed.collect{it[1]}.ifEmpty([]), - UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) - ) - } - - /* - * MODULE: Collect software versions used in pipeline - */ - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() - ) - - /* - * MODULE: Multiqc - */ - if (!params.skip_multiqc) { - workflow_summary = Schema.params_summary_multiqc(workflow, params.summary_params) - ch_workflow_summary = Channel.value(workflow_summary) - - MULTIQC ( - ch_multiqc_config, - ch_multiqc_custom_config.collect().ifEmpty([]), - GET_SOFTWARE_VERSIONS.out.yaml.collect(), - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), - FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), - FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), - FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), - ch_bowtie2_log.collect{it[1]}.ifEmpty([]), - ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), - ch_samtools_stats.collect{it[1]}.ifEmpty([]), - ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), - ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), - ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]) - ) - multiqc_report = MULTIQC.out.report.toList() + // IGV_SESSION ( + // PREPARE_GENOME.out.fasta, + // PREPARE_GENOME.out.gtf, + // ch_seacr_bed.collect{it[1]}.ifEmpty([]), + // UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) + // ) } // filter igg from bigwigs @@ -552,14 +523,12 @@ workflow CUTANDRUN { DEEPTOOLS_PLOTHEATMAP_GENE ( DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix ) - //HEATMAP ON PEAKS // extract max signal region from SEACR bed AWK_EDIT_PEAK_BED ( ch_seacr_bed ) - ch_software_versions = ch_software_versions.mix(AWK_EDIT_PEAK_BED.out.version.first().ifEmpty(null)) // order bigwig and bed channels such that they match on id @@ -583,19 +552,16 @@ workflow CUTANDRUN { .map { row -> row[-1] } .set { ch_ordered_seacr_max } - DEEPTOOLS_COMPUTEMATRIX_PEAKS ( ch_ordered_bigwig, ch_ordered_seacr_max ) - ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.version.first().ifEmpty(null)) DEEPTOOLS_PLOTHEATMAP_PEAKS ( DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix ) - /* * MODULE: Reporting */ @@ -625,11 +591,6 @@ workflow CUTANDRUN { AWK_FRAG_BIN( CALCULATE_FRAGMENTS.out.bed ) - EXPORT_META ( - ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) - //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) - ) - SAMTOOLS_CUSTOMVIEW ( ch_samtools_bam, ch_samtools_bai @@ -644,17 +605,52 @@ workflow CUTANDRUN { // Sort bams by mate pairs SAMTOOLS_SORT ( ch_samtools_bam ) - - GENERATE_REPORTS( - EXPORT_META.out.csv, - SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, - AWK_FRAG_BIN.out.file.collect{it[1]}, - ch_seacr_bed.collect{it[1]}, - SAMTOOLS_SORT.out.bam.collect{it[1]} - ) - - ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.first().ifEmpty(null)) + // EXPORT_META ( + // ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + // //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + // ) + + // GENERATE_REPORTS( + // EXPORT_META.out.csv, + // SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, + // AWK_FRAG_BIN.out.file.collect{it[1]}, + // ch_seacr_bed.collect{it[1]}, + // SAMTOOLS_SORT.out.bam.collect{it[1]} + // ) + // ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.first().ifEmpty(null)) } + + // /* + // * MODULE: Collect software versions used in pipeline + // */ + // GET_SOFTWARE_VERSIONS ( + // ch_software_versions.map { it }.collect() + // ) + + // /* + // * MODULE: Multiqc + // */ + // if (!params.skip_multiqc) { + // workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) + // ch_workflow_summary = Channel.value(workflow_summary) + + // MULTIQC ( + // ch_multiqc_config, + // ch_multiqc_custom_config.collect().ifEmpty([]), + // GET_SOFTWARE_VERSIONS.out.yaml.collect(), + // ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), + // FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), + // FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), + // FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), + // ch_bowtie2_log.collect{it[1]}.ifEmpty([]), + // ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), + // ch_samtools_stats.collect{it[1]}.ifEmpty([]), + // ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), + // ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), + // ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]) + // ) + // multiqc_report = MULTIQC.out.report.toList() + // } } //////////////////////////////////////////////////// From 057ddd48f85ec29819895b77ba5a6dc3a75a84ba Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 17 May 2021 10:19:55 +0100 Subject: [PATCH 170/675] try fix for calc fragments bug --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index d315ff18..20762903 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -174,7 +174,7 @@ params { } 'calc_frag_samtools_view' { - args = '-F 0x04' + args = '-F 0x04 -b' suffix = ".mapped" publish_dir = "calc_frag" } From 0b407d34a127fc3f183a1c5a522c12da041e0e34 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 17 May 2021 11:03:25 +0100 Subject: [PATCH 171/675] ongoing restrcuture --- workflows/cutandrun.nf | 598 ++++++++++++++++++++--------------------- 1 file changed, 293 insertions(+), 305 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 83894e10..b1fe9ce7 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -27,17 +27,6 @@ if (params.input) { ch_input = file(params.input) } else { exit 1, ' if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, 'Genome blacklist file not specified!' } if (params.gene_bed) { ch_gene_bed = file(params.gene_bed) } else { exit 1, 'Genome gene bed file not specified!' } -// // Resolve spike-in genome -// def spikein_fasta = params.spikein_fasta -// if(!params.spikein_bowtie2_index && !params.spikein_fasta) { -// if(params.genomes[params.spikein_geome] != null) { -// spikein_fasta = params.genomes[params.spikein_geome].fasta -// } -// else { -// exit 1, 'Invalid spike-in genome specified!' -// } -// } - // Save AWS IGenomes file containing annotation version def anno_readme = params.genomes[ params.genome ]?.readme if (anno_readme && file(anno_readme).exists()) { @@ -71,28 +60,28 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi def modules = params.modules.clone() // Genome -def publish_genome_options = params.save_reference ? [publish_dir: 'genome/target'] : [publish_files: false] -def spikein_genome_options = params.save_reference ? [publish_dir: 'genome/spikein'] : [publish_files: false] -def bowtie2_index_options = params.save_reference ? [publish_dir: 'genome/target/index'] : [publish_files: false] +def genome_options = params.save_reference ? [publish_dir: 'genome/target'] : [publish_files: false] +def spikein_genome_options = params.save_reference ? [publish_dir: 'genome/spikein'] : [publish_files: false] +def bowtie2_index_options = params.save_reference ? [publish_dir: 'genome/target/index'] : [publish_files: false] def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: 'genome/spikein/index'] : [publish_files: false] // QC -def cat_fastq_options = modules['cat_fastq'] +def cat_fastq_options = modules['cat_fastq'] if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } -def multiqc_options = modules['multiqc'] -multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' +def multiqc_options = modules['multiqc'] +multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' // Trimming -def trimgalore_options = modules['trimgalore'] +def trimgalore_options = modules['trimgalore'] trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } // Alignment dedup and filtering -def prepareToolIndices = ['bowtie2'] - +def prepareToolIndices = ['bowtie2'] def bowtie2_align_options = modules['bowtie2_align'] def bowtie2_spikein_align_options = modules['bowtie2_spikein_align'] + if (params.save_unaligned) { bowtie2_align_options.publish_files.put('.gz','') } if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put('.gz','') } if (params.publish_align_intermed) { bowtie2_align_options.publish_files.put('.bam','') } @@ -107,8 +96,8 @@ if (params.publish_align_intermed || params.skip_markduplicates) { samtools_spikein_sort_options.publish_files.put('bai','') } -def samtools_view_options = modules['samtools_view'] -def samtools_qfilter_options = modules['samtools_qfilter'] +def samtools_view_options = modules['samtools_view'] +def samtools_qfilter_options = modules['samtools_qfilter'] if (params.minimum_alignment_q_score > 0) { samtools_view_options.args = "-q " + params.minimum_alignment_q_score } @@ -117,20 +106,20 @@ if (params.publish_align_intermed) { samtools_qfilter_options.publish_files.put('bai','') } -def picard_markduplicates_options = modules['picard_markduplicates'] -def picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] +def picard_markduplicates_options = modules['picard_markduplicates'] +def picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] if (params.publish_align_intermed) { picard_markduplicates_options.publish_files.put('bam','') picard_markduplicates_samtools_options.publish_files.put('bai','') } -dedup_control_only = true +def dedup_control_only = true if(params.dedup_target_reads) { dedup_control_only = false } -// Meta annotation -def awk_bt2_options = modules['awk_bt2'] +// Meta annotation options +def awk_bt2_options = modules['awk_bt2'] def awk_bt2_spikein_options = modules['awk_bt2_spikein'] -def awk_dedup_options = modules['awk_dedup'] -def awk_dt_frag_options = modules['awk_dt_frag'] +def awk_dedup_options = modules['awk_dedup'] +def awk_dt_frag_options = modules['awk_dt_frag'] /* ======================================================================================== @@ -141,44 +130,41 @@ def awk_dt_frag_options = modules['awk_dt_frag'] /* * MODULES */ -include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) -// include { CAT_FASTQ } from '../modules/nf-core/software/cat/fastq/main' addParams( options: cat_fastq_options ) -include { CAT_FASTQ } from '../modules/local/cat_fastq' addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) -include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) -include { UCSC_BEDCLIP } from '../modules/nf-core/software/ucsc/bedclip/main' addParams( options: modules['ucsc_bedclip'] ) -include { IGV_SESSION } from '../modules/local/igv_session' addParams( options: modules['igv'] ) -include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) -include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) -include { EXPORT_META } from '../modules/local/export_meta' addParams( options: modules['export_meta'] ) -include { GENERATE_REPORTS } from '../modules/local/generate_reports' addParams( options: modules['generate_reports'] ) -include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) -include { AWK as AWK_FRAG_BIN } from '../modules/local/awk' addParams( options: modules['awk_frag_bin'] ) -include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/awk' addParams( options: modules['awk_edit_peak_bed'] ) -include { DESEQ2_DIFF } from '../modules/local/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) -include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) -include { SEACR_CALLPEAK as SEACR_NO_IGG } from '../modules/local/seacr_no_igg' addParams( options: modules['seacr'] ) +include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) +include { CAT_FASTQ } from '../modules/local/cat_fastq' addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) +include { IGV_SESSION } from '../modules/local/igv_session' addParams( options: modules['igv'] ) +include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) +include { EXPORT_META } from '../modules/local/export_meta' addParams( options: modules['export_meta'] ) +include { GENERATE_REPORTS } from '../modules/local/generate_reports' addParams( options: modules['generate_reports'] ) +include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) +include { AWK as AWK_FRAG_BIN } from '../modules/local/awk' addParams( options: modules['awk_frag_bin'] ) +include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/awk' addParams( options: modules['awk_edit_peak_bed'] ) +include { DESEQ2_DIFF } from '../modules/local/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) +include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) +include { SEACR_CALLPEAK as SEACR_NO_IGG } from '../modules/local/seacr_no_igg' addParams( options: modules['seacr'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( genome_options: publish_genome_options, - spikein_genome_options: spikein_genome_options, - bt2_index_options: bowtie2_index_options, - bt2_spikein_index_options: bowtie2_spikein_index_options) -include { ALIGN_BOWTIE2 } from '../subworkflows/local/align_bowtie2' addParams( align_options: bowtie2_align_options, - spikein_align_options: bowtie2_spikein_align_options, - samtools_options: samtools_sort_options, - samtools_spikein_options: samtools_spikein_sort_options ) +include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( genome_options: genome_options, + spikein_genome_options: spikein_genome_options, + bt2_index_options: bowtie2_index_options, + bt2_spikein_index_options: bowtie2_spikein_index_options ) + +include { ALIGN_BOWTIE2 } from '../subworkflows/local/align_bowtie2' addParams( align_options: bowtie2_align_options, + spikein_align_options: bowtie2_spikein_align_options, + samtools_options: samtools_sort_options, + samtools_spikein_options: samtools_spikein_sort_options ) + include { SAMTOOLS_VIEW_SORT_STATS } from '../subworkflows/local/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) include { CALCULATE_FRAGMENTS } from '../subworkflows/local/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], samtools_view_options: modules['calc_frag_samtools_view'], bamtobed_options: modules['calc_frag_bamtobed'], awk_options: modules['calc_frag_awk'], cut_options: modules['calc_frag_cut']) - include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) - /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -194,6 +180,8 @@ include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from '../mo include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) include { SAMTOOLS_SORT } from '../modules/nf-core/software/samtools/sort/main.nf' addParams( options: modules['samtools_sort'] ) +include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) +include { UCSC_BEDCLIP } from '../modules/nf-core/software/ucsc/bedclip/main' addParams( options: modules['ucsc_bedclip'] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -216,286 +204,286 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Uncompress and prepare reference genome files */ - PREPARE_GENOME ( - prepareToolIndices - ) - ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) + // PREPARE_GENOME ( + // prepareToolIndices + // ) + // ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ - INPUT_CHECK ( - ch_input - ) - .map { - meta, fastq -> - meta.id = meta.id.split('_')[0..-2].join('_') - [ meta, fastq ] } - .groupTuple(by: [0]) - // .map { it -> [ it[0], it[1].flatten() ] } - // .set { ch_cat_fastq } - .branch { - meta, fastq -> - single : fastq.size() == 1 - return [ meta, fastq.flatten() ] - multiple: fastq.size() > 1 - return [ meta, fastq.flatten() ] - } - .set { ch_fastq } + // INPUT_CHECK ( + // ch_input + // ) + // .map { + // meta, fastq -> + // meta.id = meta.id.split('_')[0..-2].join('_') + // [ meta, fastq ] } + // .groupTuple(by: [0]) + // // .map { it -> [ it[0], it[1].flatten() ] } + // // .set { ch_cat_fastq } + // .branch { + // meta, fastq -> + // single : fastq.size() == 1 + // return [ meta, fastq.flatten() ] + // multiple: fastq.size() > 1 + // return [ meta, fastq.flatten() ] + // } + // .set { ch_fastq } /* * MODULE: Concatenate FastQ files from same sample if required */ - CAT_FASTQ ( - ch_fastq.multiple - ) - .mix(ch_fastq.single) - .set { ch_cat_fastq } + // CAT_FASTQ ( + // ch_fastq.multiple + // ) + // .mix(ch_fastq.single) + // .set { ch_cat_fastq } /* * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC */ - FASTQC_TRIMGALORE ( - ch_cat_fastq, - params.skip_fastqc || params.skip_qc, - params.skip_trimming - ) - ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads - ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + // FASTQC_TRIMGALORE ( + // ch_cat_fastq, + // params.skip_fastqc || params.skip_qc, + // params.skip_trimming + // ) + // ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads + // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) + // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) /* * SUBWORKFLOW: Alignment to target and spikein genome using botwtie2 */ - ch_orig_bam = Channel.empty() - ch_orig_spikein_bam = Channel.empty() - ch_bowtie2_log = Channel.empty() - ch_bowtie2_spikein_log = Channel.empty() - ch_samtools_bam = Channel.empty() - ch_samtools_bai = Channel.empty() - ch_samtools_stats = Channel.empty() - ch_samtools_flagstat = Channel.empty() - ch_samtools_idxstats = Channel.empty() - ch_samtools_spikein_bam = Channel.empty() - ch_samtools_spikein_bai = Channel.empty() - ch_samtools_spikein_stats = Channel.empty() - ch_samtools_spikein_flagstat = Channel.empty() - ch_samtools_spikein_idxstats = Channel.empty() - if (params.aligner == 'bowtie2') { - ALIGN_BOWTIE2 ( - ch_trimmed_reads, - PREPARE_GENOME.out.bowtie2_index, - PREPARE_GENOME.out.bowtie2_spikein_index - ) - ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.samtools_version.first().ifEmpty(null)) - ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam - ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam - ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log - ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log - - ch_samtools_bam = ALIGN_BOWTIE2.out.bam - ch_samtools_bai = ALIGN_BOWTIE2.out.bai - ch_samtools_stats = ALIGN_BOWTIE2.out.stats - ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat - ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats - - ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam - ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai - ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats - ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat - ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats - } + // ch_orig_bam = Channel.empty() + // ch_orig_spikein_bam = Channel.empty() + // ch_bowtie2_log = Channel.empty() + // ch_bowtie2_spikein_log = Channel.empty() + // ch_samtools_bam = Channel.empty() + // ch_samtools_bai = Channel.empty() + // ch_samtools_stats = Channel.empty() + // ch_samtools_flagstat = Channel.empty() + // ch_samtools_idxstats = Channel.empty() + // ch_samtools_spikein_bam = Channel.empty() + // ch_samtools_spikein_bai = Channel.empty() + // ch_samtools_spikein_stats = Channel.empty() + // ch_samtools_spikein_flagstat = Channel.empty() + // ch_samtools_spikein_idxstats = Channel.empty() + // if (params.aligner == 'bowtie2') { + // ALIGN_BOWTIE2 ( + // ch_trimmed_reads, + // PREPARE_GENOME.out.bowtie2_index, + // PREPARE_GENOME.out.bowtie2_spikein_index + // ) + // ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.samtools_version.first().ifEmpty(null)) + // ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam + // ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam + // ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log + // ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log + + // ch_samtools_bam = ALIGN_BOWTIE2.out.bam + // ch_samtools_bai = ALIGN_BOWTIE2.out.bai + // ch_samtools_stats = ALIGN_BOWTIE2.out.stats + // ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat + // ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats + + // ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam + // ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai + // ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats + // ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat + // ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats + // } /* * SUBWORKFLOW: Filter reads based on quality metrics * http://biofinysics.blogspot.com/2014/05/how-does-bowtie2-assign-mapq-scores.html */ - if (params.minimum_alignment_q_score > 0) { - SAMTOOLS_VIEW_SORT_STATS ( - ch_samtools_bam - ) - ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam - ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai - ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats - ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat - ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats - } + // if (params.minimum_alignment_q_score > 0) { + // SAMTOOLS_VIEW_SORT_STATS ( + // ch_samtools_bam + // ) + // ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam + // ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai + // ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats + // ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat + // ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats + // } /* * SUBWORKFLOW: Mark duplicates on all samples */ - ch_markduplicates_multiqc = Channel.empty() - if (!params.skip_markduplicates) { - MARK_DUPLICATES_PICARD ( - ch_samtools_bam - ) - ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam - ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai - ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats - ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat - ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats - ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics - ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) - } + // ch_markduplicates_multiqc = Channel.empty() + // if (!params.skip_markduplicates) { + // MARK_DUPLICATES_PICARD ( + // ch_samtools_bam + // ) + // ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam + // ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai + // ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats + // ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat + // ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats + // ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics + // ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) + // } /* * SUBWORKFLOW: Remove duplicates */ - ch_dedup_multiqc = Channel.empty() - if (!params.skip_markduplicates && !params.skip_removeduplicates) { - DEDUP_PICARD ( - ch_samtools_bam - ) - ch_samtools_bam = DEDUP_PICARD.out.bam - ch_samtools_bai = DEDUP_PICARD.out.bai - ch_samtools_stats = DEDUP_PICARD.out.stats - ch_samtools_flagstat = DEDUP_PICARD.out.flagstat - ch_samtools_idxstats = DEDUP_PICARD.out.idxstats - ch_dedup_multiqc = DEDUP_PICARD.out.metrics - } + // ch_dedup_multiqc = Channel.empty() + // if (!params.skip_markduplicates && !params.skip_removeduplicates) { + // DEDUP_PICARD ( + // ch_samtools_bam + // ) + // ch_samtools_bam = DEDUP_PICARD.out.bam + // ch_samtools_bai = DEDUP_PICARD.out.bai + // ch_samtools_stats = DEDUP_PICARD.out.stats + // ch_samtools_flagstat = DEDUP_PICARD.out.flagstat + // ch_samtools_idxstats = DEDUP_PICARD.out.idxstats + // ch_dedup_multiqc = DEDUP_PICARD.out.metrics + // } /* * SUBWORKFLOW: Annotate meta data with aligner stats */ - ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) - ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_spikein_log, ch_bt2_to_csv_awk) + // ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) + // ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_spikein_log, ch_bt2_to_csv_awk) /* * CHANNEL: Combine merge spikein meta data with main data stream */ - ANNOTATE_BT2_SPIKEIN_META.out.output - .map { row -> [row[0].id, row[0] ].flatten()} - .set { ch_spikein_bt2_meta } + // ANNOTATE_BT2_SPIKEIN_META.out.output + // .map { row -> [row[0].id, row[0] ].flatten()} + // .set { ch_spikein_bt2_meta } // ANNOTATE_BT2_META.out.output | view - ANNOTATE_BT2_META.out.output - .map { row -> [row[0].id, row ].flatten()} - .join ( ch_spikein_bt2_meta ) - .map { row -> [ row[1] << row[3], row[2] ] } - .set { ch_combined_meta } + // ANNOTATE_BT2_META.out.output + // .map { row -> [row[0].id, row ].flatten()} + // .join ( ch_spikein_bt2_meta ) + // .map { row -> [ row[1] << row[3], row[2] ] } + // .set { ch_combined_meta } // ANNOTATE_BT2_SPIKEIN_META.out.output | view /* * CHANNEL: Calculate scale factor for each sample and join to main data flow */ - ANNOTATE_BT2_SPIKEIN_META.out.output - .map { row -> [ row[0].id, params.normalisation_c / (row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger()) ] } - .set { ch_scale_factor } - - ch_combined_meta - .map { row -> [row[0].id, row ].flatten()} - .join ( ch_scale_factor ) - .map { row -> row[1..(row.size() - 1)] } - .map { row -> - row[0].put('scale_factor', row[2]) - [ row[0], row[1], row[2] ] } - .set { ch_samtools_bam_scale } + // ANNOTATE_BT2_SPIKEIN_META.out.output + // .map { row -> [ row[0].id, params.normalisation_c / (row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger()) ] } + // .set { ch_scale_factor } + + // ch_combined_meta + // .map { row -> [row[0].id, row ].flatten()} + // .join ( ch_scale_factor ) + // .map { row -> row[1..(row.size() - 1)] } + // .map { row -> + // row[0].put('scale_factor', row[2]) + // [ row[0], row[1], row[2] ] } + // .set { ch_samtools_bam_scale } // Create channel without scale as seperate value - ch_samtools_bam_scale - .map { row -> [ row[0], row[1] ] } - .set { ch_samtools_bam_meta } + // ch_samtools_bam_scale + // .map { row -> [ row[0], row[1] ] } + // .set { ch_samtools_bam_meta } /* * SUBWORKFLOW: Calculate fragment bed from bams */ - CALCULATE_FRAGMENTS ( - ch_samtools_bam_meta - ) + // CALCULATE_FRAGMENTS ( + // ch_samtools_bam_meta + // ) - if(!params.skip_coverage) { + // if(!params.skip_coverage) { /* * MODULE: Convert to bedgraph */ - BEDTOOLS_GENOMECOV_SCALE ( - ch_samtools_bam_scale - ) - ch_bedtools_bedgraph = BEDTOOLS_GENOMECOV_SCALE.out.bedgraph - ch_software_versions = ch_software_versions.mix(BEDTOOLS_GENOMECOV_SCALE.out.version.first().ifEmpty(null)) + // BEDTOOLS_GENOMECOV_SCALE ( + // ch_samtools_bam_scale + // ) + // ch_bedtools_bedgraph = BEDTOOLS_GENOMECOV_SCALE.out.bedgraph + // ch_software_versions = ch_software_versions.mix(BEDTOOLS_GENOMECOV_SCALE.out.version.first().ifEmpty(null)) /* * CHANNEL: Separate bedgraphs into target/control pairings for each replicate */ - ch_bedtools_bedgraph.branch { it -> - target: it[0].group != 'igg' - control: it[0].group == 'igg' - } - .set { ch_bedgraph_split } + // ch_bedtools_bedgraph.branch { it -> + // target: it[0].group != 'igg' + // control: it[0].group == 'igg' + // } + // .set { ch_bedgraph_split } /* * MODULE: Call peaks with IgG COntrol */ - if (params.igg_control) { + // if (params.igg_control) { - ch_bedgraph_split.target - .combine(ch_bedgraph_split.control) - .filter { row -> row[0].replicate == row[2].replicate } - .map { row -> [ row[0], row[1], row[3] ] } - .set { ch_bedgraph_combined } + // ch_bedgraph_split.target + // .combine(ch_bedgraph_split.control) + // .filter { row -> row[0].replicate == row[2].replicate } + // .map { row -> [ row[0], row[1], row[3] ] } + // .set { ch_bedgraph_combined } - SEACR_CALLPEAK ( - ch_bedgraph_combined - ) - ch_seacr_bed = SEACR_CALLPEAK.out.bed - ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + // SEACR_CALLPEAK ( + // ch_bedgraph_combined + // ) + // ch_seacr_bed = SEACR_CALLPEAK.out.bed + // ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) - } + // } /* * MODULE: Call peaks without IgG COntrol */ - if (!params.igg_control) { + // if (!params.igg_control) { - ch_peak_threshold = Channel.value(params.peak_threshold) + // ch_peak_threshold = Channel.value(params.peak_threshold) - SEACR_NO_IGG ( - ch_bedgraph_split.target, - ch_peak_threshold.collect() - ) - ch_seacr_bed = SEACR_NO_IGG.out.bed - ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) + // SEACR_NO_IGG ( + // ch_bedgraph_split.target, + // ch_peak_threshold.collect() + // ) + // ch_seacr_bed = SEACR_NO_IGG.out.bed + // ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) - } + // } /* * CHANNEL: Collect SEACR group names */ - ch_seacr_bed - //.map{ row -> row[0].find{ it.key == "group" }?.value() } - .map{ row -> row[0].group} - .unique() - .collect() - .set { ch_groups_no_igg } + // ch_seacr_bed + // //.map{ row -> row[0].find{ it.key == "group" }?.value() } + // .map{ row -> row[0].group} + // .unique() + // .collect() + // .set { ch_groups_no_igg } /* * MODULE: DESeq2 QC Analysis */ - DESEQ2_DIFF ( - ch_groups_no_igg, - ch_seacr_bed.collect{it[1]}, - ch_samtools_bam.collect{it[1]} - ) - ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) + // DESEQ2_DIFF ( + // ch_groups_no_igg, + // ch_seacr_bed.collect{it[1]}, + // ch_samtools_bam.collect{it[1]} + // ) + // ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) /* * MODULE: Clip off-chromosome peaks */ - UCSC_BEDCLIP ( - ch_bedtools_bedgraph, - PREPARE_GENOME.out.chrom_sizes - ) + // UCSC_BEDCLIP ( + // ch_bedtools_bedgraph, + // PREPARE_GENOME.out.chrom_sizes + // ) /* * MODULE: Convert to bigwig */ - UCSC_BEDGRAPHTOBIGWIG ( - UCSC_BEDCLIP.out.bedgraph, - PREPARE_GENOME.out.chrom_sizes - ) - ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) + // UCSC_BEDGRAPHTOBIGWIG ( + // UCSC_BEDCLIP.out.bedgraph, + // PREPARE_GENOME.out.chrom_sizes + // ) + // ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) /* * MODULE: Create igv session @@ -506,95 +494,95 @@ workflow CUTANDRUN { // ch_seacr_bed.collect{it[1]}.ifEmpty([]), // UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) // ) - } + //} // filter igg from bigwigs - UCSC_BEDGRAPHTOBIGWIG.out.bigwig - .filter { it[0].group != 'igg' } - .set { ch_bigwig_no_igg } + // UCSC_BEDGRAPHTOBIGWIG.out.bigwig + // .filter { it[0].group != 'igg' } + // .set { ch_bigwig_no_igg } //DEEPTOOLS HEATMAPS //HEATMAP OVER TRANSCRIPTION UNITS - DEEPTOOLS_COMPUTEMATRIX_GENE ( - ch_bigwig_no_igg, - ch_gene_bed - ) + // DEEPTOOLS_COMPUTEMATRIX_GENE ( + // ch_bigwig_no_igg, + // ch_gene_bed + // ) - DEEPTOOLS_PLOTHEATMAP_GENE ( - DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix - ) + // DEEPTOOLS_PLOTHEATMAP_GENE ( + // DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix + // ) //HEATMAP ON PEAKS // extract max signal region from SEACR bed - AWK_EDIT_PEAK_BED ( - ch_seacr_bed - ) - ch_software_versions = ch_software_versions.mix(AWK_EDIT_PEAK_BED.out.version.first().ifEmpty(null)) + // AWK_EDIT_PEAK_BED ( + // ch_seacr_bed + // ) + // ch_software_versions = ch_software_versions.mix(AWK_EDIT_PEAK_BED.out.version.first().ifEmpty(null)) // order bigwig and bed channels such that they match on id - ch_bigwig_no_igg - .map { row -> [row[0].id, row ].flatten()} - .set { ch_bigwig_no_igg_id } + // ch_bigwig_no_igg + // .map { row -> [row[0].id, row ].flatten()} + // .set { ch_bigwig_no_igg_id } - AWK_EDIT_PEAK_BED.out.file - .map { row -> [row[0].id, row ].flatten()} - .set { ch_seacr_max_id } + // AWK_EDIT_PEAK_BED.out.file + // .map { row -> [row[0].id, row ].flatten()} + // .set { ch_seacr_max_id } - ch_bigwig_no_igg_id - .join ( ch_seacr_max_id ) - .set { ch_dt_peaks } + // ch_bigwig_no_igg_id + // .join ( ch_seacr_max_id ) + // .set { ch_dt_peaks } - ch_dt_peaks - .map { row -> row[1,2] } - .set { ch_ordered_bigwig } + // ch_dt_peaks + // .map { row -> row[1,2] } + // .set { ch_ordered_bigwig } - ch_dt_peaks - .map { row -> row[-1] } - .set { ch_ordered_seacr_max } + // ch_dt_peaks + // .map { row -> row[-1] } + // .set { ch_ordered_seacr_max } - DEEPTOOLS_COMPUTEMATRIX_PEAKS ( - ch_ordered_bigwig, - ch_ordered_seacr_max - ) - ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.version.first().ifEmpty(null)) + // DEEPTOOLS_COMPUTEMATRIX_PEAKS ( + // ch_ordered_bigwig, + // ch_ordered_seacr_max + // ) + // ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.version.first().ifEmpty(null)) - DEEPTOOLS_PLOTHEATMAP_PEAKS ( - DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix - ) + // DEEPTOOLS_PLOTHEATMAP_PEAKS ( + // DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix + // ) /* * MODULE: Reporting */ - if (!params.skip_reporting) { - ANNOTATE_DEDUP_META(ch_samtools_bam_meta, ch_markduplicates_multiqc, ch_dummy_file.collect()) + //if (!params.skip_reporting) { + //ANNOTATE_DEDUP_META(ch_samtools_bam_meta, ch_markduplicates_multiqc, ch_dummy_file.collect()) //ANNOTATE_DEDUP_META.out.output | view - ch_samtools_bam - .map { row -> [row[0].id, row[0], row[1] ] } - .set { ch_samtools_bam_id } + // ch_samtools_bam + // .map { row -> [row[0].id, row[0], row[1] ] } + // .set { ch_samtools_bam_id } - ch_samtools_bai - .map { row -> [row[0].id, row[0], row[1] ] } - .set { ch_samtools_bai_id } + // ch_samtools_bai + // .map { row -> [row[0].id, row[0], row[1] ] } + // .set { ch_samtools_bai_id } - ch_samtools_bam_id - .join( ch_samtools_bai_id ) - .map { row -> [row[1], row[2], row[4] ] } - .set { ch_samtools_bam_bai } + // ch_samtools_bam_id + // .join( ch_samtools_bai_id ) + // .map { row -> [row[1], row[2], row[4] ] } + // .set { ch_samtools_bam_bai } // ch_samtools_bam_bai | view - DEEPTOOLS_BAMPEFRAGMENTSIZE(ch_samtools_bam_bai, ch_blacklist) - //DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv | view + // DEEPTOOLS_BAMPEFRAGMENTSIZE(ch_samtools_bam_bai, ch_blacklist) + // //DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv | view - ANNOTATE_DT_FRAG_META( ANNOTATE_DEDUP_META.out.output, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv, ch_dt_frag_to_csv_awk) + // ANNOTATE_DT_FRAG_META( ANNOTATE_DEDUP_META.out.output, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv, ch_dt_frag_to_csv_awk) //ANNOTATE_DT_FRAG_META.out.output | view - AWK_FRAG_BIN( CALCULATE_FRAGMENTS.out.bed ) + // AWK_FRAG_BIN( CALCULATE_FRAGMENTS.out.bed ) - SAMTOOLS_CUSTOMVIEW ( - ch_samtools_bam, - ch_samtools_bai - ) + // SAMTOOLS_CUSTOMVIEW ( + // ch_samtools_bam, + // ch_samtools_bai + // ) //SAMTOOLS_CUSTOMVIEW.out.txt | view // // Filter bam bai channels for non-igg only @@ -603,7 +591,7 @@ workflow CUTANDRUN { // .set { ch_no_igg_bam_bai } // Sort bams by mate pairs - SAMTOOLS_SORT ( ch_samtools_bam ) + // SAMTOOLS_SORT ( ch_samtools_bam ) // EXPORT_META ( // ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) @@ -618,7 +606,7 @@ workflow CUTANDRUN { // SAMTOOLS_SORT.out.bam.collect{it[1]} // ) // ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.first().ifEmpty(null)) - } + //} // /* // * MODULE: Collect software versions used in pipeline From 4fe09ef7fac143af8137e2bb59f47cd3830b0f9c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 17 May 2021 11:48:14 +0100 Subject: [PATCH 172/675] correct header name comment --- bin/python/reporting/lib/figures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 285f7b11..de66bc62 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -574,7 +574,7 @@ def replicate_heatmap(self): return fig, self.frag_bin500 - # ---------- Plot 6 - Replicate Reproducibility Heatmap --------- # + # ---------- Plot 6 - Scale Factor Comparison --------- # def scale_factor_summary(self): fig, scale_summary = plt.subplots(1,2) fig.suptitle("Scaling Factor") From 34685ecd39e434320151013c48c2b21d15e6d55e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 17 May 2021 13:12:49 +0100 Subject: [PATCH 173/675] try fix in deseq2 for one replicate --- bin/python/reporting/lib/figures.py | 2 ++ bin/r/deseq2_diff.r | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index de66bc62..26297786 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -568,6 +568,8 @@ def replicate_heatmap(self): sns.set(font_scale=0.6) fig, ax = plt.subplots() plot_data = self.frag_bin500[self.frag_bin500.columns[-(len(self.frag_bin500.columns)-2):]] + plot_data = plot_data.fillna(0) + # print(plot_data.head(15)) corr_mat = plot_data.corr() ax = sns.heatmap(corr_mat, annot=True) fig.suptitle("Replicate Reproducibility") diff --git a/bin/r/deseq2_diff.r b/bin/r/deseq2_diff.r index ccaf1a4c..0da3ce45 100644 --- a/bin/r/deseq2_diff.r +++ b/bin/r/deseq2_diff.r @@ -123,6 +123,8 @@ for(file in file_list) { file_count = file_count + 1 } + + # Create replicate counts and names group_count = length(groups) rep_count = file_count / group_count @@ -132,7 +134,7 @@ expected_rep_str = paste0("_R", 1:rep_count) # Create peak table and count matrix masterPeak = reduce(mPeak) countMat = matrix(NA, length(masterPeak), file_count) -colnames(countMat) = paste(rep(groups, 2), rep(reps, each = group_count, sep = "_")) +colnames(countMat) = paste(rep(groups, rep_count), rep(reps, each = group_count, sep = "_")) # Read in bam files that match the control or treatment group for(i in seq_along(groups)){ @@ -160,7 +162,7 @@ if (file.exists(opt$outdir) == FALSE) { dir.create(opt$outdir,recursive=TRUE) } setwd(opt$outdir) - +#if (FALSE) { ## Create index list for peak count filter selectR = which(rowSums(countMat) > opt$count_thresh) dataS = countMat[selectR,] ## Select data from filter @@ -510,7 +512,7 @@ if (file.exists(RLogFile) == FALSE) { print(a) sink() } - +#} ################################################ ################################################ ################################################ From 4fc44bf3481ad4f7153d0b3af5b804bd4ac7ed17 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 17 May 2021 14:20:26 +0100 Subject: [PATCH 174/675] On going re-structure --- conf/modules.config | 5 +- conf/test.config | 4 +- nextflow.config | 12 +- subworkflows/local/align_bowtie2.nf | 18 +- subworkflows/local/annotate_meta_awk.nf | 11 +- subworkflows/local/calculate_fragments.nf | 89 +-- subworkflows/local/prepare_genome.nf | 41 +- .../local/samtools_view_sort_stats.nf | 18 +- subworkflows/nf-core/bam_sort_samtools.nf | 4 +- .../nf-core/mark_duplicates_picard.nf | 4 +- workflows/cutandrun.nf | 620 +++++++++++------- 11 files changed, 441 insertions(+), 385 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 20762903..e48e9bbc 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -38,6 +38,7 @@ params { 'sra_merge_samplesheet' { publish_dir = 'public_data' } + 'bowtie2_index' { publish_dir = "genome/index" } @@ -79,8 +80,8 @@ params { publish_dir = "${params.aligner}/spikein" } - 'samtools_view' { - args = '-q 0' + 'samtools_view_qfilter' { + args = '-q 0 -b' suffix = ".filtered" publish_files = false publish_dir = "${params.aligner}/target" diff --git a/conf/test.config b/conf/test.config index 3931e315..ab62ea2e 100644 --- a/conf/test.config +++ b/conf/test.config @@ -23,11 +23,13 @@ params { input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-small.csv' // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' + fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + + minimum_alignment_q_score = 10 } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 9bf985ee..55942cd2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -47,15 +47,15 @@ params { // Coverage normalisation_c = 10000 - skip_coverage = false - - // Reporting and Visualisation - skip_igv = false - skip_reporting = false // SEACR Peak Calling igg_control = true peak_threshold = '0.05' + skip_peakcalling = false + + // Reporting and Visualisation + skip_igv = false + skip_reporting = false // Boilerplate options enable_conda = false @@ -73,7 +73,7 @@ params { igenomes_base = 's3://ngi-igenomes/igenomes/' tracedir = "${params.outdir}/pipeline_info" igenomes_ignore = false - singularity_pull_docker_container = true + singularity_pull_docker_container = false // Config options custom_config_version = 'master' diff --git a/subworkflows/local/align_bowtie2.nf b/subworkflows/local/align_bowtie2.nf index fcbacdb0..0afde9ec 100644 --- a/subworkflows/local/align_bowtie2.nf +++ b/subworkflows/local/align_bowtie2.nf @@ -7,10 +7,10 @@ params.spikein_align_options = [:] params.samtools_options = [:] params.samtools_spikein_options = [:] -include { BOWTIE2_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) -include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) -include { BAM_SORT_SAMTOOLS } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_options ) -include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) +include { BOWTIE2_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) +include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) +include { BAM_SORT_SAMTOOLS } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_options ) +include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) workflow ALIGN_BOWTIE2 { take: @@ -37,13 +37,13 @@ workflow ALIGN_BOWTIE2 { emit: bowtie2_version = BOWTIE2_ALIGN.out.version // path: *.version.txt - samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt + samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt - orig_bam = BOWTIE2_ALIGN.out.bam // channel: [ val(meta), bam ] - orig_spikein_bam = BOWTIE2_SPIKEIN_ALIGN.out.bam // channel: [ val(meta), bam ] + orig_bam = BOWTIE2_ALIGN.out.bam // channel: [ val(meta), bam ] + orig_spikein_bam = BOWTIE2_SPIKEIN_ALIGN.out.bam // channel: [ val(meta), bam ] - bowtie2_log = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log_final ] - bowtie2_spikein_log = BOWTIE2_SPIKEIN_ALIGN.out.log // channel: [ val(meta), log_final ] + bowtie2_log = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log_final ] + bowtie2_spikein_log = BOWTIE2_SPIKEIN_ALIGN.out.log // channel: [ val(meta), log_final ] bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] diff --git a/subworkflows/local/annotate_meta_awk.nf b/subworkflows/local/annotate_meta_awk.nf index cedd29eb..63f7daee 100644 --- a/subworkflows/local/annotate_meta_awk.nf +++ b/subworkflows/local/annotate_meta_awk.nf @@ -1,17 +1,15 @@ /* * Annotate the pipeline meta data with the columns from a csv file - generated from processing a report text file with an awk script - - TODO: input is a passthrough and that is the thing that is annotated - */ + * generated from processing a report text file with an awk script + */ -params.options = [:] +params.options = [:] params.meta_suffix = '' params.meta_prefix = '' params.script_mode = false include { AWK_SCRIPT } from '../../modules/local/awk_script' addParams( options: params.options ) -include { AWK } from '../../modules/local/awk' addParams( options: params.options ) +include { AWK } from '../../modules/local/awk' addParams( options: params.options ) workflow ANNOTATE_META_AWK { take: passthrough @@ -24,6 +22,7 @@ workflow ANNOTATE_META_AWK { ch_paths = passthrough.map { row -> [row[0].id, row[0], row[1..-1]].flatten() } ch_annotated_meta = Channel.empty() + // Can run awk in script mode with a file from assets or with a setup of command line args if(params.script_mode) { AWK_SCRIPT ( report, script ) diff --git a/subworkflows/local/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf index 2d518be0..ffc5f03b 100644 --- a/subworkflows/local/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -2,16 +2,16 @@ * Calculate bed fragments from bam file */ -params.samtools_options = [:] -params.samtools_view_options = [:] -params.bamtobed_options = [:] -params.awk_options = [:] -params.cut_options = [:] +params.samtools_options = [:] +params.samtools_view_options = [:] +params.bamtobed_options = [:] +params.awk_options = [:] +params.cut_options = [:] -include { SAMTOOLS_VIEW_SORT_STATS } from './samtools_view_sort_stats' addParams( samtools_options: params.samtools_options , samtools_view_options: params.samtools_view_options) -include { BEDTOOLS_BAMTOBED } from '../../modules/nf-core/software/bedtools/bamtobed/main' addParams( options: params.bamtobed_options) -include { AWK } from '../../modules/local/awk' addParams( options: params.awk_options) -include { CUT } from '../../modules/local/cut' addParams( options: params.cut_options) +include { SAMTOOLS_VIEW_SORT_STATS } from './samtools_view_sort_stats' addParams( samtools_options: params.samtools_options, samtools_view_options: params.samtools_view_options ) +include { BEDTOOLS_BAMTOBED } from '../../modules/nf-core/software/bedtools/bamtobed/main' addParams( options: params.bamtobed_options ) +include { AWK } from '../../modules/local/awk' addParams( options: params.awk_options ) +include { CUT } from '../../modules/local/cut' addParams( options: params.cut_options ) workflow CALCULATE_FRAGMENTS { take: @@ -33,74 +33,13 @@ workflow CALCULATE_FRAGMENTS { emit: bed = CUT.out.file - mapped_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam // channel: [ val(meta), [ bam ] ] - bai = SAMTOOLS_VIEW_SORT_STATS.out.bai // channel: [ val(meta), [ bai ] ] + mapped_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam // channel: [ val(meta), [ bam ] ] + bai = SAMTOOLS_VIEW_SORT_STATS.out.bai // channel: [ val(meta), [ bai ] ] stats = SAMTOOLS_VIEW_SORT_STATS.out.stats // channel: [ val(meta), [ stats ] ] flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat // channel: [ val(meta), [ flagstat ] ] idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = SAMTOOLS_VIEW_SORT_STATS.out.samtools_version // path: *.version.txt - bedtools_version = BEDTOOLS_BAMTOBED.out.version // path: *.version.txt - awk_version = AWK.out.version // path: *.version.txt + samtools_version = SAMTOOLS_VIEW_SORT_STATS.out.samtools_version // path: *.version.txt + bedtools_version = BEDTOOLS_BAMTOBED.out.version // path: *.version.txt + awk_version = AWK.out.version // path: *.version.txt } - - - - - - -// params.align_options = [:] -// params.spikein_align_options = [:] -// params.samtools_options = [:] -// params.samtools_spikein_options = [:] - -// include { BOWTIE2_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) -// include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) -// include { BAM_SORT_SAMTOOLS } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_options ) -// include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../../nf-core/subworkflow/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) - -// workflow ALIGN_BOWTIE2 { -// take: -// reads // channel: [ val(meta), [ reads ] ] -// index // channel: /path/to/bowtie2/target/index/ -// spikein_index // channel: /path/to/bowtie2/spikein/index/ - -// main: -// /* -// * Map reads with BOWTIE2 to target genome -// */ -// BOWTIE2_ALIGN ( reads, index ) - -// /* -// * Map reads with BOWTIE2 to spike-in genome -// */ -// BOWTIE2_SPIKEIN_ALIGN ( reads, spikein_index ) - -// /* -// * Sort, index BAM file and run samtools stats, flagstat and idxstats -// */ -// BAM_SORT_SAMTOOLS ( BOWTIE2_ALIGN.out.bam ) -// BAM_SORT_SAMTOOLS_SPIKEIN ( BOWTIE2_SPIKEIN_ALIGN.out.bam ) - -// emit: -// bowtie2_version = BOWTIE2_ALIGN.out.version // path: *.version.txt -// samtools_version = BAM_SORT_SAMTOOLS.out.version // path: *.version.txt - -// orig_bam = BOWTIE2_ALIGN.out.bam // channel: [ val(meta), bam ] -// orig_spikein_bam = BOWTIE2_SPIKEIN_ALIGN.out.bam // channel: [ val(meta), bam ] - -// bowtie2_log = BOWTIE2_ALIGN.out.log // channel: [ val(meta), log_final ] -// bowtie2_spikein_log = BOWTIE2_SPIKEIN_ALIGN.out.log // channel: [ val(meta), log_final ] - -// bam = BAM_SORT_SAMTOOLS.out.bam // channel: [ val(meta), [ bam ] ] -// bai = BAM_SORT_SAMTOOLS.out.bai // channel: [ val(meta), [ bai ] ] -// stats = BAM_SORT_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] -// flagstat = BAM_SORT_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] -// idxstats = BAM_SORT_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - -// spikein_bam = BAM_SORT_SAMTOOLS_SPIKEIN.out.bam // channel: [ val(meta), [ bam ] ] -// spikein_bai = BAM_SORT_SAMTOOLS_SPIKEIN.out.bai // channel: [ val(meta), [ bai ] ] -// spikein_stats = BAM_SORT_SAMTOOLS_SPIKEIN.out.stats // channel: [ val(meta), [ stats ] ] -// spikein_flagstat = BAM_SORT_SAMTOOLS_SPIKEIN.out.flagstat // channel: [ val(meta), [ flagstat ] ] -// spikein_idxstats = BAM_SORT_SAMTOOLS_SPIKEIN.out.idxstats // channel: [ val(meta), [ idxstats ] ] -// } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 4d26eb48..0da30ccd 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -7,15 +7,15 @@ params.spikein_genome_options = [:] params.bt2_index_options = [:] params.bt2_spikein_index_options = [:] -include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) -include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) -include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) -include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.genome_options ) -include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.spikein_genome_options ) -include { UNTAR as UNTAR_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_index_options ) -include { UNTAR as UNTAR_SPIKEIN_BT2_BUILD } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_spikein_index_options ) -include { BOWTIE2_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_index_options ) -include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_spikein_index_options ) +include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) +include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) +include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.genome_options ) +include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.spikein_genome_options ) +include { UNTAR as UNTAR_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_index_options ) +include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_spikein_index_options ) +include { BOWTIE2_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_index_options ) +include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_spikein_index_options ) workflow PREPARE_GENOME { take: @@ -63,9 +63,9 @@ workflow PREPARE_GENOME { /* * Uncompress Bowtie2 index or generate from scratch if required for both genomes */ - ch_bt2_index = Channel.empty() + ch_bt2_index = Channel.empty() ch_bt2_spikein_index = Channel.empty() - ch_bt2_version = Channel.empty() + ch_bt2_version = Channel.empty() if ('bowtie2' in prepare_tool_indices) { if (params.bowtie2) { if (params.bowtie2.endsWith('.tar.gz')) { @@ -80,9 +80,9 @@ workflow PREPARE_GENOME { if (params.spikein_bowtie2) { if (params.spikein_bowtie2.endsWith('.tar.gz')) { - ch_bt2_index = UNTAR_SPIKEIN_BT2_BUILD ( params.spikein_bowtie2 ).untar + ch_bt2_spikein_index = UNTAR_SPIKEIN_BT2_INDEX ( params.spikein_bowtie2 ).untar } else { - ch_bt2_index = file(params.spikein_bowtie2) + ch_bt2_spikein_index = file(params.spikein_bowtie2) } } else { ch_bt2_spikein_index = BOWTIE2_SPIKEIN_BUILD ( ch_spikein_fasta ).index @@ -90,11 +90,12 @@ workflow PREPARE_GENOME { } emit: - fasta = ch_fasta // path: genome.fasta - chrom_sizes = ch_chrom_sizes // path: genome.sizes - spikein_chrom_sizes = ch_spikein_chrom_sizes // path: genome.sizes - gtf = ch_gtf // path: genome.gtf - bowtie2_index = ch_bt2_index // path: bt2/index/ - bowtie2_spikein_index = ch_bt2_spikein_index // path: bt2/index/ - bowtie2_version = ch_bt2_version // path: *.version.txt + fasta = ch_fasta // path: genome.fasta + chrom_sizes = ch_chrom_sizes // path: genome.sizes + spikein_chrom_sizes = ch_spikein_chrom_sizes // path: genome.sizes + gtf = ch_gtf // path: genome.gtf + bowtie2_index = ch_bt2_index // path: bt2/index/ + bowtie2_spikein_index = ch_bt2_spikein_index // path: bt2/index/ + bowtie2_version = ch_bt2_version // path: *.version.txt + samtools_version = GET_CHROM_SIZES.out.version // path: *.version.txt } diff --git a/subworkflows/local/samtools_view_sort_stats.nf b/subworkflows/local/samtools_view_sort_stats.nf index 9a3e49eb..dc3a1f8f 100644 --- a/subworkflows/local/samtools_view_sort_stats.nf +++ b/subworkflows/local/samtools_view_sort_stats.nf @@ -5,9 +5,9 @@ params.samtools_view_options = [:] params.samtools_options = [:] -include { SAMTOOLS_VIEW } from '../../modules/nf-core/software/samtools/view/main' addParams( options: params.samtools_view_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) -include { BAM_STATS_SAMTOOLS } from '../nf-core/bam_stats_samtools' addParams( options: params.samtools_options ) +include { SAMTOOLS_VIEW } from '../../modules/nf-core/software/samtools/view/main' addParams( options: params.samtools_view_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from '../nf-core/bam_stats_samtools' addParams( options: params.samtools_options ) workflow SAMTOOLS_VIEW_SORT_STATS { take: @@ -26,10 +26,10 @@ workflow SAMTOOLS_VIEW_SORT_STATS { BAM_STATS_SAMTOOLS ( SAMTOOLS_VIEW.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) emit: - bam = SAMTOOLS_VIEW.out.bam // channel: [ val(meta), [ bam ] ] - bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] - stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt + bam = SAMTOOLS_VIEW.out.bam // channel: [ val(meta), [ bam ] ] + bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] + stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] + flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] + idxstats = BAM_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), [ idxstats ] ] + samtools_version = SAMTOOLS_INDEX.out.version // path: *.version.txt } diff --git a/subworkflows/nf-core/bam_sort_samtools.nf b/subworkflows/nf-core/bam_sort_samtools.nf index 775641c1..54b51087 100644 --- a/subworkflows/nf-core/bam_sort_samtools.nf +++ b/subworkflows/nf-core/bam_sort_samtools.nf @@ -6,8 +6,8 @@ params.options = [:] params.samtools_sort_options = [:] include { SAMTOOLS_SORT } from '../../modules/nf-core/software/samtools/sort/main' addParams( options: params.samtools_sort_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.options ) -include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) workflow BAM_SORT_SAMTOOLS { take: diff --git a/subworkflows/nf-core/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf index 55567e52..7cc719af 100644 --- a/subworkflows/nf-core/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -8,7 +8,7 @@ params.control_only = false include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) -include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_options ) workflow MARK_DUPLICATES_PICARD { take: @@ -39,7 +39,7 @@ workflow MARK_DUPLICATES_PICARD { metrics = PICARD_MARKDUPLICATES.out.metrics version = PICARD_MARKDUPLICATES.out.version - out_bam = out_bam.mix( ch_split.target ) + out_bam = out_bam.mix ( ch_split.target ) } /* diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index b1fe9ce7..6348e02d 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -96,10 +96,10 @@ if (params.publish_align_intermed || params.skip_markduplicates) { samtools_spikein_sort_options.publish_files.put('bai','') } -def samtools_view_options = modules['samtools_view'] +def samtools_view_options = modules['samtools_view_qfilter'] def samtools_qfilter_options = modules['samtools_qfilter'] if (params.minimum_alignment_q_score > 0) { - samtools_view_options.args = "-q " + params.minimum_alignment_q_score + samtools_view_options.args = "-b -q " + params.minimum_alignment_q_score } if (params.publish_align_intermed) { samtools_view_options.publish_files = ['bam':''] @@ -130,12 +130,12 @@ def awk_dt_frag_options = modules['awk_dt_frag'] /* * MODULES */ +include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) include { CAT_FASTQ } from '../modules/local/cat_fastq' addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) include { IGV_SESSION } from '../modules/local/igv_session' addParams( options: modules['igv'] ) -include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) -include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) include { EXPORT_META } from '../modules/local/export_meta' addParams( options: modules['export_meta'] ) include { GENERATE_REPORTS } from '../modules/local/generate_reports' addParams( options: modules['generate_reports'] ) include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) @@ -153,17 +153,36 @@ include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) -include { ALIGN_BOWTIE2 } from '../subworkflows/local/align_bowtie2' addParams( align_options: bowtie2_align_options, - spikein_align_options: bowtie2_spikein_align_options, - samtools_options: samtools_sort_options, +include { ALIGN_BOWTIE2 } from '../subworkflows/local/align_bowtie2' addParams( align_options: bowtie2_align_options, + spikein_align_options: bowtie2_spikein_align_options, + samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from '../subworkflows/local/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options) -include { CALCULATE_FRAGMENTS } from '../subworkflows/local/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], samtools_view_options: modules['calc_frag_samtools_view'], bamtobed_options: modules['calc_frag_bamtobed'], awk_options: modules['calc_frag_awk'], cut_options: modules['calc_frag_cut']) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_options, meta_suffix: '_target', script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, meta_suffix: '_spikein', script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', meta_prefix: 'dedup_', script_mode: false) -include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dt_frag_options, meta_suffix: '', meta_prefix: '', script_mode: true) +include { SAMTOOLS_VIEW_SORT_STATS } from '../subworkflows/local/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, + samtools_view_options: samtools_view_options ) + +include { CALCULATE_FRAGMENTS } from '../subworkflows/local/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], + samtools_view_options: modules['calc_frag_samtools_view'], + bamtobed_options: modules['calc_frag_bamtobed'], + awk_options: modules['calc_frag_awk'], + cut_options: modules['calc_frag_cut'] ) + +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_options, + meta_suffix: '_target', + script_mode: true) + +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, + meta_suffix: '_spikein', + script_mode: true) + +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', + meta_prefix: 'dedup_', + script_mode: false ) + +include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dt_frag_options, + meta_suffix: '', + meta_prefix: '', + script_mode: true) /* ======================================================================================== @@ -204,309 +223,404 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Uncompress and prepare reference genome files */ - // PREPARE_GENOME ( - // prepareToolIndices - // ) - // ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) + PREPARE_GENOME ( + prepareToolIndices + ) + ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.samtools_version.ifEmpty(null)) /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ - // INPUT_CHECK ( - // ch_input - // ) - // .map { - // meta, fastq -> - // meta.id = meta.id.split('_')[0..-2].join('_') - // [ meta, fastq ] } - // .groupTuple(by: [0]) - // // .map { it -> [ it[0], it[1].flatten() ] } - // // .set { ch_cat_fastq } - // .branch { - // meta, fastq -> - // single : fastq.size() == 1 - // return [ meta, fastq.flatten() ] - // multiple: fastq.size() > 1 - // return [ meta, fastq.flatten() ] - // } - // .set { ch_fastq } + INPUT_CHECK ( + ch_input + ) + .map { + meta, fastq -> + meta.id = meta.id.split('_')[0..-2].join('_') + [ meta, fastq ] } + .groupTuple(by: [0]) + .branch { + meta, fastq -> + single : fastq.size() == 1 + return [ meta, fastq.flatten() ] + multiple: fastq.size() > 1 + return [ meta, fastq.flatten() ] + } + .set { ch_fastq } /* * MODULE: Concatenate FastQ files from same sample if required */ - // CAT_FASTQ ( - // ch_fastq.multiple - // ) - // .mix(ch_fastq.single) - // .set { ch_cat_fastq } + CAT_FASTQ ( + ch_fastq.multiple + ) + .mix(ch_fastq.single) + .set { ch_cat_fastq } + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [READS]] + //ch_cat_fastq | view /* * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC */ - // FASTQC_TRIMGALORE ( - // ch_cat_fastq, - // params.skip_fastqc || params.skip_qc, - // params.skip_trimming - // ) - // ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads - // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) - // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + FASTQC_TRIMGALORE ( + ch_cat_fastq, + params.skip_fastqc || params.skip_qc, + params.skip_trimming + ) + ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [READS]] + //FASTQC_TRIMGALORE.out.reads | view /* * SUBWORKFLOW: Alignment to target and spikein genome using botwtie2 */ - // ch_orig_bam = Channel.empty() - // ch_orig_spikein_bam = Channel.empty() - // ch_bowtie2_log = Channel.empty() - // ch_bowtie2_spikein_log = Channel.empty() - // ch_samtools_bam = Channel.empty() - // ch_samtools_bai = Channel.empty() - // ch_samtools_stats = Channel.empty() - // ch_samtools_flagstat = Channel.empty() - // ch_samtools_idxstats = Channel.empty() - // ch_samtools_spikein_bam = Channel.empty() - // ch_samtools_spikein_bai = Channel.empty() - // ch_samtools_spikein_stats = Channel.empty() - // ch_samtools_spikein_flagstat = Channel.empty() - // ch_samtools_spikein_idxstats = Channel.empty() - // if (params.aligner == 'bowtie2') { - // ALIGN_BOWTIE2 ( - // ch_trimmed_reads, - // PREPARE_GENOME.out.bowtie2_index, - // PREPARE_GENOME.out.bowtie2_spikein_index - // ) - // ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.samtools_version.first().ifEmpty(null)) - // ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam - // ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam - // ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log - // ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log - - // ch_samtools_bam = ALIGN_BOWTIE2.out.bam - // ch_samtools_bai = ALIGN_BOWTIE2.out.bai - // ch_samtools_stats = ALIGN_BOWTIE2.out.stats - // ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat - // ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats - - // ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam - // ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai - // ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats - // ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat - // ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats - // } + ch_orig_bam = Channel.empty() + ch_orig_spikein_bam = Channel.empty() + ch_bowtie2_log = Channel.empty() + ch_bowtie2_spikein_log = Channel.empty() + ch_samtools_bam = Channel.empty() + ch_samtools_bai = Channel.empty() + ch_samtools_stats = Channel.empty() + ch_samtools_flagstat = Channel.empty() + ch_samtools_idxstats = Channel.empty() + ch_samtools_spikein_bam = Channel.empty() + ch_samtools_spikein_bai = Channel.empty() + ch_samtools_spikein_stats = Channel.empty() + ch_samtools_spikein_flagstat = Channel.empty() + ch_samtools_spikein_idxstats = Channel.empty() + if (params.aligner == 'bowtie2') { + ALIGN_BOWTIE2 ( + ch_trimmed_reads, + PREPARE_GENOME.out.bowtie2_index, + PREPARE_GENOME.out.bowtie2_spikein_index + ) + ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) + ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam + ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam + ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log + ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log + + ch_samtools_bam = ALIGN_BOWTIE2.out.bam + ch_samtools_bai = ALIGN_BOWTIE2.out.bai + ch_samtools_stats = ALIGN_BOWTIE2.out.stats + ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat + ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats + + ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam + ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai + ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats + ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat + ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats + } + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] + //ch_samtools_bam | view /* * SUBWORKFLOW: Filter reads based on quality metrics * http://biofinysics.blogspot.com/2014/05/how-does-bowtie2-assign-mapq-scores.html */ - // if (params.minimum_alignment_q_score > 0) { - // SAMTOOLS_VIEW_SORT_STATS ( - // ch_samtools_bam - // ) - // ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam - // ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai - // ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats - // ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat - // ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats - // } + if (params.minimum_alignment_q_score > 0) { + SAMTOOLS_VIEW_SORT_STATS ( + ch_samtools_bam + ) + ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam + ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai + ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats + ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat + ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats + } + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] + //ch_samtools_bam | view /* * SUBWORKFLOW: Mark duplicates on all samples */ - // ch_markduplicates_multiqc = Channel.empty() - // if (!params.skip_markduplicates) { - // MARK_DUPLICATES_PICARD ( - // ch_samtools_bam - // ) - // ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam - // ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai - // ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats - // ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat - // ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats - // ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics - // ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) - // } + ch_markduplicates_multiqc = Channel.empty() + if (!params.skip_markduplicates) { + MARK_DUPLICATES_PICARD ( + ch_samtools_bam + ) + ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam + ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai + ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats + ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat + ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats + ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics + ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) + } + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] + //ch_samtools_bam | view /* - * SUBWORKFLOW: Remove duplicates + * SUBWORKFLOW: Remove duplicates - default is on IgG controls only */ - // ch_dedup_multiqc = Channel.empty() - // if (!params.skip_markduplicates && !params.skip_removeduplicates) { - // DEDUP_PICARD ( - // ch_samtools_bam - // ) - // ch_samtools_bam = DEDUP_PICARD.out.bam - // ch_samtools_bai = DEDUP_PICARD.out.bai - // ch_samtools_stats = DEDUP_PICARD.out.stats - // ch_samtools_flagstat = DEDUP_PICARD.out.flagstat - // ch_samtools_idxstats = DEDUP_PICARD.out.idxstats - // ch_dedup_multiqc = DEDUP_PICARD.out.metrics - // } + ch_dedup_multiqc = Channel.empty() + if (!params.skip_markduplicates && !params.skip_removeduplicates) { + DEDUP_PICARD ( + ch_samtools_bam + ) + ch_samtools_bam = DEDUP_PICARD.out.bam + ch_samtools_bai = DEDUP_PICARD.out.bai + ch_samtools_stats = DEDUP_PICARD.out.stats + ch_samtools_flagstat = DEDUP_PICARD.out.flagstat + ch_samtools_idxstats = DEDUP_PICARD.out.idxstats + ch_dedup_multiqc = DEDUP_PICARD.out.metrics + } + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] + //ch_samtools_bam | view /* - * SUBWORKFLOW: Annotate meta data with aligner stats + * SUBWORKFLOW: Annotate meta-data with aligner stats for target and spike-in + * the meta-data is annotated additivley so we only need to track the final channel output */ - // ANNOTATE_BT2_META( ch_samtools_bam, ch_bowtie2_log, ch_bt2_to_csv_awk) - // ANNOTATE_BT2_SPIKEIN_META( ch_samtools_bam, ch_bowtie2_spikein_log, ch_bt2_to_csv_awk) + if (params.aligner == 'bowtie2') { + ANNOTATE_BT2_META ( + ch_samtools_bam, + ch_bowtie2_log, + ch_bt2_to_csv_awk + ) + + ANNOTATE_BT2_SPIKEIN_META ( + ANNOTATE_BT2_META.out.output, + ch_bowtie2_spikein_log, + ch_bt2_to_csv_awk + ) + ch_samtools_bam = ANNOTATE_BT2_SPIKEIN_META.out.output + } + // META-DATA example state: + //[[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764], [BAM]] + //ch_samtools_bam | view + //EXPORT_META ( ch_annotated_meta.collect{ it[0] } ) /* - * CHANNEL: Combine merge spikein meta data with main data stream + * CHANNEL: Calculate scale factor for each sample based on a constant devided by the number + * of reads aligned to the spike-in genome */ - // ANNOTATE_BT2_SPIKEIN_META.out.output - // .map { row -> [row[0].id, row[0] ].flatten()} - // .set { ch_spikein_bt2_meta } - - // ANNOTATE_BT2_META.out.output | view - - // ANNOTATE_BT2_META.out.output - // .map { row -> [row[0].id, row ].flatten()} - // .join ( ch_spikein_bt2_meta ) - // .map { row -> [ row[1] << row[3], row[2] ] } - // .set { ch_combined_meta } - - // ANNOTATE_BT2_SPIKEIN_META.out.output | view + ch_samtools_bam + .map { row -> [ row[0].id, params.normalisation_c / (row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger()) ] } + .set { ch_scale_factor } + // EXAMPLE CHANNEL STRUCT: [id, scale_factor] + //ch_scale_factor | view /* - * CHANNEL: Calculate scale factor for each sample and join to main data flow + * CHANNEL: Create a channel with the scale factor as a seperate value */ - // ANNOTATE_BT2_SPIKEIN_META.out.output - // .map { row -> [ row[0].id, params.normalisation_c / (row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger()) ] } - // .set { ch_scale_factor } + ch_samtools_bam + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_scale_factor ) + .map { row -> row[1..(row.size() - 1)] } + .map { row -> + row[0].put('scale_factor', row[2]) + [ row[0], row[1], row[2] ] } + .set { ch_samtools_bam_scale } + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], BAM, SCALE_FACTOR] + //ch_samtools_bam_scale | view - // ch_combined_meta - // .map { row -> [row[0].id, row ].flatten()} - // .join ( ch_scale_factor ) - // .map { row -> row[1..(row.size() - 1)] } - // .map { row -> - // row[0].put('scale_factor', row[2]) - // [ row[0], row[1], row[2] ] } - // .set { ch_samtools_bam_scale } - - // Create channel without scale as seperate value - // ch_samtools_bam_scale - // .map { row -> [ row[0], row[1] ] } - // .set { ch_samtools_bam_meta } + /* + * CHANNEL: Add the scale factor values to the main meta-data stream + */ + ch_samtools_bam_scale + .map { row -> [ row[0], row[1] ] } + .set { ch_samtools_bam_sf } + ch_samtools_bam = ch_samtools_bam_sf + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], BAM] + //ch_samtools_bam | view /* * SUBWORKFLOW: Calculate fragment bed from bams + * - Filter for mapped reads + * - Convert to bed file + * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp + * - Only extract the fragment related columns using cut */ - // CALCULATE_FRAGMENTS ( - // ch_samtools_bam_meta - // ) + CALCULATE_FRAGMENTS ( + ch_samtools_bam + ) + ch_software_versions = ch_software_versions.mix(CALCULATE_FRAGMENTS.out.bedtools_version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: NO CHANGE + //CALCULATE_FRAGMENTS.out.bed | view - // if(!params.skip_coverage) { - /* - * MODULE: Convert to bedgraph - */ - // BEDTOOLS_GENOMECOV_SCALE ( - // ch_samtools_bam_scale - // ) - // ch_bedtools_bedgraph = BEDTOOLS_GENOMECOV_SCALE.out.bedgraph - // ch_software_versions = ch_software_versions.mix(BEDTOOLS_GENOMECOV_SCALE.out.version.first().ifEmpty(null)) + /* + * MODULE: Convert bam files to bedgraph + */ + BEDTOOLS_GENOMECOV_SCALE ( + ch_samtools_bam_scale + ) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], BEDGRAPH] + //BEDTOOLS_GENOMECOV_SCALE.out.bedgraph | view + /* + * MODULE: Clip off bedgraphs so none overlap beyond chromosome edge + */ + UCSC_BEDCLIP ( + BEDTOOLS_GENOMECOV_SCALE.out.bedgraph, + PREPARE_GENOME.out.chrom_sizes + ) + //EXAMPLE CHANNEL STRUCT: NO CHANGE + //UCSC_BEDCLIP.out.bedgraph | view + + /* + * MODULE: Convert bedgraph to bigwig + */ + UCSC_BEDGRAPHTOBIGWIG ( + UCSC_BEDCLIP.out.bedgraph, + PREPARE_GENOME.out.chrom_sizes + ) + ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], BIGWIG] + //UCSC_BEDGRAPHTOBIGWIG.out.bigwig | view + + ch_seacr_bed = Channel.empty() + if(!params.skip_peakcalling) { /* * CHANNEL: Separate bedgraphs into target/control pairings for each replicate */ - // ch_bedtools_bedgraph.branch { it -> - // target: it[0].group != 'igg' - // control: it[0].group == 'igg' - // } - // .set { ch_bedgraph_split } - + BEDTOOLS_GENOMECOV_SCALE.out.bedgraph.branch { it -> + target: it[0].group != 'igg' + control: it[0].group == 'igg' + } + .set { ch_bedgraph_split } + //EXAMPLE CHANNEL STRUCT: NO CHANGE + //ch_bedgraph_split.target | view + //ch_bedgraph_split.control | view + + if (params.igg_control) { + /* + * CHANNEL: Recombines and maps igg control replicates to the target replicate + */ + ch_bedgraph_split.target + .combine(ch_bedgraph_split.control) + .filter { row -> row[0].replicate == row[2].replicate } + .map { row -> [ row[0], row[1], row[3] ] } + .set { ch_bedgraph_combined } + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], TARGET_BEDGRAPH, CONTROL_BEDGRAPH] + //ch_bedgraph_combined | view + + /* + * MODULE: Call peaks with IgG control + */ + SEACR_CALLPEAK ( + ch_bedgraph_combined + ) + ch_seacr_bed = SEACR_CALLPEAK.out.bed + ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], BED] + //SEACR_CALLPEAK.out.bed | view + } + else { + /* + * CHANNEL: Load peak threshold into channel + */ + ch_peak_threshold = Channel.value(params.peak_threshold) + + /* + * MODULE: Call peaks without IgG COntrol + */ + SEACR_NO_IGG ( + ch_bedgraph_split.target, + ch_peak_threshold.collect() + ) + ch_seacr_bed = SEACR_NO_IGG.out.bed + ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], BED] + //SEACR_NO_IGG.out.bed | view + } + } + + if(!params.skip_igv) { /* - * MODULE: Call peaks with IgG COntrol + * MODULE: Create igv session */ - // if (params.igg_control) { - - // ch_bedgraph_split.target - // .combine(ch_bedgraph_split.control) - // .filter { row -> row[0].replicate == row[2].replicate } - // .map { row -> [ row[0], row[1], row[3] ] } - // .set { ch_bedgraph_combined } - - // SEACR_CALLPEAK ( - // ch_bedgraph_combined - // ) - // ch_seacr_bed = SEACR_CALLPEAK.out.bed - // ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) - - // } - + IGV_SESSION ( + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.gtf, + ch_seacr_bed.collect{it[1]}.ifEmpty([]), + UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) + ) + } + + if(!params.skip_reporting && !params.skip_peakcalling) { /* - * MODULE: Call peaks without IgG COntrol - */ - - // if (!params.igg_control) { - - // ch_peak_threshold = Channel.value(params.peak_threshold) - - // SEACR_NO_IGG ( - // ch_bedgraph_split.target, - // ch_peak_threshold.collect() - // ) - // ch_seacr_bed = SEACR_NO_IGG.out.bed - // ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) - - // } + * CHANNEL: Collect SEACR group names that are not igg for reporting + */ + ch_seacr_bed + .map{ row -> row[0].group} + .unique() + .collect() + .set { ch_groups_no_igg } + //ch_groups_no_igg | view /* - * CHANNEL: Collect SEACR group names + * CHANNEL: Remove IgG from bigwig channel */ - // ch_seacr_bed - // //.map{ row -> row[0].find{ it.key == "group" }?.value() } - // .map{ row -> row[0].group} - // .unique() - // .collect() - // .set { ch_groups_no_igg } + UCSC_BEDGRAPHTOBIGWIG.out.bigwig + .filter { it[0].group != 'igg' } + .set { ch_bigwig_no_igg } + //ch_bigwig_no_igg | view /* * MODULE: DESeq2 QC Analysis */ // DESEQ2_DIFF ( - // ch_groups_no_igg, - // ch_seacr_bed.collect{it[1]}, - // ch_samtools_bam.collect{it[1]} + // ch_groups_no_igg, + // ch_seacr_bed.collect{it[1]}, + // ch_samtools_bam.collect{it[1]} // ) // ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) /* - * MODULE: Clip off-chromosome peaks + * MODULE: Compute DeepTools matrix used in heatmap plotting */ - // UCSC_BEDCLIP ( - // ch_bedtools_bedgraph, - // PREPARE_GENOME.out.chrom_sizes - // ) + DEEPTOOLS_COMPUTEMATRIX_GENE ( + ch_bigwig_no_igg, + ch_gene_bed + ) + DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix | view + } + + + + + + + + + + + - /* - * MODULE: Convert to bigwig - */ - // UCSC_BEDGRAPHTOBIGWIG ( - // UCSC_BEDCLIP.out.bedgraph, - // PREPARE_GENOME.out.chrom_sizes - // ) - // ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) - /* - * MODULE: Create igv session - */ - // IGV_SESSION ( - // PREPARE_GENOME.out.fasta, - // PREPARE_GENOME.out.gtf, - // ch_seacr_bed.collect{it[1]}.ifEmpty([]), - // UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) - // ) - //} - // filter igg from bigwigs - // UCSC_BEDGRAPHTOBIGWIG.out.bigwig - // .filter { it[0].group != 'igg' } - // .set { ch_bigwig_no_igg } //DEEPTOOLS HEATMAPS //HEATMAP OVER TRANSCRIPTION UNITS - // DEEPTOOLS_COMPUTEMATRIX_GENE ( - // ch_bigwig_no_igg, - // ch_gene_bed - // ) + // DEEPTOOLS_PLOTHEATMAP_GENE ( // DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix @@ -608,12 +722,12 @@ workflow CUTANDRUN { // ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.first().ifEmpty(null)) //} - // /* - // * MODULE: Collect software versions used in pipeline - // */ - // GET_SOFTWARE_VERSIONS ( - // ch_software_versions.map { it }.collect() - // ) + /* + * MODULE: Collect software versions used in pipeline + */ + GET_SOFTWARE_VERSIONS ( + ch_software_versions.map { it }.collect() + ) // /* // * MODULE: Multiqc From 3dbdb64eb041633a492e77e715ad28b7cf2722c2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 17 May 2021 15:34:39 +0100 Subject: [PATCH 175/675] Restructure complete --- modules/local/awk.nf | 2 +- .../software/samtools/custom_view/main.nf | 2 +- nextflow.config | 11 +- nextflow_schema.json | 2 +- subworkflows/local/prepare_genome.nf | 14 +- workflows/cutandrun.nf | 299 ++++++++++-------- 6 files changed, 191 insertions(+), 139 deletions(-) diff --git a/modules/local/awk.nf b/modules/local/awk.nf index 789d21d7..b34fc754 100644 --- a/modules/local/awk.nf +++ b/modules/local/awk.nf @@ -25,7 +25,7 @@ process AWK { output: tuple val(meta), path("*.awk.*"), emit: file - path "*.version.txt", emit: version + path "*.version.txt", emit: version script: def software = getSoftwareName(task.process) diff --git a/modules/local/software/samtools/custom_view/main.nf b/modules/local/software/samtools/custom_view/main.nf index 5587e153..27fdf6f1 100644 --- a/modules/local/software/samtools/custom_view/main.nf +++ b/modules/local/software/samtools/custom_view/main.nf @@ -23,7 +23,7 @@ process SAMTOOLS_CUSTOMVIEW { tuple val(meta), path(bai) output: - tuple val(meta), path("*.txt"), emit: tsv + tuple val(meta), path("*.txt") , emit: tsv path "*.version.log" , emit: version script: diff --git a/nextflow.config b/nextflow.config index 55942cd2..c7d2bcdc 100644 --- a/nextflow.config +++ b/nextflow.config @@ -50,7 +50,7 @@ params { // SEACR Peak Calling igg_control = true - peak_threshold = '0.05' + peak_threshold = 0.05 skip_peakcalling = false // Reporting and Visualisation @@ -58,12 +58,10 @@ params { skip_reporting = false // Boilerplate options - enable_conda = false - clusterOptions = null outdir = './results' publish_dir_mode = 'copy' multiqc_config = null - multiqc_title = 'This is a test title' + multiqc_title = null email = null email_on_fail = null max_multiqc_email_size = '25.MB' @@ -73,12 +71,17 @@ params { igenomes_base = 's3://ngi-igenomes/igenomes/' tracedir = "${params.outdir}/pipeline_info" igenomes_ignore = false + validate_params = true + show_hidden_params = false + schema_ignore_params = 'genomes,modules' + enable_conda = false singularity_pull_docker_container = false // Config options custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" hostnames = [:] + config_profile_name = null config_profile_description = null config_profile_contact = null config_profile_url = null diff --git a/nextflow_schema.json b/nextflow_schema.json index 27781e29..dfa0d903 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -338,7 +338,7 @@ "type": "string" }, "igg_control": { - "type": "string", + "type": "boolean", "default": "true" }, "peak_threshold": { diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 0da30ccd..660b73e0 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -9,7 +9,8 @@ params.bt2_spikein_index_options = [:] include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) -include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) +include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_BED } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.genome_options ) include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.spikein_genome_options ) include { UNTAR as UNTAR_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_index_options ) @@ -50,6 +51,16 @@ workflow PREPARE_GENOME { ch_gtf = file(params.gtf) } + /* + * Uncompress BED annotation file + */ + ch_gene_bed = Channel.empty() + if (params.gene_bed.endsWith('.gz')) { + ch_gene_bed = GUNZIP_BED ( params.gene_bed ).gunzip + } else { + ch_gene_bed = file(params.gene_bed) + } + /* * Create chromosome sizes file */ @@ -94,6 +105,7 @@ workflow PREPARE_GENOME { chrom_sizes = ch_chrom_sizes // path: genome.sizes spikein_chrom_sizes = ch_spikein_chrom_sizes // path: genome.sizes gtf = ch_gtf // path: genome.gtf + bed = ch_gene_bed // path: genome.bed bowtie2_index = ch_bt2_index // path: bt2/index/ bowtie2_spikein_index = ch_bt2_spikein_index // path: bt2/index/ bowtie2_version = ch_bt2_version // path: *.version.txt diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 6348e02d..430a722e 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -25,7 +25,6 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters that cannot be checked in the groovy lib as we want a channel for them if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, 'Genome blacklist file not specified!' } -if (params.gene_bed) { ch_gene_bed = file(params.gene_bed) } else { exit 1, 'Genome gene bed file not specified!' } // Save AWS IGenomes file containing annotation version def anno_readme = params.genomes[ params.genome ]?.readme @@ -193,21 +192,21 @@ include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/loc /* * MODULES */ -include { UCSC_BEDGRAPHTOBIGWIG } from '../modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: modules['ucsc_bedgraphtobigwig'] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_gene'] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_peaks'] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) -include { SAMTOOLS_SORT } from '../modules/nf-core/software/samtools/sort/main.nf' addParams( options: modules['samtools_sort'] ) -include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) -include { UCSC_BEDCLIP } from '../modules/nf-core/software/ucsc/bedclip/main' addParams( options: modules['ucsc_bedclip'] ) +include { UCSC_BEDGRAPHTOBIGWIG } from '../modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: modules['ucsc_bedgraphtobigwig'] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_gene'] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_peaks'] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) +include { SAMTOOLS_SORT } from '../modules/nf-core/software/samtools/sort/main.nf' addParams( options: modules['samtools_sort'] ) +include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) +include { UCSC_BEDCLIP } from '../modules/nf-core/software/ucsc/bedclip/main' addParams( options: modules['ucsc_bedclip'] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { FASTQC_TRIMGALORE } from '../subworkflows/nf-core/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) -include { MARK_DUPLICATES_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) +include { FASTQC_TRIMGALORE } from '../subworkflows/nf-core/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) +include { MARK_DUPLICATES_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) /* ======================================================================================== @@ -393,7 +392,7 @@ workflow CUTANDRUN { // META-DATA example state: //[[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764], [BAM]] + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764], BAM] //ch_samtools_bam | view //EXPORT_META ( ch_annotated_meta.collect{ it[0] } ) @@ -587,89 +586,153 @@ workflow CUTANDRUN { /* * MODULE: DESeq2 QC Analysis */ - // DESEQ2_DIFF ( - // ch_groups_no_igg, - // ch_seacr_bed.collect{it[1]}, - // ch_samtools_bam.collect{it[1]} - // ) - // ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) + DESEQ2_DIFF ( + ch_groups_no_igg, + ch_seacr_bed.collect{it[1]}, + ch_samtools_bam.collect{it[1]} + ) + ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) /* - * MODULE: Compute DeepTools matrix used in heatmap plotting + * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes */ DEEPTOOLS_COMPUTEMATRIX_GENE ( ch_bigwig_no_igg, - ch_gene_bed + PREPARE_GENOME.out.bed ) - DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix | view - } - - - - - - - + ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_GENE.out.version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], MATRIX] + //DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix | view + /* + * MODULE: Calculate DeepTools heatmap + */ + DEEPTOOLS_PLOTHEATMAP_GENE ( + DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix + ) + /* + * MODULE: Extract max signal from peak beds + */ + AWK_EDIT_PEAK_BED ( + ch_seacr_bed + ) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], TEXT] + //AWK_EDIT_PEAK_BED.out.file | view + /* + * CHANNEL: Structure output for join on id + */ + AWK_EDIT_PEAK_BED.out.file + .map { row -> [row[0].id, row ].flatten()} + .set { ch_seacr_bed_id } + //ch_seacr_bed_id | view + /* + * CHANNEL: Join beds and bigwigs on id + */ + ch_bigwig_no_igg + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_seacr_bed_id ) + .set { ch_dt_peaks } + //ch_dt_peaks | view + + ch_dt_peaks + .map { row -> row[1,2] } + .set { ch_ordered_bigwig } + //ch_ordered_bigwig | view + + ch_dt_peaks + .map { row -> row[-1] } + .set { ch_ordered_seacr_max } + //ch_ordered_seacr_max | view + /* + * MODULE: Compute DeepTools matrix used in heatmap plotting for Peaks + */ + DEEPTOOLS_COMPUTEMATRIX_PEAKS ( + ch_ordered_bigwig, + ch_ordered_seacr_max + ) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], MATRIX] + //DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix | view + + /* + * MODULE: Calculate DeepTools heatmap + */ + DEEPTOOLS_PLOTHEATMAP_PEAKS ( + DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix + ) + /* + * SUBWORKFLOW: Annotate meta-data with duplication stats + */ + ANNOTATE_DEDUP_META( + ch_samtools_bam, + ch_markduplicates_multiqc, + ch_dummy_file.collect() + ) + ch_samtools_bam = ANNOTATE_DEDUP_META.out.output + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000, dedup_library:unknown library, dedup_unpaired_reads_examined:0, dedup_read_pairs_examined:350, dedup_secondary_or_supplementary_rds:0, + // dedup_unmapped_reads:0, dedup_unpaired_read_duplicates:0, dedup_read_pair_duplicates:0, dedup_read_pair_optical_duplicates:0, dedup_percent_duplication:0, + // dedup_estimated_library_size:], BAM] + //ch_samtools_bam | view + /* + * MODULE: Bin the fragments into 500bp bins ready for downstream reporting + */ + AWK_FRAG_BIN( + CALCULATE_FRAGMENTS.out.bed + ) + //AWK_FRAG_BIN.out.file | view - //DEEPTOOLS HEATMAPS - //HEATMAP OVER TRANSCRIPTION UNITS - - - // DEEPTOOLS_PLOTHEATMAP_GENE ( - // DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix - // ) - - //HEATMAP ON PEAKS - // extract max signal region from SEACR bed - // AWK_EDIT_PEAK_BED ( - // ch_seacr_bed - // ) - // ch_software_versions = ch_software_versions.mix(AWK_EDIT_PEAK_BED.out.version.first().ifEmpty(null)) - - // order bigwig and bed channels such that they match on id - // ch_bigwig_no_igg - // .map { row -> [row[0].id, row ].flatten()} - // .set { ch_bigwig_no_igg_id } - - // AWK_EDIT_PEAK_BED.out.file - // .map { row -> [row[0].id, row ].flatten()} - // .set { ch_seacr_max_id } - - // ch_bigwig_no_igg_id - // .join ( ch_seacr_max_id ) - // .set { ch_dt_peaks } - - // ch_dt_peaks - // .map { row -> row[1,2] } - // .set { ch_ordered_bigwig } - - // ch_dt_peaks - // .map { row -> row[-1] } - // .set { ch_ordered_seacr_max } + /* + * MODULE: Calculate fragment lengths + */ + SAMTOOLS_CUSTOMVIEW ( + ch_samtools_bam, + ch_samtools_bai + ) + //SAMTOOLS_CUSTOMVIEW.out.tsv | view - // DEEPTOOLS_COMPUTEMATRIX_PEAKS ( - // ch_ordered_bigwig, - // ch_ordered_seacr_max - // ) - // ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.version.first().ifEmpty(null)) + /* + * MODULE: Sort bams by mate pair ids (no position) + */ + SAMTOOLS_SORT ( + ch_samtools_bam + ) + //SAMTOOLS_SORT.out.bam | view - // DEEPTOOLS_PLOTHEATMAP_PEAKS ( - // DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix - // ) + /* + * MODULE: Export meta-data to csv file + */ + EXPORT_META ( + ch_samtools_bam.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + ) - /* - * MODULE: Reporting - */ - //if (!params.skip_reporting) { - //ANNOTATE_DEDUP_META(ch_samtools_bam_meta, ch_markduplicates_multiqc, ch_dummy_file.collect()) - //ANNOTATE_DEDUP_META.out.output | view + /* + * MODULE: Generate python reporting using mixture of meta-data and direct file processing + */ + GENERATE_REPORTS( + EXPORT_META.out.csv, + SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, + AWK_FRAG_BIN.out.file.collect{it[1]}, + ch_seacr_bed.collect{it[1]}, + SAMTOOLS_SORT.out.bam.collect{it[1]} + ) + ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) // ch_samtools_bam // .map { row -> [row[0].id, row[0], row[1] ] } @@ -687,40 +750,14 @@ workflow CUTANDRUN { // DEEPTOOLS_BAMPEFRAGMENTSIZE(ch_samtools_bam_bai, ch_blacklist) // //DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv | view - // ANNOTATE_DT_FRAG_META( ANNOTATE_DEDUP_META.out.output, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv, ch_dt_frag_to_csv_awk) //ANNOTATE_DT_FRAG_META.out.output | view - // AWK_FRAG_BIN( CALCULATE_FRAGMENTS.out.bed ) - - // SAMTOOLS_CUSTOMVIEW ( - // ch_samtools_bam, - // ch_samtools_bai - // ) - //SAMTOOLS_CUSTOMVIEW.out.txt | view - - // // Filter bam bai channels for non-igg only + // // Filter bam bai channels for non-igg only // ch_samtools_bam_bai // .filter { it[0].group != 'igg' } // .set { ch_no_igg_bam_bai } - - // Sort bams by mate pairs - // SAMTOOLS_SORT ( ch_samtools_bam ) - - // EXPORT_META ( - // ANNOTATE_DEDUP_META.out.output.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) - // //ch_samtools_bam_scale.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) - // ) - - // GENERATE_REPORTS( - // EXPORT_META.out.csv, - // SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, - // AWK_FRAG_BIN.out.file.collect{it[1]}, - // ch_seacr_bed.collect{it[1]}, - // SAMTOOLS_SORT.out.bam.collect{it[1]} - // ) - // ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.first().ifEmpty(null)) - //} + } /* * MODULE: Collect software versions used in pipeline @@ -729,30 +766,30 @@ workflow CUTANDRUN { ch_software_versions.map { it }.collect() ) - // /* - // * MODULE: Multiqc - // */ - // if (!params.skip_multiqc) { - // workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) - // ch_workflow_summary = Channel.value(workflow_summary) - - // MULTIQC ( - // ch_multiqc_config, - // ch_multiqc_custom_config.collect().ifEmpty([]), - // GET_SOFTWARE_VERSIONS.out.yaml.collect(), - // ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), - // FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), - // FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), - // FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), - // ch_bowtie2_log.collect{it[1]}.ifEmpty([]), - // ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), - // ch_samtools_stats.collect{it[1]}.ifEmpty([]), - // ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), - // ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), - // ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]) - // ) - // multiqc_report = MULTIQC.out.report.toList() - // } + /* + * MODULE: Multiqc + */ + if (!params.skip_multiqc) { + workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) + ch_workflow_summary = Channel.value(workflow_summary) + + MULTIQC ( + ch_multiqc_config, + ch_multiqc_custom_config.collect().ifEmpty([]), + GET_SOFTWARE_VERSIONS.out.yaml.collect(), + ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), + FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), + FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), + FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), + ch_bowtie2_log.collect{it[1]}.ifEmpty([]), + ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), + ch_samtools_stats.collect{it[1]}.ifEmpty([]), + ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), + ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), + ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]) + ) + multiqc_report = MULTIQC.out.report.toList() + } } //////////////////////////////////////////////////// From 49f5a1f6000bbdf90c28e380e603e67cb59d0d9a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 17 May 2021 15:34:48 +0100 Subject: [PATCH 176/675] Removed legacy lib --- lib/legacy/Checks.groovy | 101 ---------------- lib/legacy/Completion.groovy | 127 ------------------- lib/legacy/Headers.groovy | 43 ------- lib/legacy/Schema.groovy | 228 ----------------------------------- 4 files changed, 499 deletions(-) delete mode 100644 lib/legacy/Checks.groovy delete mode 100644 lib/legacy/Completion.groovy delete mode 100644 lib/legacy/Headers.groovy delete mode 100644 lib/legacy/Schema.groovy diff --git a/lib/legacy/Checks.groovy b/lib/legacy/Checks.groovy deleted file mode 100644 index 16747ed8..00000000 --- a/lib/legacy/Checks.groovy +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This file holds several functions used to perform standard checks for the nf-core pipeline template. - */ - -import org.yaml.snakeyaml.Yaml - -class Checks { - - static void check_conda_channels(log) { - Yaml parser = new Yaml() - def channels = [] - try { - def config = parser.load("conda config --show channels".execute().text) - channels = config.channels - } catch(NullPointerException | IOException e) { - log.warn "Could not verify conda channel configuration." - return - } - - // Check that all channels are present - def required_channels = ['conda-forge', 'bioconda', 'defaults'] - def conda_check_failed = !required_channels.every { ch -> ch in channels } - - // Check that they are in the right order - conda_check_failed |= !(channels.indexOf('conda-forge') < channels.indexOf('bioconda')) - conda_check_failed |= !(channels.indexOf('bioconda') < channels.indexOf('defaults')) - - if (conda_check_failed) { - log.warn "=============================================================================\n" + - " There is a problem with your Conda configuration!\n\n" + - " You will need to set-up the conda-forge and bioconda channels correctly.\n" + - " Please refer to https://bioconda.github.io/user/install.html#set-up-channels\n" + - " NB: The order of the channels matters!\n" + - "===================================================================================" - } - } - - static void aws_batch(workflow, params) { - if (workflow.profile.contains('awsbatch')) { - assert (params.awsqueue && params.awsregion) : "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" - // Check outdir paths to be S3 buckets if running on AWSBatch - // related: https://github.com/nextflow-io/nextflow/issues/813 - assert params.outdir.startsWith('s3:') : "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" - // Prevent trace files to be stored on S3 since S3 does not support rolling files. - assert !params.tracedir.startsWith('s3:') : "Specify a local tracedir or run without trace! S3 cannot be used for tracefiles." - } - } - - static void hostname(workflow, params, log) { - Map colors = Headers.log_colours(params.monochrome_logs) - if (params.hostnames) { - def hostname = "hostname".execute().text.trim() - params.hostnames.each { prof, hnames -> - hnames.each { hname -> - if (hostname.contains(hname) && !workflow.profile.contains(prof)) { - log.info "=${colors.yellow}====================================================${colors.reset}=\n" + - "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + - " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + - " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + - "=${colors.yellow}====================================================${colors.reset}=" - } - } - } - } - } - - // Citation string - private static String citation(workflow) { - return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - " https://doi.org/10.5281/zenodo.1400710\n\n" + - "* The nf-core framework\n" + - " https://dx.doi.org/10.1038/s41587-020-0439-x\n" + - " https://rdcu.be/b1GjZ\n\n" + - "* Software dependencies\n" + - " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" - } - - // Exit pipeline if incorrect --genome key provided - static void genome_exists(params, log) { - if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - log.error "=============================================================================\n" + - " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + - " Currently, the available genome keys are:\n" + - " ${params.genomes.keySet().join(", ")}\n" + - "=============================================================================" - System.exit(0) - } - } - - // Get attribute from genome config file e.g. fasta - static String get_genome_attribute(params, attribute) { - def val = '' - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - val = params.genomes[ params.genome ][ attribute ] - } - } - return val - } -} diff --git a/lib/legacy/Completion.groovy b/lib/legacy/Completion.groovy deleted file mode 100644 index e745c986..00000000 --- a/lib/legacy/Completion.groovy +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Functions to be run on completion of pipeline - */ - -class Completion { - static void email(workflow, params, summary_params, projectDir, log, multiqc_report=[]) { - - // Set up the e-mail variables - def subject = "[$workflow.manifest.name] Successful: $workflow.runName" - if (!workflow.success) { - subject = "[$workflow.manifest.name] FAILED: $workflow.runName" - } - - def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] - } - - def misc_fields = [:] - misc_fields['Date Started'] = workflow.start - misc_fields['Date Completed'] = workflow.complete - misc_fields['Pipeline script file path'] = workflow.scriptFile - misc_fields['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision - misc_fields['Nextflow Version'] = workflow.nextflow.version - misc_fields['Nextflow Build'] = workflow.nextflow.build - misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - - def email_fields = [:] - email_fields['version'] = workflow.manifest.version - email_fields['runName'] = workflow.runName - email_fields['success'] = workflow.success - email_fields['dateComplete'] = workflow.complete - email_fields['duration'] = workflow.duration - email_fields['exitStatus'] = workflow.exitStatus - email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - email_fields['errorReport'] = (workflow.errorReport ?: 'None') - email_fields['commandLine'] = workflow.commandLine - email_fields['projectDir'] = workflow.projectDir - email_fields['summary'] = summary << misc_fields - - // On success try attach the multiqc report - def mqc_report = null - try { - if (workflow.success && !params.skip_multiqc) { - mqc_report = multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { - if (mqc_report.size() > 1) { - log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" - } - mqc_report = mqc_report[0] - } - } - } catch (all) { - log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" - } - - // Check if we are only sending emails on failure - def email_address = params.email - if (!params.email && params.email_on_fail && !workflow.success) { - email_address = params.email_on_fail - } - - // Render the TXT template - def engine = new groovy.text.GStringTemplateEngine() - def tf = new File("$projectDir/assets/email_template.txt") - def txt_template = engine.createTemplate(tf).make(email_fields) - def email_txt = txt_template.toString() - - // Render the HTML template - def hf = new File("$projectDir/assets/email_template.html") - def html_template = engine.createTemplate(hf).make(email_fields) - def email_html = html_template.toString() - - // Render the sendmail template - def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()] - def sf = new File("$projectDir/assets/sendmail_template.txt") - def sendmail_template = engine.createTemplate(sf).make(smail_fields) - def sendmail_html = sendmail_template.toString() - - // Send the HTML e-mail - Map colors = Headers.log_colours(params.monochrome_logs) - if (email_address) { - try { - if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } - // Try to send HTML e-mail using sendmail - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" - } catch (all) { - // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] - if ( mqc_report.size() <= max_multiqc_email_size.toBytes() ) { - mail_cmd += [ '-A', mqc_report ] - } - mail_cmd.execute() << email_html - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" - } - } - - // Write summary e-mail HTML to a file - def output_d = new File("${params.outdir}/pipeline_info/") - if (!output_d.exists()) { - output_d.mkdirs() - } - def output_hf = new File(output_d, "pipeline_report.html") - output_hf.withWriter { w -> w << email_html } - def output_tf = new File(output_d, "pipeline_report.txt") - output_tf.withWriter { w -> w << email_txt } - } - - static void summary(workflow, params, log) { - Map colors = Headers.log_colours(params.monochrome_logs) - if (workflow.success) { - if (workflow.stats.ignoredCount == 0) { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" - } else { - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" - } - } else { - Checks.hostname(workflow, params, log) - log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" - } - } -} \ No newline at end of file diff --git a/lib/legacy/Headers.groovy b/lib/legacy/Headers.groovy deleted file mode 100644 index 15d1d388..00000000 --- a/lib/legacy/Headers.groovy +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file holds several functions used to render the nf-core ANSI header. - */ - -class Headers { - - private static Map log_colours(Boolean monochrome_logs) { - Map colorcodes = [:] - colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" - colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['yellow_bold'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" - colorcodes['red'] = monochrome_logs ? '' : "\033[1;91m" - return colorcodes - } - - static String dashed_line(monochrome_logs) { - Map colors = log_colours(monochrome_logs) - return "-${colors.dim}----------------------------------------------------${colors.reset}-" - } - - static String nf_core(workflow, monochrome_logs) { - Map colors = log_colours(monochrome_logs) - String.format( - """\n - ${dashed_line(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} - ${dashed_line(monochrome_logs)} - """.stripIndent() - ) - } -} diff --git a/lib/legacy/Schema.groovy b/lib/legacy/Schema.groovy deleted file mode 100644 index c2cad355..00000000 --- a/lib/legacy/Schema.groovy +++ /dev/null @@ -1,228 +0,0 @@ -/* - * This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. - */ - -import groovy.json.JsonSlurper - -class Schema { - /* - * This method tries to read a JSON params file - */ - private static LinkedHashMap params_load(String json_schema) { - def params_map = new LinkedHashMap() - try { - params_map = params_read(json_schema) - } catch (Exception e) { - println "Could not read parameters settings from JSON. $e" - params_map = new LinkedHashMap() - } - return params_map - } - - /* - Method to actually read in JSON file using Groovy. - Group (as Key), values are all parameters - - Parameter1 as Key, Description as Value - - Parameter2 as Key, Description as Value - .... - Group - - - */ - private static LinkedHashMap params_read(String json_schema) throws Exception { - def json = new File(json_schema).text - def Map json_params = (Map) new JsonSlurper().parseText(json).get('definitions') - /* Tree looks like this in nf-core schema - * definitions <- this is what the first get('definitions') gets us - group 1 - title - description - properties - parameter 1 - type - description - parameter 2 - type - description - group 2 - title - description - properties - parameter 1 - type - description - */ - def params_map = new LinkedHashMap() - json_params.each { key, val -> - def Map group = json_params."$key".properties // Gets the property object of the group - def title = json_params."$key".title - def sub_params = new LinkedHashMap() - group.each { innerkey, value -> - sub_params.put(innerkey, value) - } - params_map.put(title, sub_params) - } - return params_map - } - - /* - * Get maximum number of characters across all parameter names - */ - private static Integer params_max_chars(params_map) { - Integer max_chars = 0 - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (param.size() > max_chars) { - max_chars = param.size() - } - } - } - return max_chars - } - - /* - * Beautify parameters for --help - */ - private static String params_help(workflow, params, json_schema, command) { - String output = Headers.nf_core(workflow, params.monochrome_logs) + "\n" - output += "Typical pipeline command:\n\n" - output += " ${command}\n\n" - def params_map = params_load(json_schema) - def max_chars = params_max_chars(params_map) + 1 - for (group in params_map.keySet()) { - output += group + "\n" - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - def type = "[" + group_params.get(param).type + "]" - def description = group_params.get(param).description - output += " \u001B[1m--" + param.padRight(max_chars) + "\u001B[1m" + type.padRight(10) + description + "\n" - } - output += "\n" - } - output += Headers.dashed_line(params.monochrome_logs) - output += "\n\n" + Checks.citation(workflow) - output += "\n\n" + Headers.dashed_line(params.monochrome_logs) - return output - } - - /* - * Groovy Map summarising parameters/workflow options used by the pipeline - */ - private static LinkedHashMap params_summary_map(workflow, params, json_schema) { - // Get a selection of core Nextflow workflow options - def Map workflow_summary = [:] - if (workflow.revision) { - workflow_summary['revision'] = workflow.revision - } - workflow_summary['runName'] = workflow.runName - if (workflow.containerEngine) { - workflow_summary['containerEngine'] = "$workflow.containerEngine" - } - if (workflow.container) { - workflow_summary['container'] = "$workflow.container" - } - workflow_summary['launchDir'] = workflow.launchDir - workflow_summary['workDir'] = workflow.workDir - workflow_summary['projectDir'] = workflow.projectDir - workflow_summary['userName'] = workflow.userName - workflow_summary['profile'] = workflow.profile - workflow_summary['configFiles'] = workflow.configFiles.join(', ') - - // Get pipeline parameters defined in JSON Schema - def Map params_summary = [:] - def blacklist = ['hostnames'] - def params_map = params_load(json_schema) - for (group in params_map.keySet()) { - def sub_params = new LinkedHashMap() - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (params.containsKey(param) && !blacklist.contains(param)) { - def params_value = params.get(param) - def schema_value = group_params.get(param).default - def param_type = group_params.get(param).type - if (schema_value == null) { - if (param_type == 'boolean') { - schema_value = false - } - if (param_type == 'string') { - schema_value = '' - } - if (param_type == 'integer') { - schema_value = 0 - } - } else { - if (param_type == 'string') { - if (schema_value.contains('$projectDir') || schema_value.contains('${projectDir}')) { - def sub_string = schema_value.replace('\$projectDir','') - sub_string = sub_string.replace('\${projectDir}','') - if (params_value.contains(sub_string)) { - schema_value = params_value - } - } - if (schema_value.contains('$params.outdir') || schema_value.contains('${params.outdir}')) { - def sub_string = schema_value.replace('\$params.outdir','') - sub_string = sub_string.replace('\${params.outdir}','') - if ("${params.outdir}${sub_string}" == params_value) { - schema_value = params_value - } - } - } - } - - if (params_value != schema_value) { - sub_params.put("$param", params_value) - } - } - } - params_summary.put(group, sub_params) - } - return [ 'Core Nextflow options' : workflow_summary ] << params_summary - } - - /* - * Beautify parameters for summary and return as string - */ - private static String params_summary_log(workflow, params, json_schema) { - String output = Headers.nf_core(workflow, params.monochrome_logs) + "\n" - def params_map = params_summary_map(workflow, params, json_schema) - def max_chars = params_max_chars(params_map) - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - if (group_params) { - output += group + "\n" - for (param in group_params.keySet()) { - output += " \u001B[1m" + param.padRight(max_chars) + ": \u001B[1m" + group_params.get(param) + "\n" - } - output += "\n" - } - } - output += Headers.dashed_line(params.monochrome_logs) - output += "\n\n" + Checks.citation(workflow) - output += "\n\n" + Headers.dashed_line(params.monochrome_logs) - return output - } - - static String params_summary_multiqc(workflow, summary) { - String summary_section = '' - for (group in summary.keySet()) { - def group_params = summary.get(group) // This gets the parameters of that particular group - if (group_params) { - summary_section += "

$group

\n" - summary_section += "
\n" - for (param in group_params.keySet()) { - summary_section += "
$param
${group_params.get(param) ?: 'N/A'}
\n" - } - summary_section += "
\n" - } - } - - String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" - yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" - yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" - yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" - yaml_file_text += "plot_type: 'html'\n" - yaml_file_text += "data: |\n" - yaml_file_text += "${summary_section}" - return yaml_file_text - } -} From 07e7d338e17a5c6c964ec13818437b175f0159a3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 17 May 2021 15:36:42 +0100 Subject: [PATCH 177/675] putting in pipeline summary, some sources to come --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f5c72ede..1a255353 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ ## Introduction -**nf-core/cutandrun** is a bioinformatics best-practise analysis pipeline for +**nf-core/cutandrun** is a bioinformatics best-practise analysis pipeline for CUT&Run and CUT&Tag sequencing data analysis to study protein-DNA interactions and epigenomic profiling. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It comes with docker containers making installation trivial and results highly reproducible. @@ -26,6 +26,23 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Pipeline summary +1. Download FastQ files via SRA, ENA or GEO ids and auto-create input samplesheet ([`ENA FTP`](https://ena-docs.readthedocs.io/en/latest/retrieval/file-download.html); *if required*) +2. Merge re-sequenced FastQ files ([`cat`](http://www.linfo.org/cat.html)) +3. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) +4. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/)) +5. Alignment to both target and spike-in genomes ([`Bowtie 2`](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml)) +6. Sort and index alignments ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/)) +7. Duplicate read marking ([`picard MarkDuplicates`](https://broadinstitute.github.io/picard/)) +8. Create bedGraph files ([`BEDTools`](https://github.com/arq5x/bedtools2/) +9. Create bigWig coverage files ([`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) +10. Peak calling specifically tailored for low background noise ([`SEACR`](https://github.com/FredHutch/SEACR)) +11. Quality control and analysis: + 1. Alignment, fragment length and peak analysis and replicate reproducibility (`Python`) + 2. Differential peak analysis [`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html) + 3. Heatmap peak analysis [`Deeptools`] +12. Genome browser session [`IGV`] +13. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/) + 1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) From 872f326b7bc0ae378de179cc0b23870f9782c5bf Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 17 May 2021 15:50:51 +0100 Subject: [PATCH 178/675] pipeline summary with sources --- README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 1a255353..fd1212eb 100644 --- a/README.md +++ b/README.md @@ -37,16 +37,11 @@ On release, automated continuous integration tests run the pipeline on a full-si 9. Create bigWig coverage files ([`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) 10. Peak calling specifically tailored for low background noise ([`SEACR`](https://github.com/FredHutch/SEACR)) 11. Quality control and analysis: - 1. Alignment, fragment length and peak analysis and replicate reproducibility (`Python`) - 2. Differential peak analysis [`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html) - 3. Heatmap peak analysis [`Deeptools`] -12. Genome browser session [`IGV`] -13. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/) - - - -1. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) + 1. Alignment, fragment length and peak analysis and replicate reproducibility ([`Python`](https://www.python.org/)) + 2. Differential peak analysis ([`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html)) + 3. Heatmap peak analysis ([`deepTools`](https://github.com/deeptools/deepTools/)) +12. Genome browser session ([`IGV`](https://software.broadinstitute.org/software/igv/)) +13. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/)) ## Quick Start From b431c212d31eb79e04b52606ea96f5b97c8bd62f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 17 May 2021 16:59:47 +0100 Subject: [PATCH 179/675] introduction finished (still need to thank people and stuff for after release) --- README.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index fd1212eb..3c9a579d 100644 --- a/README.md +++ b/README.md @@ -61,11 +61,24 @@ On release, automated continuous integration tests run the pipeline on a full-si 4. Start running your own analysis! - + * Typical command for CUT&Run/CUT&Tag analysis: - ```bash - nextflow run nf-core/cutandrun -profile --input samplesheet.csv --genome GRCh37 - ``` + ```bash + nextflow run nf-core/cutandrun \ + -profile \ + --input samplesheet.csv \ + --genome GRCh37 + ``` + + * Typical command for downloading public data: + + ```bash + nextflow run nf-core/cutandrun \ + --public_data_ids ids.txt \ + -profile + ``` + + > **NB:** The commands to obtain public data and to run the main arm of the pipeline are completely independent. This is intentional because it allows you to download all of the raw data in an initial pipeline run (`results/public_data/`) and then to curate the auto-created samplesheet based on the available sample metadata before you run the pipeline again properly. See [usage docs](https://nf-co.re/cutandrun/usage) for all of the available options when running the pipeline. @@ -75,7 +88,9 @@ The nf-core/cutandrun pipeline comes with documentation about the pipeline: [usa ## Credits -nf-core/cutandrun was originally written by Chris Cheshire and Charlotte West. +nf-core/cutandrun was originally written by Chris Cheshire ([@chris-cheshire](https://github.com/chris-cheshire)) and Charlotte West ([@charlotte-west](https://github.com/charlotte-west)) from [Luscombe Lab](https://www.crick.ac.uk/research/labs/nicholas-luscombe) at [The Francis Crick Institute](https://www.crick.ac.uk/), London, UK. + +The pipeline structure and parts of the downstream analysis were adapted from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). We thank the following people for their extensive assistance in the development of this pipeline: From b817724df1011c7e7055a15a7be45f54b845fcec Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 17 May 2021 16:59:57 +0100 Subject: [PATCH 180/675] made a start to usage docs --- docs/usage.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index cb9846fb..db843800 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -17,19 +17,31 @@ You will need to create a samplesheet file with information about the samples in ``` ### Multiple replicates +The `group` identifier is the same when you have multiple replicates from the same experimental group, just increment the `replicate` identifier appropriately. A special case for `group` is if you have non-specific IgG antibody control data that can be used for normalising your target CUT&Run (OR CUT&Tag) data. In this use case, the `group` name for the igg control data **must** be set to `igg`. Below is an example for a single target group in triplicate, complemented by an IgG control duplicate: -The `group` identifier is the same when you have multiple replicates from the same experimental group, just increment the `replicate` identifier appropriately. The first replicate value for any given experimental group must be 1. Below is an example for a single experimental group in triplicate: +```bash +group,replicate,fastq_1,fastq_2 +exp_1,1, +exp_1,2, +exp_1,3, +igg,1, +igg,2, + +``` + + + ### Multiple runs of the same library -The `group` and `replicate` identifiers are the same when you have re-sequenced the same sample more than once (e.g. to increase sequencing depth). The pipeline will concatenate the raw reads before alignment. Below is an example for two samples sequenced across multiple lanes: + ### Full design -A final design file consisting of both single- and paired-end data may look something like the one below. This is for two experimental groups in triplicate, where the last replicate of the `treatment` group has been sequenced twice. + ## Running the pipeline From f216925a0fa5984afef10c204deb0d414535a02c Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 18 May 2021 11:59:05 +0100 Subject: [PATCH 181/675] add example sample sheet --- assets/samplesheet.csv | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 assets/samplesheet.csv diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv new file mode 100644 index 00000000..b0e4aed9 --- /dev/null +++ b/assets/samplesheet.csv @@ -0,0 +1,7 @@ +group,replicate,fastq_1,fastq_2 +h3k27me3,1,/path/to/fastq/files/H3K27me3_S1_L001_R1.fastq.gz,/path/to/fastq/files/H3K27me3_S1_L001_R2.fastq.gz +h3k27me3,2,/path/to/fastq/files/H3K27me3_S2_L001_R1.fastq.gz,/path/to/fastq/files/H3K27me3_S2_L001_R2.fastq.gz +h3k4me3,1,/path/to/fastq/files/H3K4me3_S1_L001_R1.fastq.gz,/path/to/fastq/files/H3K4me3_S1_L001_R2.fastq.gz +h3k4me3,2,/path/to/fastq/files/H3K4me3_S2_L001_R1.fastq.gz,/path/to/fastq/files/H3K4me3_S2_L001_R2.fastq.gz +igg,1,/path/to/fastq/files/IGG_S1_L001_R1.fastq.gz,/path/to/fastq/files/IGG_S1_L001_R2.fastq.gz +igg,2,/path/to/fastq/files/IGG_S2_L001_R1.fastq.gz,/path/to/fastq/files/IGG_S2_L001_R2.fastq.gz \ No newline at end of file From b70c41b0877c0df570bf196dd2d9f71002352327 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 18 May 2021 11:59:20 +0100 Subject: [PATCH 182/675] progress on usage md --- docs/usage.md | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index db843800..899d4351 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -8,6 +8,7 @@ + ## Samplesheet input You will need to create a samplesheet file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row as shown in the examples below. @@ -17,18 +18,26 @@ You will need to create a samplesheet file with information about the samples in ``` ### Multiple replicates -The `group` identifier is the same when you have multiple replicates from the same experimental group, just increment the `replicate` identifier appropriately. A special case for `group` is if you have non-specific IgG antibody control data that can be used for normalising your target CUT&Run (OR CUT&Tag) data. In this use case, the `group` name for the igg control data **must** be set to `igg`. Below is an example for a single target group in triplicate, complemented by an IgG control duplicate: +The `group` identifier is the same when you have multiple biological replicates from the same experimental group, just increment the `replicate` identifier appropriately. A special case for `group` is if you have non-specific IgG antibody control data that can be used for normalising your experimental CUT&Run (OR CUT&Tag) data. In this case, the `group` name for the IgG control data **must** be set to `igg`. Below is an example for a single target group in triplicate, complemented by an IgG control duplicate: ```bash group,replicate,fastq_1,fastq_2 -exp_1,1, -exp_1,2, -exp_1,3, -igg,1, -igg,2, +target,1,H3K27me3_S1_L001_R1.fastq.gz,H3K27me3_S1_L001_R2.fastq.gz +target,2,H3K27me3_S2_L001_R1.fastq.gz,H3K27me3_S2_L001_R2.fastq.gz +target,3,H3K27me3_S3_L001_R1.fastq.gz,H3K27me3_S3_L001_R2.fastq.gz +igg,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz +igg,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz + +# group,replicate,fastq_1,fastq_2 +# target,1,h3k27me3_s1_rep1_r1.fastq.gz,h3k27me3_s1_rep1_r2.fastq.gz +# target,2,h3k27me3_s1_rep2_r1.fastq.gz,h3k27me3_s1_rep2_r2.fastq.gz +# target,3,h3k27me3_s1_rep3_r1.fastq.gz,h3k27me3_s1_rep3_r2.fastq.gz +# igg,1,igg_rep1_r1.fastq.gz,igg_rep1_r2.fastq.gz +# igg,2,igg_rep2_r1.fastq.gz,igg_rep2_r2.fastq.gz ``` +It is recommended to have an IgG control for normalising your experimental data, but not necessary for the pipeline to run. | Column | Description | |----------------|-------------------------------------------------------------------------------------------------------------| | `group` | Group identifier for sample. This will be identical for replicate samples from the same experimental group. | -| `replicate` | Integer representing replicate number. Must start from `1..`. | +| `replicate` | Integer representing replicate number. | | `fastq_1` | Full path to FastQ file for read 1. File has to be zipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Full path to FastQ file for read 2. File has to be zipped and have the extension ".fastq.gz" or ".fq.gz". | -An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. --> +An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. ## Running the pipeline From 71278ebdbdd99f83675c531b724618f55dd344a3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 18 May 2021 12:32:12 +0100 Subject: [PATCH 183/675] first pass for usage md --- docs/usage.md | 46 ++++------------------------------------------ 1 file changed, 4 insertions(+), 42 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 899d4351..dd53faff 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -18,7 +18,7 @@ You will need to create a samplesheet file with information about the samples in ``` ### Multiple replicates -The `group` identifier is the same when you have multiple biological replicates from the same experimental group, just increment the `replicate` identifier appropriately. A special case for `group` is if you have non-specific IgG antibody control data that can be used for normalising your experimental CUT&Run (OR CUT&Tag) data. In this case, the `group` name for the IgG control data **must** be set to `igg`. Below is an example for a single target group in triplicate, complemented by an IgG control duplicate: +The `group` identifier is the same when you have multiple biological replicates from the same experimental group, just increment the `replicate` identifier appropriately. A special case for `group` is if you have non-specific IgG antibody control data that can be used for normalising your experimental CUT&Run (OR CUT&Tag) data. In this case, the `group` name for the IgG control data _must_ be set to `igg`. Below is an example for a single target group in triplicate, complemented by an IgG control duplicate: ```bash group,replicate,fastq_1,fastq_2 @@ -27,26 +27,9 @@ target,2,H3K27me3_S2_L001_R1.fastq.gz,H3K27me3_S2_L001_R2.fastq.gz target,3,H3K27me3_S3_L001_R1.fastq.gz,H3K27me3_S3_L001_R2.fastq.gz igg,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz igg,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz - -# group,replicate,fastq_1,fastq_2 -# target,1,h3k27me3_s1_rep1_r1.fastq.gz,h3k27me3_s1_rep1_r2.fastq.gz -# target,2,h3k27me3_s1_rep2_r1.fastq.gz,h3k27me3_s1_rep2_r2.fastq.gz -# target,3,h3k27me3_s1_rep3_r1.fastq.gz,h3k27me3_s1_rep3_r2.fastq.gz -# igg,1,igg_rep1_r1.fastq.gz,igg_rep1_r2.fastq.gz -# igg,2,igg_rep2_r1.fastq.gz,igg_rep2_r2.fastq.gz - ``` -It is recommended to have an IgG control for normalising your experimental data, but not necessary for the pipeline to run. - - +It is _recommended_ to have an IgG control for normalising your experimental data and this is the default action for the pipeline. However, if you run the pipeline without IgG control data you must supply `--igg_control false` ### Multiple runs of the same library @@ -60,20 +43,12 @@ igg,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz igg,1,IGG_S1_L002_R1.fastq.gz,IGG_S1_L002_R2.fastq.gz ``` - - ### Full design A final design file may look something like the one below. This is for one experimental group in triplicate where the last replicate of the `treatment` group has been sequenced twice, another experimental group in duplicate, and one IgG control group. ```bash +group,replicate,fastq_1,fastq_2 h3k27me3,1,H3K27me3_S1_L001_R1.fastq.gz,H3K27me3_S1_L001_R2.fastq.gz h3k27me3,2,H3K27me3_S2_L001_R1.fastq.gz,H3K27me3_S2_L001_R2.fastq.gz h3k27me3,3,H3K27me3_S3_L001_R1.fastq.gz,H3K27me3_S3_L001_R2.fastq.gz @@ -84,19 +59,6 @@ igg,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz igg,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz ``` - - | Column | Description | |----------------|-------------------------------------------------------------------------------------------------------------| | `group` | Group identifier for sample. This will be identical for replicate samples from the same experimental group. | @@ -111,7 +73,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/cutandrun --input samplesheet.csv -profile docker +nextflow run nf-core/cutandrun --input samplesheet.csv --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. From 2165d884cdaa853d84f653f989f2bc9adbe9daf3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 18 May 2021 12:40:31 +0100 Subject: [PATCH 184/675] fix plot ylabels --- bin/python/reporting/lib/figures.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 26297786..65a43e22 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -618,6 +618,7 @@ def peak_widths(self): self.seacr_beds['peak_width'] = self.seacr_beds['peak_width'].abs() ax = sns.violinplot(data=self.seacr_beds, x="group", y="peak_width", hue="replicate", palette = "viridis") + ax.set_ylabel("Peak Width") fig.suptitle("Peak Width Distribution") return fig, self.seacr_beds @@ -629,6 +630,7 @@ def reproduced_peaks(self): # plot ax = sns.barplot(data=self.reprod_peak_stats, hue="replicate", x="group", y="peak_reproduced_rate", palette = "viridis") + ax.set_ylabel("Peaks Reproduced (%)") fig.suptitle("Peak Reprodducibility") return fig, self.reprod_peak_stats @@ -638,6 +640,7 @@ def frags_in_peaks(self): fig, ax = plt.subplots() ax = sns.boxplot(data=self.frip, x='group', y='percentage_frags_in_peaks', palette = "magma") + ax.set_ylabel("Fragments within Peaks (%)") fig.suptitle("Aligned Fragments within Peaks") return fig, self.frip From 5e63edbdad44ab5eb823da268af3ed9609c4bb52 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 18 May 2021 13:57:16 +0100 Subject: [PATCH 185/675] plot formatting --- bin/python/reporting/lib/figures.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 65a43e22..5a390e4c 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -466,7 +466,7 @@ def gen_pdf(self, output_path, plots): # ---------- Plot 1 - Alignment Summary --------- # def alignment_summary(self): sns.color_palette("magma", as_cmap=True) - + sns.set(font_scale=0.6) # Subset data df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] @@ -494,7 +494,7 @@ def alignment_summary(self): seq_summary[1,1].set_title("Alignment Rate (Spike-in)") seq_summary[1,1].set_ylabel("Percent of Fragments Aligned") - plt.subplots_adjust(wspace=0.5, hspace=0.5) + plt.subplots_adjust(wspace=0.4, hspace=0.45) return fig, df_data @@ -565,7 +565,6 @@ def alignment_summary_ex(self): # ---------- Plot 5 - Replicate Reproducibility Heatmap --------- # def replicate_heatmap(self): - sns.set(font_scale=0.6) fig, ax = plt.subplots() plot_data = self.frag_bin500[self.frag_bin500.columns[-(len(self.frag_bin500.columns)-2):]] plot_data = plot_data.fillna(0) From 3474de43caa7a490490f7e76327e3bcad780901f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 19 May 2021 08:15:16 +0100 Subject: [PATCH 186/675] Re added test full --- conf/test_full.config | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 conf/test_full.config diff --git a/conf/test_full.config b/conf/test_full.config new file mode 100644 index 00000000..591ae470 --- /dev/null +++ b/conf/test_full.config @@ -0,0 +1,17 @@ +/* + * ------------------------------------------------- + * Nextflow config file for running full-size tests + * ------------------------------------------------- + * Defines bundled input files and everything required + * to run a full size pipeline test. Use as follows: + * nextflow run nf-core/cutandrun -profile test_full, + */ + +params { + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function' + + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + genome = 'GRCh38' +} \ No newline at end of file From cf6ebddce917ed846c803d4935bb5abd3b92cbb0 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 10:29:28 +0100 Subject: [PATCH 187/675] indent syntax fix --- bin/python/reporting/lib/figures.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bin/python/reporting/lib/figures.py b/bin/python/reporting/lib/figures.py index 5a390e4c..d6f9aa4a 100644 --- a/bin/python/reporting/lib/figures.py +++ b/bin/python/reporting/lib/figures.py @@ -382,9 +382,10 @@ def generate_plots(self): data["frag_hist"] = data4 # Plot 5 - plot5, data5 = self.replicate_heatmap() - plots["replicate_heatmap"] = plot5 - data["replicate_heatmap"] = data5 + if self.replicate_number > 1: + plot5, data5 = self.replicate_heatmap() + plots["replicate_heatmap"] = plot5 + data["replicate_heatmap"] = data5 # Plot 6 plot6, data6 = self.scale_factor_summary() From 9ef8844804946b10d9738b55b5304db8b2c1241a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 10:29:52 +0100 Subject: [PATCH 188/675] documentation progress --- README.md | 2 +- docs/output.md | 24 ++++++++++++++++++++++-- docs/usage.md | 5 ----- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3c9a579d..dfeed078 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ On release, automated continuous integration tests run the pipeline on a full-si 3. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) 4. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/)) 5. Alignment to both target and spike-in genomes ([`Bowtie 2`](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml)) -6. Sort and index alignments ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/)) +6. Filter on quality, sort and index alignments ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/)) 7. Duplicate read marking ([`picard MarkDuplicates`](https://broadinstitute.github.io/picard/)) 8. Create bedGraph files ([`BEDTools`](https://github.com/arq5x/bedtools2/) 9. Create bigWig coverage files ([`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) diff --git a/docs/output.md b/docs/output.md index c004a930..5072a1eb 100644 --- a/docs/output.md +++ b/docs/output.md @@ -16,9 +16,29 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -* [FastQC](#fastqc) - Raw read QC +* [Preprocessing](#preprocessing) + * [cat](#cat) - Merge re-sequenced FastQ files + * [FastQC](#fastqc) - Raw read QC + * [TrimGalore](#trimgalore) - Adapter and quality trimming +* [Alignment](#alignment) + * [Bowtie 2](#bowtie-2) - Align reads to target and spike-in genomes +* [Alignment post-processing](#alignment-post-processing) + * [SAMtools](#samtools) - Quality filter, sort and index alignments + * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking +* [Other steps](#other-steps) + * [Calculate scale factor](#scale-factor) - Normalise between samples + * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files +* [Peak calling](#peak-calling) + * [SEACR](#seacr) - Peak calling for high signal-noise data +* [Summary and quality control](#summary-and-quality-control) + * [DESeq2](#deseq2) - PCA plot and differential peak analysis + * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similiarity + * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes + + + ### FastQC diff --git a/docs/usage.md b/docs/usage.md index dd53faff..03b5fc8b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -4,11 +4,6 @@ > _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ -## Introduction - - - - ## Samplesheet input You will need to create a samplesheet file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row as shown in the examples below. From 36828bde4c51d1f9b12082e1d281f821fcac1cfe Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 12:17:16 +0100 Subject: [PATCH 189/675] setting module configs to not publish to results --- conf/modules.config | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index e48e9bbc..75d504a2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -119,12 +119,14 @@ params { 'awk_bt2' { args = "" suffix = ".target" - publish_dir = "awk/bt2" + publish_dir = "" + publish_files = false } 'awk_bt2_spikein' { args = "" suffix = ".spikein" - publish_dir = "awk/bt2" + publish_dir = "" + publish_files = false } 'bedtools_genomecov_bedgraph' { @@ -158,14 +160,16 @@ params { 'awk_dedup' { args = "" suffix = ".dedup" - publish_dir = "awk/picard" + publish_dir = "" command = "'/^[^#]/{print}'" command2 = "| head -2 | sed 's/\\t/,/g' - | sed 's/.*/\\L&/g' -" + publish_files = false } 'awk_dt_frag' { args = "" suffix = ".dt.frag" - publish_dir = "awk/dt" + publish_dir = "" + publish_files = false } 'export_meta' { publish_dir = "meta" @@ -177,46 +181,53 @@ params { 'calc_frag_samtools_view' { args = '-F 0x04 -b' suffix = ".mapped" - publish_dir = "calc_frag" + publish_dir = "" + publish_files = false } 'calc_frag_samtools' { args = '' suffix = ".mapped" - publish_dir = "calc_frag" + publish_dir = "" + publish_files = false } 'calc_frag_bamtobed' { args = '-bedpe' suffix = '' - publish_dir = 'calc_frag' + publish_dir = '' + publish_files = false } 'calc_frag_awk' { args = "" suffix = ".clean" ext = "bed" - publish_dir = "calc_frag" + publish_dir = "" command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" command2 = "" + publish_files = false } 'calc_frag_cut' { args = "-f 1,2,6" suffix = ".frags" ext = "bed" - publish_dir = "calc_frag" + publish_dir = "" command = "| sort -k1,1 -k2,2n -k3,3n" + publish_files = false } 'awk_frag_bin' { args = "-v w=500" suffix = ".frags.bin500" ext = "bed" - publish_dir = "awk/bin500" + publish_dir = "binned_fragment_counts" command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" + publish_files = false } 'awk_edit_peak_bed' { command = "'{split(\$6, summit, \":\"); split(summit[2], region, \"-\"); print summit[1]\"\\t\"region[1]\"\\t\"region[2]}'" suffix = ".max_signal" + publish_files = false } 'dt_compute_mat_gene' { @@ -242,13 +253,15 @@ params { args = '-F 0x04' args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" suffix = '.frag_len' - publish_dir = 'frag_len' + publish_dir = '' + publish_files = false } 'samtools_sort' { args = "-n" - publish_dir = "bam_query_sorted" + publish_dir = "" suffix = ".sorted" + publish_files = false } } } From a0b8babfd20d49e5785f6af1b6784b4d0e7fc983 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 12:28:53 +0100 Subject: [PATCH 190/675] genome / spikein_genome fix --- lib/WorkflowMain.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 4425c132..365bdba4 100644 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -96,7 +96,7 @@ class WorkflowMain { // public static String getGenomeAttributeSpikeIn(params, attribute) { def val = '' - if (params.genomes && params.spikein_genome && params.genomes.containsKey(params.genome)) { + if (params.genomes && params.spikein_genome && params.genomes.containsKey(params.spikein_genome)) { if (params.genomes[ params.spikein_genome ].containsKey(attribute)) { val = params.genomes[ params.spikein_genome ][ attribute ] } From ae02c2ce5dbe1ac89b030dc53f6859479b5ee807 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 14:40:32 +0100 Subject: [PATCH 191/675] add K12-MG1655 to igenomes config --- conf/igenomes.config | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/conf/igenomes.config b/conf/igenomes.config index a270df7f..f4a1be69 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -145,6 +145,14 @@ params { bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" } + 'K12-MG1655' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + } 'Galgal4' { fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" From 90b670af284f5c4e260320e4113b8e4e271c71e3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 14:40:48 +0100 Subject: [PATCH 192/675] bug --- lib/WorkflowMain.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 4425c132..365bdba4 100644 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -96,7 +96,7 @@ class WorkflowMain { // public static String getGenomeAttributeSpikeIn(params, attribute) { def val = '' - if (params.genomes && params.spikein_genome && params.genomes.containsKey(params.genome)) { + if (params.genomes && params.spikein_genome && params.genomes.containsKey(params.spikein_genome)) { if (params.genomes[ params.spikein_genome ].containsKey(attribute)) { val = params.genomes[ params.spikein_genome ][ attribute ] } From 6c8949e1a2515649d84625f8b27be911e2068b2e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 14:50:13 +0100 Subject: [PATCH 193/675] igenomes config with k12-MG1655 genome added --- conf/igenomes.config | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/conf/igenomes.config b/conf/igenomes.config index f4a1be69..2c437eb9 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -146,12 +146,11 @@ params { readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" } 'K12-MG1655' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BismarkIndex/" } 'Galgal4' { fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" From 81ebe7d5379191e651e8fcd4de46ae53ff579e18 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 20 May 2021 15:18:48 +0100 Subject: [PATCH 194/675] Added ecoli genome --- conf/igenomes.config | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/conf/igenomes.config b/conf/igenomes.config index b517c955..c7550a6f 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -418,5 +418,12 @@ params { readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" mito_name = "chrM" } + 'K12-MG1655' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BismarkIndex/" + } } } From 77c47b8f95a543bda39cd4fc8950589b6944414d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 20 May 2021 15:29:41 +0100 Subject: [PATCH 195/675] Updated pipeline to run again after merge --- conf/base.config | 4 ---- main.nf | 2 +- nextflow.config | 9 ++++----- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/conf/base.config b/conf/base.config index 348ea8fd..4e374600 100644 --- a/conf/base.config +++ b/conf/base.config @@ -44,8 +44,4 @@ process { withLabel:process_long { time = { check_max( 20.h * task.attempt, 'time' ) } } - withName:get_software_versions { - cache = false - } - } diff --git a/main.nf b/main.nf index ac403474..ef4af0d8 100644 --- a/main.nf +++ b/main.nf @@ -9,7 +9,7 @@ ---------------------------------------------------------------------------------------- */ -log.info Headers.nf_core(workflow, params.monochrome_logs) +nextflow.enable.dsl = 2 /* ======================================================================================== diff --git a/nextflow.config b/nextflow.config index e49a43b6..4f7c577f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -86,19 +86,18 @@ params { config_profile_contact = null config_profile_url = null - // Defaults only, expecting to be overwritten + // Max resource options max_memory = '8.GB' max_cpus = 4 max_time = '24.h' } -// Container slug. Stable releases should specify release tag! -// Developmental code should specify :dev -process.container = 'nfcore/cutandrun:dev' - // 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" From c8c1332b990c0fa6a28352730f198da86910e454 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 20 May 2021 15:32:28 +0100 Subject: [PATCH 196/675] re-added fastqc --- modules/nf-core/software/fastqc/functions.nf | 127 ++++++++++--------- modules/nf-core/software/fastqc/main.nf | 47 +++++++ modules/nf-core/software/fastqc/meta.yml | 51 ++++++++ 3 files changed, 166 insertions(+), 59 deletions(-) create mode 100644 modules/nf-core/software/fastqc/main.nf create mode 100644 modules/nf-core/software/fastqc/meta.yml diff --git a/modules/nf-core/software/fastqc/functions.nf b/modules/nf-core/software/fastqc/functions.nf index b3ac3801..da9da093 100644 --- a/modules/nf-core/software/fastqc/functions.nf +++ b/modules/nf-core/software/fastqc/functions.nf @@ -1,59 +1,68 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/software/fastqc/main.nf b/modules/nf-core/software/fastqc/main.nf new file mode 100644 index 00000000..7ce76adf --- /dev/null +++ b/modules/nf-core/software/fastqc/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process FASTQC { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0" + } else { + container "quay.io/biocontainers/fastqc:0.11.9--0" + } + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.html"), emit: html + tuple val(meta), path("*.zip") , emit: zip + path "*.version.txt" , emit: version + + script: + // Add soft-links to original FastQs for consistent naming in pipeline + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + if (meta.single_end) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz + fastqc $options.args --threads $task.cpus ${prefix}.fastq.gz + fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + """ + } else { + """ + [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz + fastqc $options.args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz + fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + """ + } +} diff --git a/modules/nf-core/software/fastqc/meta.yml b/modules/nf-core/software/fastqc/meta.yml new file mode 100644 index 00000000..8eb9953d --- /dev/null +++ b/modules/nf-core/software/fastqc/meta.yml @@ -0,0 +1,51 @@ +name: fastqc +description: Run FastQC on sequenced reads +keywords: + - quality control + - qc + - adapters + - fastq +tools: + - fastqc: + description: | + FastQC gives general quality metrics about your reads. + It provides information about the quality score distribution + across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other + overrepresented sequences. + homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ + documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@grst" + - "@ewels" + - "@FelixKrueger" From fdae449014210956441c50f3a77b01a0d26af6c5 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 20 May 2021 15:38:06 +0100 Subject: [PATCH 197/675] Removed completion statement --- main.nf | 9 --------- 1 file changed, 9 deletions(-) diff --git a/main.nf b/main.nf index ef4af0d8..0fdbcd41 100644 --- a/main.nf +++ b/main.nf @@ -61,17 +61,8 @@ workflow NFCORE_CUTANDRUN { include { CUTANDRUN } from './workflows/cutandrun' CUTANDRUN () } - - if (workflow.success) { - log.info "-${c_purple}[nf-core/cutandrun]${c_green} Pipeline completed successfully${c_reset}-" - } else { - checkHostname() - log.info "-${c_purple}[nf-core/cutandrun]${c_red} Pipeline completed with errors${c_reset}-" - } - } - /* ======================================================================================== RUN ALL WORKFLOWS From 88053feb1e0cbab6136ca28c906e6b027d2967f2 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 15:38:31 +0100 Subject: [PATCH 198/675] make gene_bed optional parameter --- subworkflows/local/prepare_genome.nf | 10 ++++++---- workflows/cutandrun.nf | 28 ++++++++++++++++------------ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 660b73e0..eee2ee7d 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -55,10 +55,12 @@ workflow PREPARE_GENOME { * Uncompress BED annotation file */ ch_gene_bed = Channel.empty() - if (params.gene_bed.endsWith('.gz')) { - ch_gene_bed = GUNZIP_BED ( params.gene_bed ).gunzip - } else { - ch_gene_bed = file(params.gene_bed) + if (params.gene_bed){ + if (params.gene_bed.endsWith('.gz')) { + ch_gene_bed = GUNZIP_BED ( params.gene_bed ).gunzip + } else { + ch_gene_bed = file(params.gene_bed) + } } /* diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 430a722e..70c39e3f 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -15,7 +15,6 @@ checkPathParamList = [ params.fasta, params.gtf, params.blacklist, - params.gene_bed, params.bowtie2, params.spikein_fasta, params.spikein_bowtie2 @@ -596,23 +595,28 @@ workflow CUTANDRUN { /* * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes */ - DEEPTOOLS_COMPUTEMATRIX_GENE ( - ch_bigwig_no_igg, - PREPARE_GENOME.out.bed - ) - ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_GENE.out.version.first().ifEmpty(null)) + if (params.gene_bed){ + DEEPTOOLS_COMPUTEMATRIX_GENE ( + ch_bigwig_no_igg, + PREPARE_GENOME.out.bed + ) + ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_GENE.out.version.first().ifEmpty(null)) + + /* + * MODULE: Calculate DeepTools heatmap + */ + DEEPTOOLS_PLOTHEATMAP_GENE ( + DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix + ) + } + + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // scale_factor:10000], MATRIX] //DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix | view - /* - * MODULE: Calculate DeepTools heatmap - */ - DEEPTOOLS_PLOTHEATMAP_GENE ( - DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix - ) /* * MODULE: Extract max signal from peak beds From 0129b956e851104ac1ae7a4f33608b6026da3d55 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 16:09:36 +0100 Subject: [PATCH 199/675] add option for saving intermediate bams --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index c7d2bcdc..d85df2ab 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,6 +25,7 @@ params { // Sample handling save_merged_fastq = false + save_intermediate_bams = false // Trimming clip_r1 = 0 From fff391a39f50934c3c98f718db947e08f159db9e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 20 May 2021 16:15:10 +0100 Subject: [PATCH 200/675] restructured bin folder --- bin/{python => }/check_samplesheet.py | 0 bin/{r => }/deseq2_diff.r | 0 bin/{python => }/igv_files_to_session.py | 0 bin/{python/reporting => }/lib/figures.py | 0 bin/python/reporting/app.py | 35 -- bin/python/reporting/lib/__init__.py | 2 - bin/r/deseq-test.ipynb | 435 ------------------ .../reporting/main.py => reporting.py} | 0 bin/{python => }/scrape_software_versions.py | 0 dev/docker/static_reports/environment.yml | 1 - dev/docker/static_reports/test_output/README | 1 - modules/local/deseq2_diff.nf | 2 +- modules/local/generate_reports.nf | 2 +- modules/local/get_software_versions.nf | 2 +- modules/local/igv_session.nf | 2 +- modules/local/samplesheet_check.nf | 2 +- 16 files changed, 5 insertions(+), 479 deletions(-) rename bin/{python => }/check_samplesheet.py (100%) rename bin/{r => }/deseq2_diff.r (100%) mode change 100644 => 100755 rename bin/{python => }/igv_files_to_session.py (100%) rename bin/{python/reporting => }/lib/figures.py (100%) delete mode 100644 bin/python/reporting/app.py delete mode 100644 bin/python/reporting/lib/__init__.py delete mode 100644 bin/r/deseq-test.ipynb rename bin/{python/reporting/main.py => reporting.py} (100%) rename bin/{python => }/scrape_software_versions.py (100%) delete mode 100644 dev/docker/static_reports/test_output/README diff --git a/bin/python/check_samplesheet.py b/bin/check_samplesheet.py similarity index 100% rename from bin/python/check_samplesheet.py rename to bin/check_samplesheet.py diff --git a/bin/r/deseq2_diff.r b/bin/deseq2_diff.r old mode 100644 new mode 100755 similarity index 100% rename from bin/r/deseq2_diff.r rename to bin/deseq2_diff.r diff --git a/bin/python/igv_files_to_session.py b/bin/igv_files_to_session.py similarity index 100% rename from bin/python/igv_files_to_session.py rename to bin/igv_files_to_session.py diff --git a/bin/python/reporting/lib/figures.py b/bin/lib/figures.py similarity index 100% rename from bin/python/reporting/lib/figures.py rename to bin/lib/figures.py diff --git a/bin/python/reporting/app.py b/bin/python/reporting/app.py deleted file mode 100644 index 02fe90a2..00000000 --- a/bin/python/reporting/app.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -import dash -import dash_bootstrap_components as dbc -import dash_core_components as dcc -import dash_html_components as html -import flask - -from lib.figures import Figures - -server = flask.Flask(__name__) -app = dash.Dash(__name__, server=server, external_stylesheets=[dbc.themes.BOOTSTRAP]) -app.config.suppress_callback_exceptions = True - -# Init data -figures = Figures(None, "data/meta_table.csv") -figs, data = figures.generate_dash_plots() - -app.layout = html.Div( - children=[ - html.H1(children="Hello Dash 2020"), - html.Div(children="""Dash: A web application framework for Python."""), - dcc.Graph( - id='example-graph', - figure=figs["alignment_summary"] - ), - ] -) - -if __name__ == "__main__": - import os - - debug = False if os.environ["DASH_DEBUG_MODE"] == "False" else True - app.run_server(host="0.0.0.0", port=8050, debug=debug) \ No newline at end of file diff --git a/bin/python/reporting/lib/__init__.py b/bin/python/reporting/lib/__init__.py deleted file mode 100644 index ec69c5c9..00000000 --- a/bin/python/reporting/lib/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- \ No newline at end of file diff --git a/bin/r/deseq-test.ipynb b/bin/r/deseq-test.ipynb deleted file mode 100644 index 8b267d0f..00000000 --- a/bin/r/deseq-test.ipynb +++ /dev/null @@ -1,435 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "faced-parent", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Loading required package: stats4\n", - "\n", - "Loading required package: BiocGenerics\n", - "\n", - "Loading required package: parallel\n", - "\n", - "\n", - "Attaching package: 'BiocGenerics'\n", - "\n", - "\n", - "The following objects are masked from 'package:parallel':\n", - "\n", - " clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,\n", - " clusterExport, clusterMap, parApply, parCapply, parLapply,\n", - " parLapplyLB, parRapply, parSapply, parSapplyLB\n", - "\n", - "\n", - "The following objects are masked from 'package:stats':\n", - "\n", - " IQR, mad, sd, var, xtabs\n", - "\n", - "\n", - "The following objects are masked from 'package:base':\n", - "\n", - " Filter, Find, Map, Position, Reduce, anyDuplicated, append,\n", - " as.data.frame, basename, cbind, colnames, dirname, do.call,\n", - " duplicated, eval, evalq, get, grep, grepl, intersect, is.unsorted,\n", - " lapply, mapply, match, mget, order, paste, pmax, pmax.int, pmin,\n", - " pmin.int, rank, rbind, rownames, sapply, setdiff, sort, table,\n", - " tapply, union, unique, unsplit, which.max, which.min\n", - "\n", - "\n", - "Loading required package: S4Vectors\n", - "\n", - "\n", - "Attaching package: 'S4Vectors'\n", - "\n", - "\n", - "The following object is masked from 'package:base':\n", - "\n", - " expand.grid\n", - "\n", - "\n", - "Loading required package: IRanges\n", - "\n", - "Loading required package: GenomeInfoDb\n", - "\n", - "Loading required package: SummarizedExperiment\n", - "\n", - "Loading required package: MatrixGenerics\n", - "\n", - "Loading required package: matrixStats\n", - "\n", - "\n", - "Attaching package: 'MatrixGenerics'\n", - "\n", - "\n", - "The following objects are masked from 'package:matrixStats':\n", - "\n", - " colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,\n", - " colCounts, colCummaxs, colCummins, colCumprods, colCumsums,\n", - " colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,\n", - " colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,\n", - " colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,\n", - " colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,\n", - " colWeightedMeans, colWeightedMedians, colWeightedSds,\n", - " colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,\n", - " rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,\n", - " rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,\n", - " rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,\n", - " rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,\n", - " rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,\n", - " rowWeightedMads, rowWeightedMeans, rowWeightedMedians,\n", - " rowWeightedSds, rowWeightedVars\n", - "\n", - "\n", - "Loading required package: Biobase\n", - "\n", - "Welcome to Bioconductor\n", - "\n", - " Vignettes contain introductory material; view with\n", - " 'browseVignettes()'. To cite Bioconductor, see\n", - " 'citation(\"Biobase\")', and for packages 'citation(\"pkgname\")'.\n", - "\n", - "\n", - "\n", - "Attaching package: 'Biobase'\n", - "\n", - "\n", - "The following object is masked from 'package:MatrixGenerics':\n", - "\n", - " rowMedians\n", - "\n", - "\n", - "The following objects are masked from 'package:matrixStats':\n", - "\n", - " anyMissing, rowMedians\n", - "\n", - "\n", - "\n", - "\n" - ] - } - ], - "source": [ - "library(magrittr)\n", - "library(GenomicRanges)\n", - "library(DESeq2)\n", - "library(chromVAR)\n", - "\n", - "# library(BiocParallel)\n", - "# register(MulticoreParam(8)) # Use 8 cores" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "multiple-shipping", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Bioconductor version 3.12 (BiocManager 1.30.10), R 4.0.3 (2020-10-10)\n", - "\n", - "Installing package(s) 'DESeq2'\n", - "\n", - "Updating HTML index of packages in '.Library'\n", - "\n", - "Making 'packages.html' ...\n", - " done\n", - "\n", - "Old packages: 'GenomeInfoDb', 'IRanges', 'S4Vectors', 'crayon'\n", - "\n" - ] - } - ], - "source": [ - "if (!requireNamespace(\"BiocManager\", quietly = TRUE))\n", - " install.packages(\"BiocManager\")\n", - "\n", - "BiocManager::install(\"DESeq2\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "social-witch", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Bioconductor version 3.12 (BiocManager 1.30.10), R 4.0.3 (2020-10-10)\n", - "\n", - "Installing package(s) 'chromVAR'\n", - "\n", - "Updating HTML index of packages in '.Library'\n", - "\n", - "Making 'packages.html' ...\n", - " done\n", - "\n", - "Old packages: 'GenomeInfoDb', 'IRanges', 'S4Vectors', 'crayon'\n", - "\n" - ] - } - ], - "source": [ - "BiocManager::install(\"chromVAR\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "lightweight-literacy", - "metadata": {}, - "outputs": [], - "source": [ - "mPeak = GRanges()\n", - "\n", - "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k4me3_R1.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", - "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", - "\n", - "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k4me3_R2.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", - "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", - "\n", - "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k27me3_R1.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", - "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", - "\n", - "peakRes = read.table(\"/Users/cheshic/dev/repos/cutandrun/results/seacr/h3k27me3_R2.bed.stringent.bed\", header = FALSE, fill = TRUE)\n", - "mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = \"*\") %>% append(mPeak, .)\n", - "\n", - "masterPeak = reduce(mPeak)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "exact-challenge", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R1.markdup.bam\n", - "\n", - "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R2.markdup.bam\n", - "\n", - "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R1.markdup.bam\n", - "\n", - "Reading in file: /Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R2.markdup.bam\n", - "\n" - ] - } - ], - "source": [ - "countMat = matrix(NA, length(masterPeak), 4)\n", - "\n", - "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R1.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", - "countMat[, 1] = counts(fragment_counts)[,1]\n", - "\n", - "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k4me3_R2.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", - "countMat[, 2] = counts(fragment_counts)[,1]\n", - "\n", - "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R1.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", - "countMat[, 3] = counts(fragment_counts)[,1]\n", - "\n", - "fragment_counts <- getCounts(\"/Users/cheshic/dev/repos/cutandrun/results/bowtie2/target/picard_markdup/h3k27me3_R2.markdup.bam\", masterPeak, paired = TRUE, by_rg = FALSE, format = \"bam\")\n", - "countMat[, 4] = counts(fragment_counts)[,1]\n", - "\n", - "histL = c(\"K27me3\", \"K4me3\")\n", - "repL = paste0(\"rep\", 1:2)\n", - "colnames(countMat) = paste(rep(histL, 2), rep(repL, each = 2), sep = \"_\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "charming-fundamental", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "converting counts to integer mode\n", - "\n", - "estimating size factors\n", - "\n", - "estimating dispersions\n", - "\n", - "gene-wise dispersion estimates\n", - "\n", - "mean-dispersion relationship\n", - "\n", - "final dispersion estimates\n", - "\n", - "fitting model and testing\n", - "\n" - ] - }, - { - "data": { - "text/plain": [ - "DataFrame with 6 rows and 14 columns\n", - " K27me3_rep1 K4me3_rep1 K27me3_rep2 K4me3_rep2 K27me3_rep1_norm\n", - " \n", - "1 157 204 43 98 263.00396\n", - "2 0 1 2 3 0.00000\n", - "3 0 1 3 2 0.00000\n", - "4 0 0 3 3 0.00000\n", - "5 16 15 5 17 26.80295\n", - "6 1 2 1 3 1.67518\n", - " K4me3_rep1_norm K27me3_rep2_norm K4me3_rep2_norm baseMean log2FoldChange\n", - " \n", - "1 305.05115 26.677339 62.92038 164.413208 -2.665518\n", - "2 1.49535 1.240806 1.92613 1.165572 1.019385\n", - "3 1.49535 1.861210 1.28409 1.160162 1.010569\n", - "4 0.00000 1.861210 1.92613 0.946836 2.701407\n", - "5 22.43023 3.102016 10.91476 15.812490 -1.814016\n", - "6 2.99070 0.620403 1.92613 1.803105 -0.881734\n", - " lfcSE stat pvalue padj\n", - " \n", - "1 0.591954 -4.502917 6.70271e-06 0.000354051\n", - "2 3.061925 0.332923 7.39193e-01 0.863378683\n", - "3 3.066071 0.329597 7.41704e-01 0.863378683\n", - "4 3.485580 0.775024 4.38326e-01 0.687580977\n", - "5 0.992334 -1.828029 6.75452e-02 0.527774960\n", - "6 2.351327 -0.374994 7.07665e-01 0.863378683" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "selectR = which(rowSums(countMat) > 5) ## remove low count genes\n", - "dataS = countMat[selectR,]\n", - "condition = factor(rep(histL, each = length(repL)))\n", - "\n", - "dds = DESeqDataSetFromMatrix(countData = dataS,\n", - " colData = DataFrame(condition),\n", - " design = ~ condition)\n", - "DDS = DESeq(dds)\n", - "normDDS = counts(DDS, normalized = TRUE) ## normalization with respect to the sequencing depth\n", - "colnames(normDDS) = paste0(colnames(normDDS), \"_norm\")\n", - "res = results(DDS, independentFiltering = FALSE, altHypothesis = \"greaterAbs\")\n", - "\n", - "countMatDiff = cbind(dataS, normDDS, res)\n", - "head(countMatDiff)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "parental-broadcasting", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAYAAAD958/bAAAEGWlDQ1BrQ0dDb2xvclNwYWNl\nR2VuZXJpY1JHQgAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi\n6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lp\nurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZP\nC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q4\n4WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23B\naIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys\n2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y\n5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrl\nSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98\nhTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7C\nlP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmK\nPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZf\nsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJ\nxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19\nzn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNC\nUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU\n97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KT\nYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyA\ngccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/\nqwBnjX8BoJ98VQNcC+8AAAA4ZVhJZk1NACoAAAAIAAGHaQAEAAAAAQAAABoAAAAAAAKgAgAE\nAAAAAQAAA0igAwAEAAAAAQAAA0gAAAAA3+vLGQAAQABJREFUeAHsnQe8XEX5v3cT0htdihCC\nICigNAFRQEDEgmIDC4oiTVQUFGkCIRBpUhR+fxVUVFQsiL0hKL03QZoghA4CCQGSkH7+z3uy\nJ5y72b11d++WZz6fd0+bM+WZs/fOd9+ZOYWCQQISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCA\nBCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQ\ngAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAIS\nkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEAC\nEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhA\nAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlI\nQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJ\nSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCAB\nCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQg\nAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQk\nIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAE\nJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCA\nBCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQ\ngAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAIS\nkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEAC\nEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhA\nAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlI\nQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJ\nSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCAB\nCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQg\nAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQk\nIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAE\nJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCA\nBCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQ\ngAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAIS\nkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEAC\nEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhA\nAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlI\n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\nYXdMwARMwARMwARMoEUEvmhivp3swzaxGj1ZuUPcdKQDyjD+gH48oKf9kAmYgAmYgAmYgAmY\ngAl0nsDnnXehcQ8skBpn2IwcHiSTlTBtGtGpcDcFn4091SkHXG6uCMxNbYZhe2Njc1Wz2ioz\nlGQnY3q9wLu1PeJUJtAngRW4uyN2QJ+p8ntzUaq2P7ZnfqvomrWZwMaUtyymv9XdGNak0hti\n32ti5SWOHmpifs6qQwRWpNwfYDN3qPw0FasX6m6UJofsS6YJLI/3AdO7x7oxSCCq/gt0Y+Vd\n55YQ2Jpc32lJztnIdD3c/DIbrtrLjBA4FD/vy4ivrXBzdzJ9vhUZ5yHPbh9B0siNzMEETMAE\nTMAETMAETMAETMAECt7Fzh8CEzABEzABEzABEzABEzABEygRsEDyR8EETMAETMAETMAETMAE\nTMAESgQskPxRMAETMAETMAETMAETMAETMIESAQskfxRMwARMwARMwARMwARMwARMoETAAskf\nBRMwARMwARMwARMwARMwARMoEbBA8kfBBEzABEzABEzABEzABEzABEoELJD8UTABEzABEzAB\nEzABEzABEzCBEgELJH8UTMAETMAETMAETMAETMAETKBEwALJH4WYwBecfB5f+GgCDRLQZylg\n4xvMJ6uP6/dJwb9TPRz8s3EC3f43Wr9L8e9V4zSdgwn0/H3u5r/R3f43xb8DJlATgQVIVawp\npROZQG0EFqotWW5TdXv9c9uwHarY5JQ7X4fKTkOx+v+k/1MOJtAsAlOT0ZzNyiyD+UyJz/Nk\n0G+7bAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAImYAIm\nYAImYAImYAImYAImYAImYAImYAImYAImkC8Ck+erOq5NgwS25Hl9Jt5pMB8/3r0E5qHqM1ax\nMcR/mVM0tfzuzEXd18F0fBv7AnMwgZjA9JzMjlX6/RlE/KdxwtJRf6tXw1bGxmPvY1kM8+H0\nptjjfThfz+9OPWn7KNK3MkSg3t8dVa2ez0k9aduJbT4K6+93p56/E61K204mLssEmk7gx+QY\nsAOanrMz7BYCs1FRfYaq2SI5BVHL787R1F2CKGYznvODc8rD1RoYgXN4LP58lB+vLMtyYa6f\nLkv/JNdzl6VL+6U6tk9hH/fhaD2/O/Wk7aNI38oYgXp+d1S1ej4n9aRtJ7Zafnfq+TvRqrTt\nZOKyTKDpBLYgx88x/VO2QGo63q7JcKPSZ+hWjmdUsFlzSKKW350NS1yu47g8tjJ2cynuFxwd\nTEAE7sUkFCr97uykBKVQ5PhP7CNM8QthP8Y+xV7BpsWyEIbiZPx7UE0g1fO7U0/aLPCxj7UT\nqPV3RznW8zmpJ23t3jaespbfnXr+TrQqbeM1dQ4m0CECM1Pu5ZiE0djS0QIJEA4DInAIT+mz\ntM6Ans7WQ7X+7kxDtUZgr2OavhCHKTlR/GtYMj6+72N3EZiM6n6C3VlDtX9CmoDtWZb2x1Xi\ny5Kl4nIrvBhZ8nccx0oCqZ7fnXrSpgKAnWgagXp+d+r5nNSTtmmVqSGjWn53lE09fydalbaG\n6jiJCaSTwH9wS/9or8Z2Lp1bIAHi/9u7EyBL6sKO4wgsLMcuAmu4oqDcLCxnwqmccklQDhWK\nGAioSYiaAEKhFSPFIVSZmFCBMimjiYggIIuRGwQU5A4EBJEFi8twwwKCIKKS72+n/0tv5828\n17Mzs/Nmvv+q33b3v/+v+9+f1/3o//SbwTIsgXN5VX7HaNqwXt1fL+r12tmLw8o1dlqHwzul\nWpfvkFsmt8D6HH7Oky/3wJBzLz/Qyu8q1Uu+cvMaub1eOQ7nyzXxHH3bl9xJOg2QSrterp02\nbcchiV1aCIE2106b86RN24XofquXlj51u3ay0VtJr58To9W21cGNt8YZeVsmr8AdHHoeIX+E\nvDh5GTzyERLYjO08QPJ05GByFNmDLEMmWun12snX6VJuG5gs8G+p22qBWhcmo0CunZScV9uR\nT5NDSW7+6mUKC+U6a35m5yt395NNSdqN15LfvzuZrEe+P0Qn21w7bdoOsUtX9aFAr9dODq3N\nedKm7Vix9XrttPmcGK22Y2UyavtZctS27Ib7QeDIfuikfewLgWXpZW54niUPk2mklAeZye9K\nlAFBqe/naa/XzirVQT7f4WDnVnVrdFhn1eQSKDd5J3LY69YOPU9kTyfHkdwcrUjyA4hO5xPV\n8/6SXW548vt+T6RiHJb8jmLSrbS5dtq07bZf1/eXQK/XTo6qzXnSpu1YifV67bT5nMjnSq+f\nKW3ajtfPn57fK58g9UxlQwUUGEJgFuvyeZIP5pPIRmQmOZW8h1xMViKTrUyvDjhfiWiWMkBa\nrrnC5UknsHl1xE8x3Zvkr9Fl+jNyFDmepAx1PmX9RDqnhjrW5nG2aRsny8QR6PXayRG3OU/a\ntB1vmkP1PX2dW3U4/+0ZrbbVLvp34hOk/n3v7LkC40ngITqTr9Xljw7cWOvY55nPHyHIT8CP\nJn9HJlPJd8BTOv0wqvxxht8NNPHfSSxwCsd+PjmHlHMmf9jjf0i+NpfrJn/drqzrdD6xev4f\n/JgI59RQx9q8dtq0jZNl4gj0eu3k/8PX5jxp03a8aQ7V9/S1fv3kLxin9PKZ0qbtwFb7+N/B\nQPr4kOy6AgosAoFn2Od3SH1wVLpxVjVTftJX6ifDtHzNoNPTs1L30mSA8BiHFLiBtd8g5cam\nNM4TpXytZmmyEcly/phDOXeYXaCU+olwTrW5dtq0XQDMhb4X6PXayYG2OU/atB1viG0+J0ar\n7Xgzad0fnyC1JvMFCijQUiC/l5RSHuUPLE2Of3v5j+zjk4PCoxymQP36ye8A5IcRZSDU3GTq\nXyXNP+DQbNcPy22unTZt++HY7ePICNSvnWyxzXnSpu3I9HbkttLmcyJPm3v9TGnTduSOZhFt\nySdIiwje3SowwQSO4njmkHzNrlk2qCqyfrKV/A5Jyo4DkwX+LXW3LVDrwmQTyB80uYPcRDr9\nN7l5/eScytOkGaRe8ocZNiTZ1kT4il2ba6dN27qZ8/0tMJxrJ0dcPnvrR1/qyudxv59TbT4n\nRqtt3dd5BfpWYF96/ibx/4PUt2/hIu34AdX5cy/T/F+5S8n8FSTn1vtK5QSbdrt2fsLxPknq\nT9BWYDlfbcjvmPgkH4RJXu7h+HONfKThsD3L+Ut219Tq92c+bfN7ffVyPAupP7Be2Qfzd9LH\nlwfpZ5trp03bQXZndR8KtLl2cnhtzpM2bRcF3VDXzv50qNfPidFquyhM3KcCIy7Q7SZvxHfo\nBieUQH7p81qSD+TryMfIfuQqkrqvkYlaul07eaoWg/xkPzevHyb5D1u+BrEFsSiwKwR56pO/\ndviPZDeSAVAGDs+TWaSUPGW6j6T9SSRtT66WZzPtt5JrYbABUptrp03bfjOyv4MLtLl2spU2\n50mbtoP3cPTWDHXttPmcGK22o3fkblmBMRTYl33lJu6YMdynu5pYAityOF8lufHPuZTkhu9Y\nMpFLL9fOIQDMJcUl80dMZBSPrbXA3rziAVLOkVxHN5B3k2bJ1+suJ3m6VNpfyfyqpN/KnXR4\nsAFSjqXNtdOmbb852d/BBdpcO9lKm/OkTdvBezg6a7pdO20+J0ar7egcuVtVQAEF+lBgKn3e\nhKzVh30fzS7n64brkJkkf5XMokAngdWozJPFZTutbNRNY3lL0o8Do8ahDLnY5tpp03bInbqy\n7wTaXDttzpM2bccjWpvPidFqOx5d7JMCCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIAC\nCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIAC\nCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKDCpBZaY1EfvwSuggAIKdBNYnwYfJR8ky5M5ZDKW7TjorciD5E0yjXyALE2eJmNdprDDvCfT\nyeNjvXP3p4ACCiiggAIKKKDAZBTYhoN+nWRAkPwbmazlCg48BstUADOr5TOr5bGerFjt/8Kx\n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\n5NLP6Y1ODLbPNu/VDmzzwWr72UeONftbq5pmALI6SbmCpM0yWaDMJFnOACElg8ssD5XT07Aq\nGzCNb/ZRXvO/zB9KmiXnwjUkA+20zTmyI8lAJIOsXkr6eysp+8r0KrI2qZcM1P6blHb5+twP\nSJ5ANcunqfglSduc33eSbO8xkkFMKbOZSZuVS0U1Xbyqv7ZRvyPLeaKV19xbrctrzyF5j1Kf\nZN9nkJxPFgUUUEABBRRQQIE+EXgX/dyUNG/w693Pus1IuRmvrxut+QyGcjP7ztHaQQ/bHQ99\nyE36WmQWmUrGuizLDvPer0kyYB6qrMDKdYdq0MO6cq51ezqWdjFZqss245enPTO6tBvO6lV4\nUfM9WZ66DPbikPPHooACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIAC\nCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCA\nAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiig\ngAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoo\noIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIK\nKKCAAgoooIACCiiggAIKKKCAAl0F/g+/o3RkFUjLGgAAAABJRU5ErkJggg==", - "text/plain": [ - "Plot with title \"\"" - ] - }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, - "output_type": "display_data" - } - ], - "source": [ - "plotMA(res)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "matched-electricity", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [], - "text/latex": [], - "text/markdown": [], - "text/plain": [ - "character(0)" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "resultsNames(dds)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "optional-border", - "metadata": {}, - "outputs": [], - "source": [ - "resOrdered <- res[order(res$pvalue),]" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "intimate-expression", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "out of 55516 with nonzero total read count\n", - "adjusted p-value < 0.1\n", - "LFC > 0 (up) : 602, 1.1%\n", - "LFC < 0 (down) : 2361, 4.3%\n", - "outliers [1] : 0, 0%\n", - "low counts [2] : 0, 0%\n", - "(mean count < 0)\n", - "[1] see 'cooksCutoff' argument of ?results\n", - "[2] see 'independentFiltering' argument of ?results\n", - "\n" - ] - } - ], - "source": [ - "summary(res)\n", - "\n", - "write.csv(as.data.frame(resOrdered), file=\"results.csv\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "R", - "language": "R", - "name": "ir" - }, - "language_info": { - "codemirror_mode": "r", - "file_extension": ".r", - "mimetype": "text/x-r-source", - "name": "R", - "pygments_lexer": "r", - "version": "4.0.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/bin/python/reporting/main.py b/bin/reporting.py similarity index 100% rename from bin/python/reporting/main.py rename to bin/reporting.py diff --git a/bin/python/scrape_software_versions.py b/bin/scrape_software_versions.py similarity index 100% rename from bin/python/scrape_software_versions.py rename to bin/scrape_software_versions.py diff --git a/dev/docker/static_reports/environment.yml b/dev/docker/static_reports/environment.yml index 9e8558ec..03b419fe 100644 --- a/dev/docker/static_reports/environment.yml +++ b/dev/docker/static_reports/environment.yml @@ -12,6 +12,5 @@ dependencies: - numpy=1.20.* - pandas=1.2.* - seaborn=0.11.* - - plotly:plotly_express=0.4.* - pyranges=0.0.96 - pysam=0.16.0.1 \ No newline at end of file diff --git a/dev/docker/static_reports/test_output/README b/dev/docker/static_reports/test_output/README deleted file mode 100644 index 321b7d1c..00000000 --- a/dev/docker/static_reports/test_output/README +++ /dev/null @@ -1 +0,0 @@ -Test data will generate this directory \ No newline at end of file diff --git a/modules/local/deseq2_diff.nf b/modules/local/deseq2_diff.nf index 495479b2..db54c74b 100755 --- a/modules/local/deseq2_diff.nf +++ b/modules/local/deseq2_diff.nf @@ -41,7 +41,7 @@ process DESEQ2_DIFF { String str_bams = bams.join(",") """ - Rscript $baseDir/bin/r/deseq2_diff.r \\ + deseq2_diff.r \\ --groups $str_groups \\ --bed $str_beds \\ --bam $str_bams \\ diff --git a/modules/local/generate_reports.nf b/modules/local/generate_reports.nf index 5eec33aa..9e3f5834 100644 --- a/modules/local/generate_reports.nf +++ b/modules/local/generate_reports.nf @@ -29,7 +29,7 @@ process GENERATE_REPORTS { script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - $baseDir/bin/python/reporting/main.py genimg \\ + reporting.py genimg \\ --meta $meta_data \\ --raw_frag "*.frag_len.txt" \\ --bed_frag "*bin500.awk.bed" \\ diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf index 3ba3c2fa..0b7a2271 100644 --- a/modules/local/get_software_versions.nf +++ b/modules/local/get_software_versions.nf @@ -28,6 +28,6 @@ process GET_SOFTWARE_VERSIONS { """ echo $workflow.manifest.version > pipeline.version.txt echo $workflow.nextflow.version > nextflow.version.txt - $baseDir/bin/python/scrape_software_versions.py &> software_versions_mqc.yaml + scrape_software_versions.py &> software_versions_mqc.yaml """ } diff --git a/modules/local/igv_session.nf b/modules/local/igv_session.nf index 962f61c5..8c6eec3e 100644 --- a/modules/local/igv_session.nf +++ b/modules/local/igv_session.nf @@ -52,7 +52,7 @@ process IGV_SESSION { echo "$output" > exp_files.txt find -L * -iname "*.gtf" -exec echo -e {}"\\t0,48,73" \\; > gtf.igv.txt cat *.txt > igv_files.txt - $baseDir/bin/python/igv_files_to_session.py igv_session.xml igv_files.txt $genome --path_prefix './' + igv_files_to_session.py igv_session.xml igv_files.txt $genome --path_prefix './' """ } diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 78beab3b..eed24d30 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -25,7 +25,7 @@ process SAMPLESHEET_CHECK { script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - $baseDir/bin/python/check_samplesheet.py $samplesheet samplesheet.valid.csv $params.igg_control + check_samplesheet.py $samplesheet samplesheet.valid.csv $params.igg_control """ } From 1b41824d965062c922fae96a81cc07cd33871d2f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 17:06:37 +0100 Subject: [PATCH 201/675] changing results folder structure --- conf/modules.config | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 75d504a2..af8b49b2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -56,18 +56,17 @@ params { args = "--fastqc" publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] } - 'bowtie2_align' { args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" suffix = ".target" - publish_dir = "${params.aligner}/target" - publish_files = ['txt':''] + publish_dir = "aligner/${params.aligner}/intermediate/" + publish_files = [:] } 'bowtie2_spikein_align' { args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" suffix = ".spikein" - publish_dir = "${params.aligner}/spikein" - publish_files = ['txt':''] + publish_dir = "aligner/${params.aligner}/intermediate/spikein" + publish_files = [:] } 'samtools_sort' { suffix = ".target.sorted" From bfa411eb03fcbcdbac221434a160f778589b8bcc Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Thu, 20 May 2021 17:06:47 +0100 Subject: [PATCH 202/675] should be boolean value --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index dfa0d903..ed4dcd24 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -309,7 +309,7 @@ "type": "string" }, "publish_align_intermed": { - "type": "string" + "type": "boolean" }, "skip_markduplicates": { "type": "string" From bba83bf7f8cc21b687d2df1c023445b1b83e1ae0 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 08:52:27 +0100 Subject: [PATCH 203/675] Updated ci min version --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0bf5d983..8c274726 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['20.04.0', ''] + nxf_ver: ['21.04.0', ''] steps: - name: Check out pipeline code uses: actions/checkout@v2 From 50582d23bd674bb0979bd32ce6e4c53a164d0978 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 08:53:49 +0100 Subject: [PATCH 204/675] Updated readme badge to 21.04.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44329dc7..115ce2b9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![GitHub Actions CI Status](https://github.com/nf-core/cutandrun/workflows/nf-core%20CI/badge.svg)](https://github.com/nf-core/cutandrun/actions) [![GitHub Actions Linting Status](https://github.com/nf-core/cutandrun/workflows/nf-core%20linting/badge.svg)](https://github.com/nf-core/cutandrun/actions) -[![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A520.04.0-brightgreen.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow-%E2%89%A521.04.0-brightgreen.svg)](https://www.nextflow.io/) [![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg)](https://bioconda.github.io/) [![Docker](https://img.shields.io/docker/automated/nfcore/cutandrun.svg)](https://hub.docker.com/r/nfcore/cutandrun) From ec1980c215cc1bbcbea1bd7f567b56f58849e23e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 09:02:23 +0100 Subject: [PATCH 205/675] Template updates --- nextflow_schema.json | 57 ++++++++++++++++++++++++------------------ workflows/cutandrun.nf | 2 +- 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index f053e5be..edbf6bf7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -20,12 +20,6 @@ "description": "Input FastQ files.", "help_text": "Use this to specify the location of your input FastQ files. For example:\n\n```bash\n--input 'path/to/data/sample_*_{1,2}.fastq'\n```\n\nPlease note the following requirements:\n\n1. The path must be enclosed in quotes\n2. The path must have at least one `*` wildcard character\n3. When using the pipeline with paired end data, the path must use `{1,2}` notation to specify read pairs.\n\nIf left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz`" }, - "single_end": { - "type": "boolean", - "description": "Specifies that the input is single-end reads.", - "fa_icon": "fas fa-align-center", - "help_text": "By default, the pipeline expects paired-end data. If you have single-end data, you need to specify `--single_end` on the command line when you launch the pipeline. A normal glob pattern, enclosed in quotation marks, can then be used for `--input`. For example:\n\n```bash\n--single_end --input '*.fastq'\n```\n\nIt is not possible to run a mixture of single-end and paired-end files in one run." - }, "outdir": { "type": "string", "description": "The output directory where the results will be saved.", @@ -104,6 +98,13 @@ "move" ] }, + "validate_params": { + "type": "boolean", + "description": "Boolean whether to validate parameters against the schema at runtime", + "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true + }, "email_on_fail": { "type": "string", "description": "Email address for completion summary, only when pipeline fails.", @@ -146,6 +147,13 @@ "default": "${params.outdir}/pipeline_info", "fa_icon": "fas fa-cogs", "hidden": true + }, + "show_hidden_params": { + "type": "boolean", + "fa_icon": "far fa-eye-slash", + "description": "Show all params when using `--help`", + "hidden": true, + "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." } } }, @@ -213,6 +221,12 @@ "hidden": true, "fa_icon": "fas fa-users-cog" }, + "config_profile_name": { + "type": "string", + "description": "Institutional config name.", + "hidden": true, + "fa_icon": "fas fa-users-cog" + }, "config_profile_description": { "type": "string", "description": "Institutional config description.", @@ -334,37 +348,32 @@ "type": "integer", "default": 10000 }, - "skip_coverage": { - "type": "string" - }, - "skip_igv": { - "type": "string" - }, - "skip_reporting": { - "type": "string" - }, "igg_control": { - "type": "boolean", + "type": "string", "default": "true" }, "peak_threshold": { "type": "number", "default": 0.05 }, - "enable_conda": { + "skip_peakcalling": { "type": "string" }, - "clusterOptions": { - "type": "string", - "default": "null" + "skip_igv": { + "type": "string" + }, + "skip_reporting": { + "type": "string" }, "multiqc_title": { "type": "string", - "default": "This is a test title" + "default": "null" + }, + "enable_conda": { + "type": "string" }, "singularity_pull_docker_container": { - "type": "string", - "default": "true" + "type": "string" }, "gtf": { "type": "string" @@ -385,4 +394,4 @@ "type": "string" } } -} +} \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 70c39e3f..02a2d47a 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -723,7 +723,7 @@ workflow CUTANDRUN { * MODULE: Export meta-data to csv file */ EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + ch_samtools_bam.collect{it[0]}.ifEmpty([]) ) /* From 208e04683b7c6abec1499772aba9c85d89a3888c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 09:10:43 +0100 Subject: [PATCH 206/675] Updated schema file --- lib/NfcoreSchema.groovy | 174 +--------------------------------------- 1 file changed, 3 insertions(+), 171 deletions(-) diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 1c29a58f..240f2dd0 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -177,176 +177,8 @@ class NfcoreSchema { } } - // Loop over nested exceptions and print the causingException - private static void printExceptions(exJSON, paramsJSON, log) { - def causingExceptions = exJSON['causingExceptions'] - if (causingExceptions.length() == 0) { - def m = exJSON['message'] =~ /required key \[([^\]]+)\] not found/ - // Missing required param - if (m.matches()) { - log.error "* Missing required parameter: --${m[0][1]}" - } - // Other base-level error - else if (exJSON['pointerToViolation'] == '#') { - log.error "* ${exJSON['message']}" - } - // Error with specific param - else { - def param = exJSON['pointerToViolation'] - ~/^#\// - def param_val = paramsJSON[param].toString() - log.error "* --${param}: ${exJSON['message']} (${param_val})" - } - } - for (ex in causingExceptions) { - printExceptions(ex, paramsJSON, log) - } - } - - // Remove an element from a JSONArray - private static JSONArray removeElement(jsonArray, element){ - def list = [] - int len = jsonArray.length() - for (int i=0;i - if(rawSchema.keySet().contains('definitions')){ - rawSchema.definitions.each { definition -> - for (key in definition.keySet()){ - if (definition[key].get("properties").keySet().contains(ignore_param)){ - // Remove the param to ignore - definition[key].get("properties").remove(ignore_param) - // If the param was required, change this - if (definition[key].has("required")) { - def cleaned_required = removeElement(definition[key].required, ignore_param) - definition[key].put("required", cleaned_required) - } - } - } - } - } - if(rawSchema.keySet().contains('properties') && rawSchema.get('properties').keySet().contains(ignore_param)) { - rawSchema.get("properties").remove(ignore_param) - } - if(rawSchema.keySet().contains('required') && rawSchema.required.contains(ignore_param)) { - def cleaned_required = removeElement(rawSchema.required, ignore_param) - rawSchema.put("required", cleaned_required) - } - } - return rawSchema - } - - private static Map cleanParameters(params) { - def new_params = params.getClass().newInstance(params) - for (p in params) { - // remove anything evaluating to false - if (!p['value']) { - new_params.remove(p.key) - } - // Cast MemoryUnit to String - if (p['value'].getClass() == nextflow.util.MemoryUnit) { - new_params.replace(p.key, p['value'].toString()) - } - // Cast Duration to String - if (p['value'].getClass() == nextflow.util.Duration) { - new_params.replace(p.key, p['value'].toString().replaceFirst(/d(?!\S)/, "day")) - } - // Cast LinkedHashMap to String - if (p['value'].getClass() == LinkedHashMap) { - new_params.replace(p.key, p['value'].toString()) - } - } - return new_params - } - - /* - * This method tries to read a JSON params file - */ - private static LinkedHashMap params_load(String json_schema) { - def params_map = new LinkedHashMap() - try { - params_map = params_read(json_schema) - } catch (Exception e) { - println "Could not read parameters settings from JSON. $e" - params_map = new LinkedHashMap() - } - return params_map - } - - private static Map log_colours(Boolean monochrome_logs) { - Map colorcodes = [:] - - // Reset / Meta - colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" - colorcodes['bold'] = monochrome_logs ? '' : "\033[1m" - colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" - colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m" - colorcodes['blink'] = monochrome_logs ? '' : "\033[5m" - colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m" - colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" - - // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" - - // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" - - // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" - - // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" - - // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" - - return colorcodes - } - static String dashed_line(monochrome_logs) { - Map colors = log_colours(monochrome_logs) + Map colors = NfcoreTemplate.logColours(monochrome_logs) return "-${colors.dim}----------------------------------------------------${colors.reset}-" } @@ -430,7 +262,7 @@ class NfcoreSchema { * Beautify parameters for --help */ private static String params_help(workflow, params, json_schema, command) { - Map colors = log_colours(params.monochrome_logs) + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) Integer num_hidden = 0 String output = '' output += 'Typical pipeline command:\n\n' @@ -556,7 +388,7 @@ class NfcoreSchema { * Beautify parameters for summary and return as string */ private static String params_summary_log(workflow, params, json_schema) { - Map colors = log_colours(params.monochrome_logs) + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) String output = '' def params_map = paramsSummaryMap(workflow, params) def max_chars = paramsMaxChars(params_map) From 07037280d6fb186f010897aa0134bf9dcc234c86 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 09:10:50 +0100 Subject: [PATCH 207/675] Comment changes --- lib/WorkflowMain.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 365bdba4..a1db4cb1 100644 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -1,5 +1,5 @@ // -// This file holds several functions specific to the main.nf workflow in the nf-core/rnaseq pipeline +// This file holds several functions specific to the main.nf workflow in the nf-core/cutandrun pipeline // class WorkflowMain { From c6c225ad2e1197aa559d98ea4065ea74fd680d97 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 09:27:18 +0100 Subject: [PATCH 208/675] Fixed breaks from template merge --- lib/NfcoreSchema.groovy | 13 ++++--------- nextflow_schema.json | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy index 240f2dd0..7395acb4 100755 --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -177,11 +177,6 @@ class NfcoreSchema { } } - static String dashed_line(monochrome_logs) { - Map colors = NfcoreTemplate.logColours(monochrome_logs) - return "-${colors.dim}----------------------------------------------------${colors.reset}-" - } - /* Method to actually read in JSON file using Groovy. Group (as Key), values are all parameters @@ -261,7 +256,7 @@ class NfcoreSchema { /* * Beautify parameters for --help */ - private static String params_help(workflow, params, json_schema, command) { + private static String params_help(workflow, params, command, schema_filename='nextflow_schema.json') { Map colors = NfcoreTemplate.logColours(params.monochrome_logs) Integer num_hidden = 0 String output = '' @@ -387,7 +382,7 @@ class NfcoreSchema { /* * Beautify parameters for summary and return as string */ - private static String params_summary_log(workflow, params, json_schema) { + private static String paramsSummaryLog(workflow, params) { Map colors = NfcoreTemplate.logColours(params.monochrome_logs) String output = '' def params_map = paramsSummaryMap(workflow, params) @@ -402,9 +397,9 @@ class NfcoreSchema { output += '\n' } } - output += dashed_line(params.monochrome_logs) + output += NfcoreTemplate.dashedLine(params.monochrome_logs) output += colors.dim + "\n Only displaying parameters that differ from defaults.\n" + colors.reset - output += dashed_line(params.monochrome_logs) + output += NfcoreTemplate.dashedLine(params.monochrome_logs) return output } diff --git a/nextflow_schema.json b/nextflow_schema.json index edbf6bf7..95e8028f 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -349,7 +349,7 @@ "default": 10000 }, "igg_control": { - "type": "string", + "type": "boolean", "default": "true" }, "peak_threshold": { From b62d366f54e2b1213c2d1211019417b07cfd1ddf Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 09:50:24 +0100 Subject: [PATCH 209/675] Bowtie2 results show in multiqc again --- assets/multiqc_config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index d7382242..b420683e 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -56,11 +56,11 @@ module_order: - bowtie2: name: 'Bowtie2 (target)' path_filters: - - "./bowtie2/*target_summary.txt" + - "./bowtie2/*target.bowtie2.log" - bowtie2: name: 'Bowtie2 (spike-in)' path_filters: - - "./bowtie2/*spikein_summary.txt" + - "./bowtie2/*spikein.bowtie2.log" - samtools - picard From 11f71875434f96170937e0f318a04892b9a3e740 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 11:22:26 +0100 Subject: [PATCH 210/675] Refractored python reporting and dev --- .gitignore | 21 +- bin/lib/{figures.py => reports.py} | 112 ++-- bin/reporting.py | 18 +- dev/docker/static_reports/Dockerfile | 4 +- dev/docker/static_reports/run.sh | 33 +- .../test_data/h3k27me3_R1_raw.csv | 470 --------------- .../test_data/h3k27me3_R2_raw.csv | 454 -------------- .../test_data/h3k4me3_R1_raw.csv | 454 -------------- .../test_data/h3k4me3_R2_raw.csv | 564 ------------------ .../static_reports/test_data/igg_R1_raw.csv | 534 ----------------- .../static_reports/test_data/igg_R2_raw.csv | 508 ---------------- .../static_reports/test_data/meta_table.csv | 7 - modules/local/generate_reports.nf | 4 +- workflows/cutandrun.nf | 10 +- 14 files changed, 77 insertions(+), 3116 deletions(-) rename bin/lib/{figures.py => reports.py} (89%) delete mode 100644 dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv delete mode 100644 dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv delete mode 100644 dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv delete mode 100644 dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv delete mode 100644 dev/docker/static_reports/test_data/igg_R1_raw.csv delete mode 100644 dev/docker/static_reports/test_data/igg_R2_raw.csv delete mode 100644 dev/docker/static_reports/test_data/meta_table.csv diff --git a/.gitignore b/.gitignore index abd96609..87be124e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,22 +14,5 @@ testing* R_sessionInfo.log -dev/docker/static_reports/test_output/alignment_summary.csv -dev/docker/static_reports/test_output/alignment_summary.png -dev/docker/static_reports/test_output/report.pdf -dev/docker/static_reports/test_output/log.txt -dev/docker/static_reports/test_output/duplication_summary.csv - -dev/docker/static_reports/test_output/duplication_summary.png - -dev/docker/static_reports/test_output/frag_hist.csv - -dev/docker/static_reports/test_output/frag_hist.png - -dev/docker/static_reports/test_output/frag_violin.csv - -dev/docker/static_reports/test_output/frag_violin.png - -dev/docker/static_reports/test_data/tmp_dir/* - -dev/docker/static_reports/test_output/* +dev/docker/static_reports/test_data/ +dev/docker/static_reports/test_output/ diff --git a/bin/lib/figures.py b/bin/lib/reports.py similarity index 89% rename from bin/lib/figures.py rename to bin/lib/reports.py index d6f9aa4a..e80592c3 100644 --- a/bin/lib/figures.py +++ b/bin/lib/reports.py @@ -10,12 +10,11 @@ from matplotlib.backends.backend_pdf import PdfPages from matplotlib.ticker import FuncFormatter import seaborn as sns -import plotly.express as px import pyranges as pr import pysam import time -class Figures: +class Reports: data_table = None frag_hist = None frag_violin = None @@ -23,10 +22,10 @@ class Figures: seacr_beds = None bams = None - def __init__(self, logger, meta, frags, bin_frag, seacr_bed, bams): + def __init__(self, logger, meta, raw_frags, bin_frag, seacr_bed, bams): self.logger = logger self.meta_path = meta - self.frag_path = frags + self.raw_frag_path = raw_frags self.bin_frag_path = bin_frag self.seacr_bed_path = seacr_bed self.bam_path = bams @@ -35,6 +34,12 @@ def __init__(self, logger, meta, frags, bin_frag, seacr_bed, bams): sns.set_theme() sns.set_context("paper") + #* + #======================================================================================== + # UTIL + #======================================================================================== + #*/ + def format_millions(self, x, pos): #the two args are the value and tick position return '%1.1fM' % (x * 1e-6) @@ -43,13 +48,19 @@ def format_thousands(self, x, pos): #the two args are the value and tick position return '%1.1fK' % (x * 1e-3) + #* + #======================================================================================== + # LOAD DATA + #======================================================================================== + #*/ + def load_data(self): # ---------- Data - data_table --------- # self.data_table = pd.read_csv(self.meta_path, sep=',') - # ---------- Data - frag_hist --------- # + # ---------- Data - Raw frag histogram --------- # # Create list of deeptools raw fragment files - dt_frag_list = glob.glob(self.frag_path) + dt_frag_list = glob.glob(self.raw_frag_path) for i in list(range(len(dt_frag_list))): # create dataframe from csv file for each file and save to a list @@ -86,33 +97,9 @@ def load_data(self): self.frag_hist['group'] = group_short self.frag_hist['replicate'] = rep_short - # print(self.frag_hist.head(10)) - # self.frag_hist[['group','replicate']] = self.frag_hist['Sample'].str.split('.', 1)[:,0].str.split('_', 1, expand=True) - # print(self.frag_hist.head(10)) - - # ---------- Data - frag_violin --------- # - # create hue array using regex pattern matching - # for i in list(range(0,len(sample_arr))): - # sample_i = sample_arr[i] - # # sample_exp = re.findall("^[^_]*", sample_i) - # sample_exp = sample_i.split(".")[0] - # group_exp = sample_exp.split("_")[0] - # rep_exp = sample_exp.split("_")[1] - - - # if i==0: - # # sample_exp_arr = np.array(sample_exp[0]) - # group_arr = np.array(group_exp) - # rep_arr = np.array(rep_exp) - # else: - # # sample_exp_arr = np.append(sample_exp_arr, sample_exp[0]) - # group_arr = np.append(group_arr, group_exp) - # rep_arr = np.append(rep_arr, rep_exp) - self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "group" : group_arr , "replicate": rep_arr} ) #, index = np.arange(len(frags_arr))) - # self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "sample" : sample_arr , "histone_mark": sample_exp_arr}, index = np.arange(len(frags_arr))) - # print(self.frag_violin.head(10)) - # ---------- Data - frag_bin500 --------- # + + # ---------- Data - Binned frags --------- # # create full join data frame for count data # start by creating list of bin500 files dt_bin_frag_list = glob.glob(self.bin_frag_path) @@ -132,7 +119,7 @@ def load_data(self): chrom_bin_cols = self.frag_bin500[['chrom','bin']] self.frag_bin500 = pd.concat([chrom_bin_cols,log2_counts], axis=1) - # ---------- Data - seacr_bed --------- # + # ---------- Data - Peaks --------- # # create dataframe for seacr peaks seacr_bed_list = glob.glob(self.seacr_bed_path) @@ -231,15 +218,10 @@ def pe_bam_to_df(bam_path): self.frip.at[k, 'mapped_frags'] = bam_now.shape[0] k=k+1 - # ---------- Data - New frag_hist --------- # - # print(self.bam_df_list) - + # ---------- Data - New frag_hist --------- # for i in list(range(len(self.bam_df_list))): df_i = self.bam_df_list[i] widths_i = (df_i['End'] - df_i['Start']).abs() - # print(df_i) - # print(widths_i[1:20,]) - # print(np.max(widths_i)) unique_i, counts_i = np.unique(widths_i, return_counts=True) group_i = np.repeat(self.frip.at[i, 'group'], len(unique_i)) rep_i = np.repeat(self.frip.at[i, 'replicate'], len(unique_i)) @@ -256,13 +238,9 @@ def pe_bam_to_df(bam_path): rep_arr = np.append(rep_arr, rep_i) self.frag_series = pd.DataFrame({'group' : group_arr, 'replicate' : rep_arr, 'frag_len' : frag_lens, 'occurences' : frag_counts}) - # print(self.frag_series.head(10)) - # print(self.frip.at[i, 'group']) - # print(self.frip.at[i, 'replicate']) - # ---------- Data - Peak stats --------- # - ## create number of peaks df + # create number of peaks df unique_groups = self.seacr_beds.group.unique() unique_replicates = self.seacr_beds.replicate.unique() self.df_no_peaks = pd.DataFrame(index=range(0,(len(unique_groups)*len(unique_replicates))), columns=['group','replicate','all_peaks']) @@ -275,9 +253,8 @@ def pe_bam_to_df(bam_path): self.df_no_peaks.at[k,'replicate'] = unique_replicates[j] k=k+1 - # ---------- Data - Reproducibility of peaks between replicates --------- # - ## empty dataframe to fill in loop + # empty dataframe to fill in loop self.reprod_peak_stats = self.df_no_peaks self.reprod_peak_stats = self.reprod_peak_stats.reindex(columns=self.reprod_peak_stats.columns.tolist() + ['no_peaks_reproduced','peak_reproduced_rate']) @@ -292,7 +269,7 @@ def array_permutate(x): loop_list = i_list return out_list - ## create pyranges objects and fill df + # create pyranges objects and fill df unique_groups = self.seacr_beds.group.unique() unique_replicates = self.seacr_beds.replicate.unique() rep_permutations = array_permutate(range(len(unique_replicates))) @@ -326,7 +303,6 @@ def array_permutate(x): self.reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate # ---------- Data - Percentage of fragments in peaks --------- # - for i in range(len(self.bam_df_list)): bam_i = self.bam_df_list[i] self.frip.at[i,'mapped_frags'] = bam_i.shape[0] @@ -336,22 +312,24 @@ def array_permutate(x): pyr_seacr = pr.PyRanges(chromosomes=seacr_bed_i['chrom'], starts=seacr_bed_i['start'], ends=seacr_bed_i['end']) pyr_bam = pr.PyRanges(df=bam_i) sample_id = group_i + "_" + rep_i - pyr_bam_dict = {sample_id : pyr_bam} - frag_count_pyr = pyr_bam.count_overlaps(pyr_seacr) # pr.count_overlaps(pyr_bam_dict, pyr_seacr) - # print(frag_count_pyr) - # frag_counts = frag_count_pyr.NumberOverlaps.sum() + frag_count_pyr = pyr_bam.count_overlaps(pyr_seacr) frag_counts = np.count_nonzero(frag_count_pyr.NumberOverlaps) self.frip.at[i,'frags_in_peaks'] = frag_counts self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 - # print(self.frip) - def annotate_data(self): + def annotate_data_table(self): # Make new perctenage alignment columns self.data_table['target_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_target')] / self.data_table.loc[:, ('bt2_total_reads_target')] * 100 self.data_table['spikein_alignment_rate'] = self.data_table.loc[:, ('bt2_total_aligned_spikein')] / self.data_table.loc[:, ('bt2_total_reads_spikein')] * 100 + #* + #======================================================================================== + # GEN REPORTS + #======================================================================================== + #*/ + def generate_plots(self): # Init plots = dict() @@ -359,7 +337,7 @@ def generate_plots(self): # Get Data self.load_data() - self.annotate_data() + self.annotate_data_table() # Plot 1 plot1, data1 = self.alignment_summary() @@ -415,22 +393,6 @@ def generate_plots(self): return (plots, data) - def generate_dash_plots(self): - # Init - plots = dict() - data = dict() - - # Get Data - self.load_data() - self.annotate_data() - - # Plot 1 - plot1, data1 = self.alignment_summary_ex() - plots["alignment_summary"] = plot1 - data["alignment_summary"] = data1 - - return (plots, data) - def gen_plots_to_folder(self, output_path): # Init abs_path = os.path.abspath(output_path) @@ -460,9 +422,11 @@ def gen_pdf(self, output_path, plots): # d['CreationDate'] = datetime.datetime(2009, 11, 13) # d['ModDate'] = datetime.datetime.today() - ##### PLOTS ##### - - # TODO: Add group ordering - order=['h3k27me3', 'h3k4me3', 'igg'] + #* + #======================================================================================== + # PLOTS + #======================================================================================== + #*/ # ---------- Plot 1 - Alignment Summary --------- # def alignment_summary(self): diff --git a/bin/reporting.py b/bin/reporting.py index 0da6d828..15ac7639 100755 --- a/bin/reporting.py +++ b/bin/reporting.py @@ -5,12 +5,10 @@ from __future__ import division from __future__ import print_function -import sys -import os import argparse import logging -from lib.figures import Figures +from lib.reports import Reports def init_logger(app_name, log_file = None): logger = logging.getLogger(app_name) @@ -35,12 +33,12 @@ def gen_png(parsed_args): frag_path = parsed_args.raw_frag output_path = parsed_args.output logger = init_logger('gen_img', parsed_args.log) - bin_frag_path = parsed_args.bed_frag + bin_frag_path = parsed_args.bin_frag seacr_bed_path = parsed_args.seacr_bed bams_path = parsed_args.bams logger.info('Generating plots to output folder') - fig = Figures(logger, meta_path, frag_path, bin_frag_path, seacr_bed_path, bams_path) + fig = Reports(logger, meta_path, frag_path, bin_frag_path, seacr_bed_path, bams_path) fig.gen_plots_to_folder(output_path) logger.info('Completed') @@ -50,15 +48,15 @@ def gen_png(parsed_args): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(help='sub-command help') - # Functions - parser_genimg = subparsers.add_parser('genimg', help='generate images help') + # Generate reporting function + parser_genimg = subparsers.add_parser('gen_reports') parser_genimg.set_defaults(func=gen_png) + parser_genimg.add_argument('--log', required=False) parser_genimg.add_argument('--meta', required=True) parser_genimg.add_argument('--raw_frag', required=True) - parser_genimg.add_argument('--output', required=True) - parser_genimg.add_argument('--log', required=False) - parser_genimg.add_argument('--bed_frag', required=True) + parser_genimg.add_argument('--bin_frag', required=True) parser_genimg.add_argument('--seacr_bed', required=True) + parser_genimg.add_argument('--output', required=True) parser_genimg.add_argument('--bams', required=True) # Parse diff --git a/dev/docker/static_reports/Dockerfile b/dev/docker/static_reports/Dockerfile index 7c539990..afd3a4ec 100644 --- a/dev/docker/static_reports/Dockerfile +++ b/dev/docker/static_reports/Dockerfile @@ -1,6 +1,6 @@ -FROM nfcore/base:1.12.1 +FROM nfcore/base:1.14 LABEL authors="chris.cheshire@crick.ac.uk" \ - description="Docker image containing all requirements for generating static reports" + description="Docker image containing all requirements for development of static reports" # Install conda packages COPY ./environment.yml / diff --git a/dev/docker/static_reports/run.sh b/dev/docker/static_reports/run.sh index 8e866a36..42e57c48 100755 --- a/dev/docker/static_reports/run.sh +++ b/dev/docker/static_reports/run.sh @@ -1,17 +1,24 @@ #!/bin/bash -# docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/python/reporting/main.py genimg \ -# --meta /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ -# --raw_frag /home/repo/dev/docker/static_reports/test_data/*_raw.csv \ -# --output /home/repo/dev/docker/static_reports/test_output \ -# --log /home/repo/dev/docker/static_reports/test_output/log.txt +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/meta_table.csv +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1_raw.csv +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.bed.stringent.bed +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.frag_len.txt +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.frags.bin500.awk.bed +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.sorted.bam +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R2_raw.csv -docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/python/reporting/main.py genimg \ ---meta /home/repo/dev/docker/static_reports/test_data/tmp_dir/meta_table.csv \ ---raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*frag_len.txt \ ---bed_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bin500*.bed \ ---seacr_bed /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bed.*.bed \ ---bams /home/repo/dev/docker/static_reports/test_data/tmp_dir/*sorted.bam \ +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1_raw.csv +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1.frag_len.txt +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1.frags.bin500.awk.bed +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1.sorted.bam +wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R2_raw.csv + +docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/reporting.py gen_reports \ +--meta /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ +--raw_frag /home/repo/dev/docker/static_reports/test_data/*frag_len.txt \ +--bin_frag /home/repo/dev/docker/static_reports/test_data/*bin500*.bed \ +--seacr_bed /home/repo/dev/docker/static_reports/test_data/*bed.*.bed \ +--bams /home/repo/dev/docker/static_reports/test_data/*sorted.bam \ --output /home/repo/dev/docker/static_reports/test_output \ ---log /home/repo/dev/docker/static_reports/test_output/log.txt -# --raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*_raw.csv \ \ No newline at end of file +--log /home/repo/dev/docker/static_reports/test_output/log.txt \ No newline at end of file diff --git a/dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv b/dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv deleted file mode 100644 index 9ff4db98..00000000 --- a/dev/docker/static_reports/test_data/h3k27me3_R1_raw.csv +++ /dev/null @@ -1,470 +0,0 @@ -#bamPEFragmentSize -Size Occurrences Sample -28 1 h3k27me3_R1.markdup.bam -31 1 h3k27me3_R1.markdup.bam -33 2 h3k27me3_R1.markdup.bam -34 1 h3k27me3_R1.markdup.bam -35 1 h3k27me3_R1.markdup.bam -37 1 h3k27me3_R1.markdup.bam -39 2 h3k27me3_R1.markdup.bam -40 2 h3k27me3_R1.markdup.bam -41 5 h3k27me3_R1.markdup.bam -42 1 h3k27me3_R1.markdup.bam -43 2 h3k27me3_R1.markdup.bam -44 1 h3k27me3_R1.markdup.bam -45 3 h3k27me3_R1.markdup.bam -46 3 h3k27me3_R1.markdup.bam -47 1 h3k27me3_R1.markdup.bam -50 2 h3k27me3_R1.markdup.bam -51 2 h3k27me3_R1.markdup.bam -52 6 h3k27me3_R1.markdup.bam -53 4 h3k27me3_R1.markdup.bam -54 5 h3k27me3_R1.markdup.bam -55 3 h3k27me3_R1.markdup.bam -56 2 h3k27me3_R1.markdup.bam -57 3 h3k27me3_R1.markdup.bam -58 4 h3k27me3_R1.markdup.bam -59 5 h3k27me3_R1.markdup.bam -60 1 h3k27me3_R1.markdup.bam -61 3 h3k27me3_R1.markdup.bam -62 4 h3k27me3_R1.markdup.bam -63 4 h3k27me3_R1.markdup.bam -64 3 h3k27me3_R1.markdup.bam -65 3 h3k27me3_R1.markdup.bam -67 3 h3k27me3_R1.markdup.bam -68 3 h3k27me3_R1.markdup.bam -70 2 h3k27me3_R1.markdup.bam -71 1 h3k27me3_R1.markdup.bam -72 2 h3k27me3_R1.markdup.bam -73 3 h3k27me3_R1.markdup.bam -74 2 h3k27me3_R1.markdup.bam -75 3 h3k27me3_R1.markdup.bam -76 1 h3k27me3_R1.markdup.bam -77 2 h3k27me3_R1.markdup.bam -78 1 h3k27me3_R1.markdup.bam -79 1 h3k27me3_R1.markdup.bam -80 1 h3k27me3_R1.markdup.bam -81 4 h3k27me3_R1.markdup.bam -82 1 h3k27me3_R1.markdup.bam -83 3 h3k27me3_R1.markdup.bam -86 2 h3k27me3_R1.markdup.bam -88 2 h3k27me3_R1.markdup.bam -91 1 h3k27me3_R1.markdup.bam -92 2 h3k27me3_R1.markdup.bam -94 2 h3k27me3_R1.markdup.bam -96 3 h3k27me3_R1.markdup.bam -97 1 h3k27me3_R1.markdup.bam -98 2 h3k27me3_R1.markdup.bam -99 1 h3k27me3_R1.markdup.bam -100 1 h3k27me3_R1.markdup.bam -101 1 h3k27me3_R1.markdup.bam -103 1 h3k27me3_R1.markdup.bam -106 1 h3k27me3_R1.markdup.bam -110 1 h3k27me3_R1.markdup.bam -114 1 h3k27me3_R1.markdup.bam -115 1 h3k27me3_R1.markdup.bam -117 2 h3k27me3_R1.markdup.bam -122 3 h3k27me3_R1.markdup.bam -124 1 h3k27me3_R1.markdup.bam -128 1 h3k27me3_R1.markdup.bam -132 2 h3k27me3_R1.markdup.bam -133 1 h3k27me3_R1.markdup.bam -137 1 h3k27me3_R1.markdup.bam -138 1 h3k27me3_R1.markdup.bam -139 1 h3k27me3_R1.markdup.bam -140 1 h3k27me3_R1.markdup.bam -141 3 h3k27me3_R1.markdup.bam -142 2 h3k27me3_R1.markdup.bam -143 3 h3k27me3_R1.markdup.bam -144 1 h3k27me3_R1.markdup.bam -145 1 h3k27me3_R1.markdup.bam -146 2 h3k27me3_R1.markdup.bam -147 4 h3k27me3_R1.markdup.bam -149 1 h3k27me3_R1.markdup.bam -150 3 h3k27me3_R1.markdup.bam -151 2 h3k27me3_R1.markdup.bam -152 1 h3k27me3_R1.markdup.bam -153 1 h3k27me3_R1.markdup.bam -154 2 h3k27me3_R1.markdup.bam -155 3 h3k27me3_R1.markdup.bam -156 6 h3k27me3_R1.markdup.bam -157 5 h3k27me3_R1.markdup.bam -158 3 h3k27me3_R1.markdup.bam -159 2 h3k27me3_R1.markdup.bam -160 1 h3k27me3_R1.markdup.bam -161 4 h3k27me3_R1.markdup.bam -162 3 h3k27me3_R1.markdup.bam -163 6 h3k27me3_R1.markdup.bam -164 9 h3k27me3_R1.markdup.bam -165 7 h3k27me3_R1.markdup.bam -166 9 h3k27me3_R1.markdup.bam -167 8 h3k27me3_R1.markdup.bam -168 6 h3k27me3_R1.markdup.bam -169 7 h3k27me3_R1.markdup.bam -170 6 h3k27me3_R1.markdup.bam -171 1 h3k27me3_R1.markdup.bam -172 4 h3k27me3_R1.markdup.bam -173 2 h3k27me3_R1.markdup.bam -174 9 h3k27me3_R1.markdup.bam -175 8 h3k27me3_R1.markdup.bam -176 17 h3k27me3_R1.markdup.bam -177 5 h3k27me3_R1.markdup.bam -178 3 h3k27me3_R1.markdup.bam -179 10 h3k27me3_R1.markdup.bam -180 9 h3k27me3_R1.markdup.bam -181 11 h3k27me3_R1.markdup.bam -182 4 h3k27me3_R1.markdup.bam -183 10 h3k27me3_R1.markdup.bam -184 6 h3k27me3_R1.markdup.bam -185 14 h3k27me3_R1.markdup.bam -186 1 h3k27me3_R1.markdup.bam -187 4 h3k27me3_R1.markdup.bam -188 11 h3k27me3_R1.markdup.bam -189 14 h3k27me3_R1.markdup.bam -190 11 h3k27me3_R1.markdup.bam -191 13 h3k27me3_R1.markdup.bam -192 11 h3k27me3_R1.markdup.bam -193 14 h3k27me3_R1.markdup.bam -194 13 h3k27me3_R1.markdup.bam -195 7 h3k27me3_R1.markdup.bam -196 10 h3k27me3_R1.markdup.bam -197 10 h3k27me3_R1.markdup.bam -198 14 h3k27me3_R1.markdup.bam -199 8 h3k27me3_R1.markdup.bam -200 6 h3k27me3_R1.markdup.bam -201 8 h3k27me3_R1.markdup.bam -202 11 h3k27me3_R1.markdup.bam -203 11 h3k27me3_R1.markdup.bam -204 12 h3k27me3_R1.markdup.bam -205 6 h3k27me3_R1.markdup.bam -206 13 h3k27me3_R1.markdup.bam -207 9 h3k27me3_R1.markdup.bam -208 13 h3k27me3_R1.markdup.bam -209 9 h3k27me3_R1.markdup.bam -210 16 h3k27me3_R1.markdup.bam -211 5 h3k27me3_R1.markdup.bam -212 7 h3k27me3_R1.markdup.bam -213 4 h3k27me3_R1.markdup.bam -214 12 h3k27me3_R1.markdup.bam -215 9 h3k27me3_R1.markdup.bam -216 10 h3k27me3_R1.markdup.bam -217 11 h3k27me3_R1.markdup.bam -218 14 h3k27me3_R1.markdup.bam -219 7 h3k27me3_R1.markdup.bam -220 13 h3k27me3_R1.markdup.bam -221 8 h3k27me3_R1.markdup.bam -222 11 h3k27me3_R1.markdup.bam -223 13 h3k27me3_R1.markdup.bam -224 9 h3k27me3_R1.markdup.bam -225 15 h3k27me3_R1.markdup.bam -226 8 h3k27me3_R1.markdup.bam -227 6 h3k27me3_R1.markdup.bam -228 4 h3k27me3_R1.markdup.bam -229 3 h3k27me3_R1.markdup.bam -230 7 h3k27me3_R1.markdup.bam -231 8 h3k27me3_R1.markdup.bam -232 3 h3k27me3_R1.markdup.bam -233 11 h3k27me3_R1.markdup.bam -234 8 h3k27me3_R1.markdup.bam -235 3 h3k27me3_R1.markdup.bam -236 4 h3k27me3_R1.markdup.bam -237 5 h3k27me3_R1.markdup.bam -238 6 h3k27me3_R1.markdup.bam -239 5 h3k27me3_R1.markdup.bam -240 4 h3k27me3_R1.markdup.bam -241 3 h3k27me3_R1.markdup.bam -242 2 h3k27me3_R1.markdup.bam -243 5 h3k27me3_R1.markdup.bam -244 7 h3k27me3_R1.markdup.bam -245 3 h3k27me3_R1.markdup.bam -246 6 h3k27me3_R1.markdup.bam -247 5 h3k27me3_R1.markdup.bam -248 5 h3k27me3_R1.markdup.bam -249 3 h3k27me3_R1.markdup.bam -250 3 h3k27me3_R1.markdup.bam -251 4 h3k27me3_R1.markdup.bam -252 5 h3k27me3_R1.markdup.bam -253 3 h3k27me3_R1.markdup.bam -254 2 h3k27me3_R1.markdup.bam -255 3 h3k27me3_R1.markdup.bam -256 1 h3k27me3_R1.markdup.bam -257 5 h3k27me3_R1.markdup.bam -258 3 h3k27me3_R1.markdup.bam -259 6 h3k27me3_R1.markdup.bam -260 2 h3k27me3_R1.markdup.bam -261 1 h3k27me3_R1.markdup.bam -262 4 h3k27me3_R1.markdup.bam -263 2 h3k27me3_R1.markdup.bam -264 1 h3k27me3_R1.markdup.bam -265 2 h3k27me3_R1.markdup.bam -266 1 h3k27me3_R1.markdup.bam -267 2 h3k27me3_R1.markdup.bam -268 1 h3k27me3_R1.markdup.bam -269 1 h3k27me3_R1.markdup.bam -271 3 h3k27me3_R1.markdup.bam -272 2 h3k27me3_R1.markdup.bam -274 1 h3k27me3_R1.markdup.bam -275 2 h3k27me3_R1.markdup.bam -276 1 h3k27me3_R1.markdup.bam -278 1 h3k27me3_R1.markdup.bam -279 2 h3k27me3_R1.markdup.bam -280 2 h3k27me3_R1.markdup.bam -283 1 h3k27me3_R1.markdup.bam -284 1 h3k27me3_R1.markdup.bam -285 1 h3k27me3_R1.markdup.bam -286 1 h3k27me3_R1.markdup.bam -288 1 h3k27me3_R1.markdup.bam -292 1 h3k27me3_R1.markdup.bam -295 1 h3k27me3_R1.markdup.bam -296 1 h3k27me3_R1.markdup.bam -298 2 h3k27me3_R1.markdup.bam -299 3 h3k27me3_R1.markdup.bam -300 1 h3k27me3_R1.markdup.bam -301 1 h3k27me3_R1.markdup.bam -303 1 h3k27me3_R1.markdup.bam -312 1 h3k27me3_R1.markdup.bam -313 2 h3k27me3_R1.markdup.bam -315 1 h3k27me3_R1.markdup.bam -319 1 h3k27me3_R1.markdup.bam -321 2 h3k27me3_R1.markdup.bam -322 2 h3k27me3_R1.markdup.bam -323 1 h3k27me3_R1.markdup.bam -325 2 h3k27me3_R1.markdup.bam -326 1 h3k27me3_R1.markdup.bam -327 1 h3k27me3_R1.markdup.bam -329 2 h3k27me3_R1.markdup.bam -330 1 h3k27me3_R1.markdup.bam -331 1 h3k27me3_R1.markdup.bam -332 2 h3k27me3_R1.markdup.bam -333 1 h3k27me3_R1.markdup.bam -334 3 h3k27me3_R1.markdup.bam -335 1 h3k27me3_R1.markdup.bam -336 2 h3k27me3_R1.markdup.bam -337 2 h3k27me3_R1.markdup.bam -338 1 h3k27me3_R1.markdup.bam -340 1 h3k27me3_R1.markdup.bam -341 3 h3k27me3_R1.markdup.bam -342 1 h3k27me3_R1.markdup.bam -343 1 h3k27me3_R1.markdup.bam -344 2 h3k27me3_R1.markdup.bam -345 2 h3k27me3_R1.markdup.bam -346 1 h3k27me3_R1.markdup.bam -347 1 h3k27me3_R1.markdup.bam -348 7 h3k27me3_R1.markdup.bam -349 3 h3k27me3_R1.markdup.bam -350 2 h3k27me3_R1.markdup.bam -351 2 h3k27me3_R1.markdup.bam -352 1 h3k27me3_R1.markdup.bam -353 2 h3k27me3_R1.markdup.bam -354 4 h3k27me3_R1.markdup.bam -355 3 h3k27me3_R1.markdup.bam -356 2 h3k27me3_R1.markdup.bam -357 3 h3k27me3_R1.markdup.bam -358 2 h3k27me3_R1.markdup.bam -359 1 h3k27me3_R1.markdup.bam -360 3 h3k27me3_R1.markdup.bam -362 6 h3k27me3_R1.markdup.bam -364 3 h3k27me3_R1.markdup.bam -365 4 h3k27me3_R1.markdup.bam -367 4 h3k27me3_R1.markdup.bam -368 3 h3k27me3_R1.markdup.bam -369 1 h3k27me3_R1.markdup.bam -370 1 h3k27me3_R1.markdup.bam -371 3 h3k27me3_R1.markdup.bam -372 2 h3k27me3_R1.markdup.bam -373 1 h3k27me3_R1.markdup.bam -374 4 h3k27me3_R1.markdup.bam -375 4 h3k27me3_R1.markdup.bam -377 2 h3k27me3_R1.markdup.bam -378 3 h3k27me3_R1.markdup.bam -379 2 h3k27me3_R1.markdup.bam -380 4 h3k27me3_R1.markdup.bam -381 3 h3k27me3_R1.markdup.bam -382 3 h3k27me3_R1.markdup.bam -383 2 h3k27me3_R1.markdup.bam -384 5 h3k27me3_R1.markdup.bam -385 5 h3k27me3_R1.markdup.bam -386 1 h3k27me3_R1.markdup.bam -387 4 h3k27me3_R1.markdup.bam -388 4 h3k27me3_R1.markdup.bam -389 5 h3k27me3_R1.markdup.bam -390 7 h3k27me3_R1.markdup.bam -391 3 h3k27me3_R1.markdup.bam -392 5 h3k27me3_R1.markdup.bam -393 5 h3k27me3_R1.markdup.bam -394 2 h3k27me3_R1.markdup.bam -395 4 h3k27me3_R1.markdup.bam -396 5 h3k27me3_R1.markdup.bam -397 2 h3k27me3_R1.markdup.bam -398 2 h3k27me3_R1.markdup.bam -399 3 h3k27me3_R1.markdup.bam -400 4 h3k27me3_R1.markdup.bam -401 5 h3k27me3_R1.markdup.bam -402 2 h3k27me3_R1.markdup.bam -403 4 h3k27me3_R1.markdup.bam -404 5 h3k27me3_R1.markdup.bam -405 1 h3k27me3_R1.markdup.bam -406 3 h3k27me3_R1.markdup.bam -407 3 h3k27me3_R1.markdup.bam -408 1 h3k27me3_R1.markdup.bam -409 2 h3k27me3_R1.markdup.bam -410 3 h3k27me3_R1.markdup.bam -411 1 h3k27me3_R1.markdup.bam -412 2 h3k27me3_R1.markdup.bam -413 7 h3k27me3_R1.markdup.bam -414 2 h3k27me3_R1.markdup.bam -415 1 h3k27me3_R1.markdup.bam -416 1 h3k27me3_R1.markdup.bam -417 2 h3k27me3_R1.markdup.bam -418 4 h3k27me3_R1.markdup.bam -419 3 h3k27me3_R1.markdup.bam -420 5 h3k27me3_R1.markdup.bam -421 3 h3k27me3_R1.markdup.bam -422 2 h3k27me3_R1.markdup.bam -423 2 h3k27me3_R1.markdup.bam -424 1 h3k27me3_R1.markdup.bam -425 4 h3k27me3_R1.markdup.bam -426 1 h3k27me3_R1.markdup.bam -427 2 h3k27me3_R1.markdup.bam -428 4 h3k27me3_R1.markdup.bam -430 1 h3k27me3_R1.markdup.bam -431 1 h3k27me3_R1.markdup.bam -432 1 h3k27me3_R1.markdup.bam -433 1 h3k27me3_R1.markdup.bam -434 2 h3k27me3_R1.markdup.bam -435 4 h3k27me3_R1.markdup.bam -436 1 h3k27me3_R1.markdup.bam -437 3 h3k27me3_R1.markdup.bam -438 1 h3k27me3_R1.markdup.bam -439 3 h3k27me3_R1.markdup.bam -440 3 h3k27me3_R1.markdup.bam -442 1 h3k27me3_R1.markdup.bam -443 1 h3k27me3_R1.markdup.bam -444 1 h3k27me3_R1.markdup.bam -445 2 h3k27me3_R1.markdup.bam -446 2 h3k27me3_R1.markdup.bam -448 1 h3k27me3_R1.markdup.bam -450 1 h3k27me3_R1.markdup.bam -458 1 h3k27me3_R1.markdup.bam -459 1 h3k27me3_R1.markdup.bam -460 3 h3k27me3_R1.markdup.bam -461 2 h3k27me3_R1.markdup.bam -462 2 h3k27me3_R1.markdup.bam -464 1 h3k27me3_R1.markdup.bam -465 1 h3k27me3_R1.markdup.bam -466 1 h3k27me3_R1.markdup.bam -467 1 h3k27me3_R1.markdup.bam -468 1 h3k27me3_R1.markdup.bam -473 1 h3k27me3_R1.markdup.bam -475 1 h3k27me3_R1.markdup.bam -476 1 h3k27me3_R1.markdup.bam -477 1 h3k27me3_R1.markdup.bam -479 1 h3k27me3_R1.markdup.bam -480 1 h3k27me3_R1.markdup.bam -485 1 h3k27me3_R1.markdup.bam -487 1 h3k27me3_R1.markdup.bam -488 1 h3k27me3_R1.markdup.bam -491 1 h3k27me3_R1.markdup.bam -492 1 h3k27me3_R1.markdup.bam -495 1 h3k27me3_R1.markdup.bam -497 1 h3k27me3_R1.markdup.bam -499 1 h3k27me3_R1.markdup.bam -500 1 h3k27me3_R1.markdup.bam -501 2 h3k27me3_R1.markdup.bam -502 2 h3k27me3_R1.markdup.bam -503 3 h3k27me3_R1.markdup.bam -504 2 h3k27me3_R1.markdup.bam -506 1 h3k27me3_R1.markdup.bam -508 2 h3k27me3_R1.markdup.bam -513 1 h3k27me3_R1.markdup.bam -516 1 h3k27me3_R1.markdup.bam -517 1 h3k27me3_R1.markdup.bam -519 1 h3k27me3_R1.markdup.bam -525 1 h3k27me3_R1.markdup.bam -527 1 h3k27me3_R1.markdup.bam -528 1 h3k27me3_R1.markdup.bam -529 2 h3k27me3_R1.markdup.bam -532 1 h3k27me3_R1.markdup.bam -533 2 h3k27me3_R1.markdup.bam -534 2 h3k27me3_R1.markdup.bam -535 1 h3k27me3_R1.markdup.bam -536 1 h3k27me3_R1.markdup.bam -537 2 h3k27me3_R1.markdup.bam -538 1 h3k27me3_R1.markdup.bam -539 1 h3k27me3_R1.markdup.bam -541 2 h3k27me3_R1.markdup.bam -544 1 h3k27me3_R1.markdup.bam -545 1 h3k27me3_R1.markdup.bam -548 2 h3k27me3_R1.markdup.bam -550 1 h3k27me3_R1.markdup.bam -551 1 h3k27me3_R1.markdup.bam -552 1 h3k27me3_R1.markdup.bam -555 1 h3k27me3_R1.markdup.bam -557 1 h3k27me3_R1.markdup.bam -560 2 h3k27me3_R1.markdup.bam -561 1 h3k27me3_R1.markdup.bam -562 2 h3k27me3_R1.markdup.bam -563 1 h3k27me3_R1.markdup.bam -565 2 h3k27me3_R1.markdup.bam -566 1 h3k27me3_R1.markdup.bam -570 3 h3k27me3_R1.markdup.bam -571 2 h3k27me3_R1.markdup.bam -572 1 h3k27me3_R1.markdup.bam -573 2 h3k27me3_R1.markdup.bam -577 1 h3k27me3_R1.markdup.bam -579 2 h3k27me3_R1.markdup.bam -580 1 h3k27me3_R1.markdup.bam -581 1 h3k27me3_R1.markdup.bam -582 1 h3k27me3_R1.markdup.bam -584 1 h3k27me3_R1.markdup.bam -585 1 h3k27me3_R1.markdup.bam -588 1 h3k27me3_R1.markdup.bam -589 1 h3k27me3_R1.markdup.bam -590 4 h3k27me3_R1.markdup.bam -593 1 h3k27me3_R1.markdup.bam -594 2 h3k27me3_R1.markdup.bam -595 1 h3k27me3_R1.markdup.bam -596 3 h3k27me3_R1.markdup.bam -597 2 h3k27me3_R1.markdup.bam -598 2 h3k27me3_R1.markdup.bam -599 1 h3k27me3_R1.markdup.bam -601 4 h3k27me3_R1.markdup.bam -605 1 h3k27me3_R1.markdup.bam -606 2 h3k27me3_R1.markdup.bam -608 2 h3k27me3_R1.markdup.bam -610 1 h3k27me3_R1.markdup.bam -615 1 h3k27me3_R1.markdup.bam -618 2 h3k27me3_R1.markdup.bam -622 2 h3k27me3_R1.markdup.bam -625 2 h3k27me3_R1.markdup.bam -626 1 h3k27me3_R1.markdup.bam -628 1 h3k27me3_R1.markdup.bam -629 1 h3k27me3_R1.markdup.bam -630 1 h3k27me3_R1.markdup.bam -631 1 h3k27me3_R1.markdup.bam -636 1 h3k27me3_R1.markdup.bam -637 1 h3k27me3_R1.markdup.bam -639 1 h3k27me3_R1.markdup.bam -641 1 h3k27me3_R1.markdup.bam -645 1 h3k27me3_R1.markdup.bam -647 1 h3k27me3_R1.markdup.bam -649 1 h3k27me3_R1.markdup.bam -651 2 h3k27me3_R1.markdup.bam -653 1 h3k27me3_R1.markdup.bam -658 1 h3k27me3_R1.markdup.bam -660 1 h3k27me3_R1.markdup.bam -662 1 h3k27me3_R1.markdup.bam -665 1 h3k27me3_R1.markdup.bam -668 3 h3k27me3_R1.markdup.bam -670 1 h3k27me3_R1.markdup.bam -671 1 h3k27me3_R1.markdup.bam -675 1 h3k27me3_R1.markdup.bam -677 2 h3k27me3_R1.markdup.bam -679 2 h3k27me3_R1.markdup.bam -681 1 h3k27me3_R1.markdup.bam -682 1 h3k27me3_R1.markdup.bam -684 1 h3k27me3_R1.markdup.bam -688 2 h3k27me3_R1.markdup.bam -689 1 h3k27me3_R1.markdup.bam -692 1 h3k27me3_R1.markdup.bam -700 2 h3k27me3_R1.markdup.bam diff --git a/dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv b/dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv deleted file mode 100644 index 783311cb..00000000 --- a/dev/docker/static_reports/test_data/h3k27me3_R2_raw.csv +++ /dev/null @@ -1,454 +0,0 @@ -#bamPEFragmentSize -Size Occurrences Sample -27 2 h3k27me3_R2.markdup.bam -28 3 h3k27me3_R2.markdup.bam -34 1 h3k27me3_R2.markdup.bam -38 2 h3k27me3_R2.markdup.bam -39 2 h3k27me3_R2.markdup.bam -40 2 h3k27me3_R2.markdup.bam -41 5 h3k27me3_R2.markdup.bam -42 2 h3k27me3_R2.markdup.bam -43 3 h3k27me3_R2.markdup.bam -44 2 h3k27me3_R2.markdup.bam -45 8 h3k27me3_R2.markdup.bam -46 5 h3k27me3_R2.markdup.bam -47 3 h3k27me3_R2.markdup.bam -48 6 h3k27me3_R2.markdup.bam -49 2 h3k27me3_R2.markdup.bam -50 7 h3k27me3_R2.markdup.bam -51 5 h3k27me3_R2.markdup.bam -52 6 h3k27me3_R2.markdup.bam -53 2 h3k27me3_R2.markdup.bam -54 5 h3k27me3_R2.markdup.bam -55 6 h3k27me3_R2.markdup.bam -56 1 h3k27me3_R2.markdup.bam -57 3 h3k27me3_R2.markdup.bam -58 3 h3k27me3_R2.markdup.bam -59 1 h3k27me3_R2.markdup.bam -60 3 h3k27me3_R2.markdup.bam -61 1 h3k27me3_R2.markdup.bam -62 5 h3k27me3_R2.markdup.bam -63 9 h3k27me3_R2.markdup.bam -64 5 h3k27me3_R2.markdup.bam -65 4 h3k27me3_R2.markdup.bam -66 3 h3k27me3_R2.markdup.bam -69 4 h3k27me3_R2.markdup.bam -70 3 h3k27me3_R2.markdup.bam -71 3 h3k27me3_R2.markdup.bam -72 2 h3k27me3_R2.markdup.bam -73 4 h3k27me3_R2.markdup.bam -74 3 h3k27me3_R2.markdup.bam -75 4 h3k27me3_R2.markdup.bam -76 4 h3k27me3_R2.markdup.bam -77 3 h3k27me3_R2.markdup.bam -78 5 h3k27me3_R2.markdup.bam -80 3 h3k27me3_R2.markdup.bam -81 1 h3k27me3_R2.markdup.bam -82 2 h3k27me3_R2.markdup.bam -83 3 h3k27me3_R2.markdup.bam -84 5 h3k27me3_R2.markdup.bam -85 2 h3k27me3_R2.markdup.bam -86 4 h3k27me3_R2.markdup.bam -87 3 h3k27me3_R2.markdup.bam -88 1 h3k27me3_R2.markdup.bam -89 2 h3k27me3_R2.markdup.bam -90 1 h3k27me3_R2.markdup.bam -91 4 h3k27me3_R2.markdup.bam -93 2 h3k27me3_R2.markdup.bam -94 2 h3k27me3_R2.markdup.bam -96 2 h3k27me3_R2.markdup.bam -97 2 h3k27me3_R2.markdup.bam -98 1 h3k27me3_R2.markdup.bam -99 1 h3k27me3_R2.markdup.bam -100 3 h3k27me3_R2.markdup.bam -101 2 h3k27me3_R2.markdup.bam -102 2 h3k27me3_R2.markdup.bam -103 2 h3k27me3_R2.markdup.bam -104 2 h3k27me3_R2.markdup.bam -107 2 h3k27me3_R2.markdup.bam -110 1 h3k27me3_R2.markdup.bam -111 1 h3k27me3_R2.markdup.bam -112 1 h3k27me3_R2.markdup.bam -113 1 h3k27me3_R2.markdup.bam -114 2 h3k27me3_R2.markdup.bam -115 1 h3k27me3_R2.markdup.bam -116 1 h3k27me3_R2.markdup.bam -119 2 h3k27me3_R2.markdup.bam -120 1 h3k27me3_R2.markdup.bam -122 1 h3k27me3_R2.markdup.bam -123 1 h3k27me3_R2.markdup.bam -124 2 h3k27me3_R2.markdup.bam -125 1 h3k27me3_R2.markdup.bam -126 2 h3k27me3_R2.markdup.bam -127 2 h3k27me3_R2.markdup.bam -128 1 h3k27me3_R2.markdup.bam -130 1 h3k27me3_R2.markdup.bam -131 3 h3k27me3_R2.markdup.bam -133 2 h3k27me3_R2.markdup.bam -134 2 h3k27me3_R2.markdup.bam -135 3 h3k27me3_R2.markdup.bam -138 1 h3k27me3_R2.markdup.bam -139 2 h3k27me3_R2.markdup.bam -140 2 h3k27me3_R2.markdup.bam -141 1 h3k27me3_R2.markdup.bam -142 4 h3k27me3_R2.markdup.bam -143 1 h3k27me3_R2.markdup.bam -144 2 h3k27me3_R2.markdup.bam -145 2 h3k27me3_R2.markdup.bam -146 3 h3k27me3_R2.markdup.bam -147 1 h3k27me3_R2.markdup.bam -148 2 h3k27me3_R2.markdup.bam -149 3 h3k27me3_R2.markdup.bam -150 4 h3k27me3_R2.markdup.bam -151 3 h3k27me3_R2.markdup.bam -152 1 h3k27me3_R2.markdup.bam -153 3 h3k27me3_R2.markdup.bam -154 3 h3k27me3_R2.markdup.bam -155 3 h3k27me3_R2.markdup.bam -156 4 h3k27me3_R2.markdup.bam -157 2 h3k27me3_R2.markdup.bam -158 2 h3k27me3_R2.markdup.bam -159 3 h3k27me3_R2.markdup.bam -160 6 h3k27me3_R2.markdup.bam -161 7 h3k27me3_R2.markdup.bam -162 9 h3k27me3_R2.markdup.bam -163 3 h3k27me3_R2.markdup.bam -164 10 h3k27me3_R2.markdup.bam -165 3 h3k27me3_R2.markdup.bam -166 5 h3k27me3_R2.markdup.bam -167 8 h3k27me3_R2.markdup.bam -168 6 h3k27me3_R2.markdup.bam -169 5 h3k27me3_R2.markdup.bam -170 6 h3k27me3_R2.markdup.bam -171 3 h3k27me3_R2.markdup.bam -172 6 h3k27me3_R2.markdup.bam -173 2 h3k27me3_R2.markdup.bam -174 10 h3k27me3_R2.markdup.bam -175 8 h3k27me3_R2.markdup.bam -176 8 h3k27me3_R2.markdup.bam -177 10 h3k27me3_R2.markdup.bam -178 6 h3k27me3_R2.markdup.bam -179 8 h3k27me3_R2.markdup.bam -180 2 h3k27me3_R2.markdup.bam -181 7 h3k27me3_R2.markdup.bam -182 3 h3k27me3_R2.markdup.bam -183 7 h3k27me3_R2.markdup.bam -184 11 h3k27me3_R2.markdup.bam -185 14 h3k27me3_R2.markdup.bam -186 12 h3k27me3_R2.markdup.bam -187 10 h3k27me3_R2.markdup.bam -188 10 h3k27me3_R2.markdup.bam -189 8 h3k27me3_R2.markdup.bam -190 13 h3k27me3_R2.markdup.bam -191 9 h3k27me3_R2.markdup.bam -192 10 h3k27me3_R2.markdup.bam -193 9 h3k27me3_R2.markdup.bam -194 9 h3k27me3_R2.markdup.bam -195 12 h3k27me3_R2.markdup.bam -196 13 h3k27me3_R2.markdup.bam -197 11 h3k27me3_R2.markdup.bam -198 7 h3k27me3_R2.markdup.bam -199 10 h3k27me3_R2.markdup.bam -200 7 h3k27me3_R2.markdup.bam -201 11 h3k27me3_R2.markdup.bam -202 14 h3k27me3_R2.markdup.bam -203 11 h3k27me3_R2.markdup.bam -204 7 h3k27me3_R2.markdup.bam -205 8 h3k27me3_R2.markdup.bam -206 11 h3k27me3_R2.markdup.bam -207 12 h3k27me3_R2.markdup.bam -208 13 h3k27me3_R2.markdup.bam -209 4 h3k27me3_R2.markdup.bam -210 6 h3k27me3_R2.markdup.bam -211 11 h3k27me3_R2.markdup.bam -212 14 h3k27me3_R2.markdup.bam -213 10 h3k27me3_R2.markdup.bam -214 7 h3k27me3_R2.markdup.bam -215 3 h3k27me3_R2.markdup.bam -216 9 h3k27me3_R2.markdup.bam -217 11 h3k27me3_R2.markdup.bam -218 6 h3k27me3_R2.markdup.bam -219 8 h3k27me3_R2.markdup.bam -220 6 h3k27me3_R2.markdup.bam -221 7 h3k27me3_R2.markdup.bam -222 6 h3k27me3_R2.markdup.bam -223 5 h3k27me3_R2.markdup.bam -224 6 h3k27me3_R2.markdup.bam -225 6 h3k27me3_R2.markdup.bam -226 7 h3k27me3_R2.markdup.bam -227 8 h3k27me3_R2.markdup.bam -228 8 h3k27me3_R2.markdup.bam -229 9 h3k27me3_R2.markdup.bam -230 8 h3k27me3_R2.markdup.bam -231 5 h3k27me3_R2.markdup.bam -232 8 h3k27me3_R2.markdup.bam -233 5 h3k27me3_R2.markdup.bam -234 9 h3k27me3_R2.markdup.bam -235 9 h3k27me3_R2.markdup.bam -236 8 h3k27me3_R2.markdup.bam -237 10 h3k27me3_R2.markdup.bam -238 5 h3k27me3_R2.markdup.bam -239 4 h3k27me3_R2.markdup.bam -240 6 h3k27me3_R2.markdup.bam -241 7 h3k27me3_R2.markdup.bam -242 7 h3k27me3_R2.markdup.bam -243 6 h3k27me3_R2.markdup.bam -244 7 h3k27me3_R2.markdup.bam -245 4 h3k27me3_R2.markdup.bam -246 5 h3k27me3_R2.markdup.bam -247 4 h3k27me3_R2.markdup.bam -248 2 h3k27me3_R2.markdup.bam -249 4 h3k27me3_R2.markdup.bam -250 3 h3k27me3_R2.markdup.bam -251 7 h3k27me3_R2.markdup.bam -253 4 h3k27me3_R2.markdup.bam -254 3 h3k27me3_R2.markdup.bam -257 2 h3k27me3_R2.markdup.bam -258 2 h3k27me3_R2.markdup.bam -259 2 h3k27me3_R2.markdup.bam -260 3 h3k27me3_R2.markdup.bam -261 1 h3k27me3_R2.markdup.bam -262 2 h3k27me3_R2.markdup.bam -263 1 h3k27me3_R2.markdup.bam -264 1 h3k27me3_R2.markdup.bam -265 2 h3k27me3_R2.markdup.bam -266 2 h3k27me3_R2.markdup.bam -267 2 h3k27me3_R2.markdup.bam -268 4 h3k27me3_R2.markdup.bam -269 1 h3k27me3_R2.markdup.bam -271 2 h3k27me3_R2.markdup.bam -272 2 h3k27me3_R2.markdup.bam -273 1 h3k27me3_R2.markdup.bam -274 1 h3k27me3_R2.markdup.bam -275 1 h3k27me3_R2.markdup.bam -276 1 h3k27me3_R2.markdup.bam -277 1 h3k27me3_R2.markdup.bam -278 1 h3k27me3_R2.markdup.bam -279 4 h3k27me3_R2.markdup.bam -280 1 h3k27me3_R2.markdup.bam -281 1 h3k27me3_R2.markdup.bam -283 1 h3k27me3_R2.markdup.bam -284 2 h3k27me3_R2.markdup.bam -286 3 h3k27me3_R2.markdup.bam -287 2 h3k27me3_R2.markdup.bam -288 1 h3k27me3_R2.markdup.bam -289 1 h3k27me3_R2.markdup.bam -292 1 h3k27me3_R2.markdup.bam -293 2 h3k27me3_R2.markdup.bam -294 2 h3k27me3_R2.markdup.bam -295 1 h3k27me3_R2.markdup.bam -296 1 h3k27me3_R2.markdup.bam -297 3 h3k27me3_R2.markdup.bam -300 2 h3k27me3_R2.markdup.bam -303 3 h3k27me3_R2.markdup.bam -304 1 h3k27me3_R2.markdup.bam -305 2 h3k27me3_R2.markdup.bam -306 3 h3k27me3_R2.markdup.bam -309 2 h3k27me3_R2.markdup.bam -311 2 h3k27me3_R2.markdup.bam -312 1 h3k27me3_R2.markdup.bam -313 1 h3k27me3_R2.markdup.bam -314 2 h3k27me3_R2.markdup.bam -319 1 h3k27me3_R2.markdup.bam -320 2 h3k27me3_R2.markdup.bam -321 1 h3k27me3_R2.markdup.bam -323 1 h3k27me3_R2.markdup.bam -326 2 h3k27me3_R2.markdup.bam -327 1 h3k27me3_R2.markdup.bam -328 1 h3k27me3_R2.markdup.bam -331 2 h3k27me3_R2.markdup.bam -333 1 h3k27me3_R2.markdup.bam -334 1 h3k27me3_R2.markdup.bam -337 3 h3k27me3_R2.markdup.bam -338 1 h3k27me3_R2.markdup.bam -339 1 h3k27me3_R2.markdup.bam -341 3 h3k27me3_R2.markdup.bam -342 2 h3k27me3_R2.markdup.bam -343 4 h3k27me3_R2.markdup.bam -344 2 h3k27me3_R2.markdup.bam -348 1 h3k27me3_R2.markdup.bam -349 1 h3k27me3_R2.markdup.bam -350 1 h3k27me3_R2.markdup.bam -351 1 h3k27me3_R2.markdup.bam -352 1 h3k27me3_R2.markdup.bam -353 4 h3k27me3_R2.markdup.bam -354 1 h3k27me3_R2.markdup.bam -356 3 h3k27me3_R2.markdup.bam -357 3 h3k27me3_R2.markdup.bam -358 2 h3k27me3_R2.markdup.bam -360 1 h3k27me3_R2.markdup.bam -361 3 h3k27me3_R2.markdup.bam -363 1 h3k27me3_R2.markdup.bam -364 2 h3k27me3_R2.markdup.bam -365 3 h3k27me3_R2.markdup.bam -366 1 h3k27me3_R2.markdup.bam -367 3 h3k27me3_R2.markdup.bam -368 1 h3k27me3_R2.markdup.bam -370 1 h3k27me3_R2.markdup.bam -371 4 h3k27me3_R2.markdup.bam -372 3 h3k27me3_R2.markdup.bam -373 2 h3k27me3_R2.markdup.bam -374 2 h3k27me3_R2.markdup.bam -375 2 h3k27me3_R2.markdup.bam -376 2 h3k27me3_R2.markdup.bam -377 2 h3k27me3_R2.markdup.bam -378 5 h3k27me3_R2.markdup.bam -379 4 h3k27me3_R2.markdup.bam -380 2 h3k27me3_R2.markdup.bam -382 1 h3k27me3_R2.markdup.bam -383 1 h3k27me3_R2.markdup.bam -384 1 h3k27me3_R2.markdup.bam -385 3 h3k27me3_R2.markdup.bam -386 6 h3k27me3_R2.markdup.bam -387 1 h3k27me3_R2.markdup.bam -388 3 h3k27me3_R2.markdup.bam -389 2 h3k27me3_R2.markdup.bam -390 6 h3k27me3_R2.markdup.bam -391 5 h3k27me3_R2.markdup.bam -393 3 h3k27me3_R2.markdup.bam -394 4 h3k27me3_R2.markdup.bam -395 7 h3k27me3_R2.markdup.bam -396 2 h3k27me3_R2.markdup.bam -397 2 h3k27me3_R2.markdup.bam -398 2 h3k27me3_R2.markdup.bam -399 3 h3k27me3_R2.markdup.bam -403 3 h3k27me3_R2.markdup.bam -404 1 h3k27me3_R2.markdup.bam -405 2 h3k27me3_R2.markdup.bam -406 1 h3k27me3_R2.markdup.bam -408 1 h3k27me3_R2.markdup.bam -409 3 h3k27me3_R2.markdup.bam -411 2 h3k27me3_R2.markdup.bam -412 2 h3k27me3_R2.markdup.bam -413 1 h3k27me3_R2.markdup.bam -414 3 h3k27me3_R2.markdup.bam -415 1 h3k27me3_R2.markdup.bam -416 1 h3k27me3_R2.markdup.bam -418 1 h3k27me3_R2.markdup.bam -419 1 h3k27me3_R2.markdup.bam -420 3 h3k27me3_R2.markdup.bam -421 2 h3k27me3_R2.markdup.bam -422 1 h3k27me3_R2.markdup.bam -423 2 h3k27me3_R2.markdup.bam -424 2 h3k27me3_R2.markdup.bam -425 2 h3k27me3_R2.markdup.bam -427 1 h3k27me3_R2.markdup.bam -428 2 h3k27me3_R2.markdup.bam -429 1 h3k27me3_R2.markdup.bam -430 1 h3k27me3_R2.markdup.bam -431 1 h3k27me3_R2.markdup.bam -433 2 h3k27me3_R2.markdup.bam -434 1 h3k27me3_R2.markdup.bam -435 1 h3k27me3_R2.markdup.bam -436 2 h3k27me3_R2.markdup.bam -438 2 h3k27me3_R2.markdup.bam -439 2 h3k27me3_R2.markdup.bam -440 2 h3k27me3_R2.markdup.bam -441 1 h3k27me3_R2.markdup.bam -442 3 h3k27me3_R2.markdup.bam -443 1 h3k27me3_R2.markdup.bam -444 1 h3k27me3_R2.markdup.bam -447 1 h3k27me3_R2.markdup.bam -448 1 h3k27me3_R2.markdup.bam -449 1 h3k27me3_R2.markdup.bam -450 1 h3k27me3_R2.markdup.bam -451 2 h3k27me3_R2.markdup.bam -453 2 h3k27me3_R2.markdup.bam -454 1 h3k27me3_R2.markdup.bam -456 1 h3k27me3_R2.markdup.bam -457 1 h3k27me3_R2.markdup.bam -459 2 h3k27me3_R2.markdup.bam -460 1 h3k27me3_R2.markdup.bam -461 1 h3k27me3_R2.markdup.bam -462 1 h3k27me3_R2.markdup.bam -466 3 h3k27me3_R2.markdup.bam -469 1 h3k27me3_R2.markdup.bam -471 1 h3k27me3_R2.markdup.bam -473 1 h3k27me3_R2.markdup.bam -481 1 h3k27me3_R2.markdup.bam -483 1 h3k27me3_R2.markdup.bam -485 1 h3k27me3_R2.markdup.bam -486 2 h3k27me3_R2.markdup.bam -493 1 h3k27me3_R2.markdup.bam -501 1 h3k27me3_R2.markdup.bam -507 4 h3k27me3_R2.markdup.bam -510 1 h3k27me3_R2.markdup.bam -513 2 h3k27me3_R2.markdup.bam -519 1 h3k27me3_R2.markdup.bam -524 1 h3k27me3_R2.markdup.bam -525 3 h3k27me3_R2.markdup.bam -526 1 h3k27me3_R2.markdup.bam -534 1 h3k27me3_R2.markdup.bam -535 1 h3k27me3_R2.markdup.bam -537 2 h3k27me3_R2.markdup.bam -538 1 h3k27me3_R2.markdup.bam -541 1 h3k27me3_R2.markdup.bam -542 1 h3k27me3_R2.markdup.bam -543 1 h3k27me3_R2.markdup.bam -544 1 h3k27me3_R2.markdup.bam -548 1 h3k27me3_R2.markdup.bam -549 1 h3k27me3_R2.markdup.bam -550 1 h3k27me3_R2.markdup.bam -552 1 h3k27me3_R2.markdup.bam -553 2 h3k27me3_R2.markdup.bam -554 1 h3k27me3_R2.markdup.bam -557 1 h3k27me3_R2.markdup.bam -558 1 h3k27me3_R2.markdup.bam -561 2 h3k27me3_R2.markdup.bam -562 1 h3k27me3_R2.markdup.bam -563 1 h3k27me3_R2.markdup.bam -565 1 h3k27me3_R2.markdup.bam -566 1 h3k27me3_R2.markdup.bam -567 1 h3k27me3_R2.markdup.bam -568 1 h3k27me3_R2.markdup.bam -569 1 h3k27me3_R2.markdup.bam -575 1 h3k27me3_R2.markdup.bam -576 2 h3k27me3_R2.markdup.bam -578 2 h3k27me3_R2.markdup.bam -581 1 h3k27me3_R2.markdup.bam -584 1 h3k27me3_R2.markdup.bam -587 1 h3k27me3_R2.markdup.bam -589 1 h3k27me3_R2.markdup.bam -590 1 h3k27me3_R2.markdup.bam -591 1 h3k27me3_R2.markdup.bam -592 1 h3k27me3_R2.markdup.bam -595 2 h3k27me3_R2.markdup.bam -596 4 h3k27me3_R2.markdup.bam -597 2 h3k27me3_R2.markdup.bam -598 2 h3k27me3_R2.markdup.bam -599 1 h3k27me3_R2.markdup.bam -600 1 h3k27me3_R2.markdup.bam -601 1 h3k27me3_R2.markdup.bam -602 2 h3k27me3_R2.markdup.bam -603 2 h3k27me3_R2.markdup.bam -605 1 h3k27me3_R2.markdup.bam -606 1 h3k27me3_R2.markdup.bam -609 1 h3k27me3_R2.markdup.bam -619 2 h3k27me3_R2.markdup.bam -621 1 h3k27me3_R2.markdup.bam -624 1 h3k27me3_R2.markdup.bam -625 2 h3k27me3_R2.markdup.bam -626 1 h3k27me3_R2.markdup.bam -631 2 h3k27me3_R2.markdup.bam -633 1 h3k27me3_R2.markdup.bam -635 1 h3k27me3_R2.markdup.bam -638 2 h3k27me3_R2.markdup.bam -643 2 h3k27me3_R2.markdup.bam -645 1 h3k27me3_R2.markdup.bam -646 1 h3k27me3_R2.markdup.bam -647 1 h3k27me3_R2.markdup.bam -649 1 h3k27me3_R2.markdup.bam -655 2 h3k27me3_R2.markdup.bam -661 2 h3k27me3_R2.markdup.bam -662 2 h3k27me3_R2.markdup.bam -664 1 h3k27me3_R2.markdup.bam -668 1 h3k27me3_R2.markdup.bam -669 1 h3k27me3_R2.markdup.bam -670 1 h3k27me3_R2.markdup.bam -673 1 h3k27me3_R2.markdup.bam -676 1 h3k27me3_R2.markdup.bam -683 1 h3k27me3_R2.markdup.bam -684 1 h3k27me3_R2.markdup.bam -685 4 h3k27me3_R2.markdup.bam -695 2 h3k27me3_R2.markdup.bam -696 1 h3k27me3_R2.markdup.bam diff --git a/dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv b/dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv deleted file mode 100644 index c0c5d155..00000000 --- a/dev/docker/static_reports/test_data/h3k4me3_R1_raw.csv +++ /dev/null @@ -1,454 +0,0 @@ -#bamPEFragmentSize -Size Occurrences Sample -28 1 h3k4me3_R1.markdup.bam -38 1 h3k4me3_R1.markdup.bam -40 1 h3k4me3_R1.markdup.bam -41 2 h3k4me3_R1.markdup.bam -42 3 h3k4me3_R1.markdup.bam -43 5 h3k4me3_R1.markdup.bam -44 3 h3k4me3_R1.markdup.bam -45 3 h3k4me3_R1.markdup.bam -46 2 h3k4me3_R1.markdup.bam -47 5 h3k4me3_R1.markdup.bam -49 1 h3k4me3_R1.markdup.bam -50 1 h3k4me3_R1.markdup.bam -51 5 h3k4me3_R1.markdup.bam -52 2 h3k4me3_R1.markdup.bam -53 7 h3k4me3_R1.markdup.bam -54 5 h3k4me3_R1.markdup.bam -55 3 h3k4me3_R1.markdup.bam -56 4 h3k4me3_R1.markdup.bam -57 3 h3k4me3_R1.markdup.bam -58 2 h3k4me3_R1.markdup.bam -59 3 h3k4me3_R1.markdup.bam -60 2 h3k4me3_R1.markdup.bam -61 2 h3k4me3_R1.markdup.bam -62 5 h3k4me3_R1.markdup.bam -63 3 h3k4me3_R1.markdup.bam -64 6 h3k4me3_R1.markdup.bam -65 2 h3k4me3_R1.markdup.bam -66 3 h3k4me3_R1.markdup.bam -67 1 h3k4me3_R1.markdup.bam -68 2 h3k4me3_R1.markdup.bam -69 2 h3k4me3_R1.markdup.bam -70 2 h3k4me3_R1.markdup.bam -71 3 h3k4me3_R1.markdup.bam -72 2 h3k4me3_R1.markdup.bam -73 1 h3k4me3_R1.markdup.bam -74 3 h3k4me3_R1.markdup.bam -75 3 h3k4me3_R1.markdup.bam -76 4 h3k4me3_R1.markdup.bam -77 2 h3k4me3_R1.markdup.bam -78 4 h3k4me3_R1.markdup.bam -81 2 h3k4me3_R1.markdup.bam -82 1 h3k4me3_R1.markdup.bam -84 4 h3k4me3_R1.markdup.bam -86 2 h3k4me3_R1.markdup.bam -87 4 h3k4me3_R1.markdup.bam -88 2 h3k4me3_R1.markdup.bam -89 2 h3k4me3_R1.markdup.bam -90 1 h3k4me3_R1.markdup.bam -91 3 h3k4me3_R1.markdup.bam -92 3 h3k4me3_R1.markdup.bam -93 2 h3k4me3_R1.markdup.bam -95 2 h3k4me3_R1.markdup.bam -96 1 h3k4me3_R1.markdup.bam -97 3 h3k4me3_R1.markdup.bam -98 2 h3k4me3_R1.markdup.bam -99 3 h3k4me3_R1.markdup.bam -101 1 h3k4me3_R1.markdup.bam -102 1 h3k4me3_R1.markdup.bam -104 1 h3k4me3_R1.markdup.bam -105 1 h3k4me3_R1.markdup.bam -106 1 h3k4me3_R1.markdup.bam -107 1 h3k4me3_R1.markdup.bam -110 2 h3k4me3_R1.markdup.bam -111 1 h3k4me3_R1.markdup.bam -112 1 h3k4me3_R1.markdup.bam -119 1 h3k4me3_R1.markdup.bam -120 2 h3k4me3_R1.markdup.bam -122 1 h3k4me3_R1.markdup.bam -123 2 h3k4me3_R1.markdup.bam -124 2 h3k4me3_R1.markdup.bam -125 1 h3k4me3_R1.markdup.bam -126 2 h3k4me3_R1.markdup.bam -127 1 h3k4me3_R1.markdup.bam -130 1 h3k4me3_R1.markdup.bam -131 3 h3k4me3_R1.markdup.bam -133 1 h3k4me3_R1.markdup.bam -136 1 h3k4me3_R1.markdup.bam -138 1 h3k4me3_R1.markdup.bam -140 1 h3k4me3_R1.markdup.bam -141 4 h3k4me3_R1.markdup.bam -143 1 h3k4me3_R1.markdup.bam -144 1 h3k4me3_R1.markdup.bam -146 1 h3k4me3_R1.markdup.bam -148 2 h3k4me3_R1.markdup.bam -150 3 h3k4me3_R1.markdup.bam -151 3 h3k4me3_R1.markdup.bam -153 2 h3k4me3_R1.markdup.bam -154 3 h3k4me3_R1.markdup.bam -155 2 h3k4me3_R1.markdup.bam -156 2 h3k4me3_R1.markdup.bam -157 5 h3k4me3_R1.markdup.bam -158 2 h3k4me3_R1.markdup.bam -159 3 h3k4me3_R1.markdup.bam -160 3 h3k4me3_R1.markdup.bam -161 1 h3k4me3_R1.markdup.bam -162 2 h3k4me3_R1.markdup.bam -163 1 h3k4me3_R1.markdup.bam -164 2 h3k4me3_R1.markdup.bam -165 2 h3k4me3_R1.markdup.bam -166 7 h3k4me3_R1.markdup.bam -167 1 h3k4me3_R1.markdup.bam -168 2 h3k4me3_R1.markdup.bam -169 4 h3k4me3_R1.markdup.bam -170 3 h3k4me3_R1.markdup.bam -171 3 h3k4me3_R1.markdup.bam -172 2 h3k4me3_R1.markdup.bam -173 3 h3k4me3_R1.markdup.bam -175 3 h3k4me3_R1.markdup.bam -176 5 h3k4me3_R1.markdup.bam -177 6 h3k4me3_R1.markdup.bam -178 3 h3k4me3_R1.markdup.bam -179 9 h3k4me3_R1.markdup.bam -180 1 h3k4me3_R1.markdup.bam -181 8 h3k4me3_R1.markdup.bam -182 2 h3k4me3_R1.markdup.bam -183 2 h3k4me3_R1.markdup.bam -184 5 h3k4me3_R1.markdup.bam -185 9 h3k4me3_R1.markdup.bam -186 4 h3k4me3_R1.markdup.bam -187 7 h3k4me3_R1.markdup.bam -188 9 h3k4me3_R1.markdup.bam -189 3 h3k4me3_R1.markdup.bam -190 4 h3k4me3_R1.markdup.bam -191 2 h3k4me3_R1.markdup.bam -192 1 h3k4me3_R1.markdup.bam -193 3 h3k4me3_R1.markdup.bam -195 6 h3k4me3_R1.markdup.bam -196 1 h3k4me3_R1.markdup.bam -197 8 h3k4me3_R1.markdup.bam -198 6 h3k4me3_R1.markdup.bam -199 9 h3k4me3_R1.markdup.bam -200 4 h3k4me3_R1.markdup.bam -201 5 h3k4me3_R1.markdup.bam -202 7 h3k4me3_R1.markdup.bam -203 7 h3k4me3_R1.markdup.bam -204 2 h3k4me3_R1.markdup.bam -205 4 h3k4me3_R1.markdup.bam -206 5 h3k4me3_R1.markdup.bam -207 8 h3k4me3_R1.markdup.bam -208 8 h3k4me3_R1.markdup.bam -209 5 h3k4me3_R1.markdup.bam -210 3 h3k4me3_R1.markdup.bam -211 9 h3k4me3_R1.markdup.bam -212 7 h3k4me3_R1.markdup.bam -213 11 h3k4me3_R1.markdup.bam -214 6 h3k4me3_R1.markdup.bam -215 6 h3k4me3_R1.markdup.bam -216 3 h3k4me3_R1.markdup.bam -217 2 h3k4me3_R1.markdup.bam -218 4 h3k4me3_R1.markdup.bam -219 6 h3k4me3_R1.markdup.bam -220 5 h3k4me3_R1.markdup.bam -221 3 h3k4me3_R1.markdup.bam -222 2 h3k4me3_R1.markdup.bam -223 4 h3k4me3_R1.markdup.bam -224 3 h3k4me3_R1.markdup.bam -225 4 h3k4me3_R1.markdup.bam -226 1 h3k4me3_R1.markdup.bam -227 11 h3k4me3_R1.markdup.bam -228 7 h3k4me3_R1.markdup.bam -229 1 h3k4me3_R1.markdup.bam -230 7 h3k4me3_R1.markdup.bam -231 8 h3k4me3_R1.markdup.bam -232 4 h3k4me3_R1.markdup.bam -233 8 h3k4me3_R1.markdup.bam -234 1 h3k4me3_R1.markdup.bam -235 6 h3k4me3_R1.markdup.bam -236 4 h3k4me3_R1.markdup.bam -237 5 h3k4me3_R1.markdup.bam -238 2 h3k4me3_R1.markdup.bam -239 3 h3k4me3_R1.markdup.bam -240 3 h3k4me3_R1.markdup.bam -241 3 h3k4me3_R1.markdup.bam -242 6 h3k4me3_R1.markdup.bam -243 8 h3k4me3_R1.markdup.bam -244 1 h3k4me3_R1.markdup.bam -245 3 h3k4me3_R1.markdup.bam -246 3 h3k4me3_R1.markdup.bam -247 4 h3k4me3_R1.markdup.bam -248 3 h3k4me3_R1.markdup.bam -249 2 h3k4me3_R1.markdup.bam -250 4 h3k4me3_R1.markdup.bam -251 2 h3k4me3_R1.markdup.bam -253 2 h3k4me3_R1.markdup.bam -254 3 h3k4me3_R1.markdup.bam -255 5 h3k4me3_R1.markdup.bam -256 5 h3k4me3_R1.markdup.bam -257 5 h3k4me3_R1.markdup.bam -258 8 h3k4me3_R1.markdup.bam -259 3 h3k4me3_R1.markdup.bam -260 5 h3k4me3_R1.markdup.bam -261 1 h3k4me3_R1.markdup.bam -262 5 h3k4me3_R1.markdup.bam -263 4 h3k4me3_R1.markdup.bam -264 2 h3k4me3_R1.markdup.bam -265 3 h3k4me3_R1.markdup.bam -267 1 h3k4me3_R1.markdup.bam -268 3 h3k4me3_R1.markdup.bam -269 1 h3k4me3_R1.markdup.bam -270 3 h3k4me3_R1.markdup.bam -271 1 h3k4me3_R1.markdup.bam -273 3 h3k4me3_R1.markdup.bam -274 5 h3k4me3_R1.markdup.bam -275 4 h3k4me3_R1.markdup.bam -276 2 h3k4me3_R1.markdup.bam -277 1 h3k4me3_R1.markdup.bam -278 4 h3k4me3_R1.markdup.bam -279 3 h3k4me3_R1.markdup.bam -281 1 h3k4me3_R1.markdup.bam -282 3 h3k4me3_R1.markdup.bam -284 1 h3k4me3_R1.markdup.bam -285 2 h3k4me3_R1.markdup.bam -286 1 h3k4me3_R1.markdup.bam -288 1 h3k4me3_R1.markdup.bam -290 3 h3k4me3_R1.markdup.bam -293 2 h3k4me3_R1.markdup.bam -295 2 h3k4me3_R1.markdup.bam -297 1 h3k4me3_R1.markdup.bam -298 4 h3k4me3_R1.markdup.bam -299 1 h3k4me3_R1.markdup.bam -300 1 h3k4me3_R1.markdup.bam -301 1 h3k4me3_R1.markdup.bam -302 2 h3k4me3_R1.markdup.bam -304 2 h3k4me3_R1.markdup.bam -308 1 h3k4me3_R1.markdup.bam -309 1 h3k4me3_R1.markdup.bam -311 1 h3k4me3_R1.markdup.bam -312 1 h3k4me3_R1.markdup.bam -313 1 h3k4me3_R1.markdup.bam -314 4 h3k4me3_R1.markdup.bam -315 1 h3k4me3_R1.markdup.bam -316 1 h3k4me3_R1.markdup.bam -317 5 h3k4me3_R1.markdup.bam -318 2 h3k4me3_R1.markdup.bam -319 3 h3k4me3_R1.markdup.bam -320 1 h3k4me3_R1.markdup.bam -321 1 h3k4me3_R1.markdup.bam -322 2 h3k4me3_R1.markdup.bam -323 2 h3k4me3_R1.markdup.bam -324 3 h3k4me3_R1.markdup.bam -325 4 h3k4me3_R1.markdup.bam -329 1 h3k4me3_R1.markdup.bam -330 2 h3k4me3_R1.markdup.bam -331 1 h3k4me3_R1.markdup.bam -332 5 h3k4me3_R1.markdup.bam -335 1 h3k4me3_R1.markdup.bam -336 1 h3k4me3_R1.markdup.bam -337 2 h3k4me3_R1.markdup.bam -338 2 h3k4me3_R1.markdup.bam -339 3 h3k4me3_R1.markdup.bam -340 2 h3k4me3_R1.markdup.bam -341 3 h3k4me3_R1.markdup.bam -342 2 h3k4me3_R1.markdup.bam -343 2 h3k4me3_R1.markdup.bam -344 1 h3k4me3_R1.markdup.bam -345 1 h3k4me3_R1.markdup.bam -346 1 h3k4me3_R1.markdup.bam -347 1 h3k4me3_R1.markdup.bam -349 1 h3k4me3_R1.markdup.bam -351 2 h3k4me3_R1.markdup.bam -352 4 h3k4me3_R1.markdup.bam -353 1 h3k4me3_R1.markdup.bam -354 3 h3k4me3_R1.markdup.bam -357 2 h3k4me3_R1.markdup.bam -358 5 h3k4me3_R1.markdup.bam -359 1 h3k4me3_R1.markdup.bam -360 3 h3k4me3_R1.markdup.bam -361 3 h3k4me3_R1.markdup.bam -362 4 h3k4me3_R1.markdup.bam -363 3 h3k4me3_R1.markdup.bam -364 1 h3k4me3_R1.markdup.bam -365 2 h3k4me3_R1.markdup.bam -366 1 h3k4me3_R1.markdup.bam -367 3 h3k4me3_R1.markdup.bam -368 7 h3k4me3_R1.markdup.bam -369 2 h3k4me3_R1.markdup.bam -370 3 h3k4me3_R1.markdup.bam -371 7 h3k4me3_R1.markdup.bam -372 2 h3k4me3_R1.markdup.bam -373 3 h3k4me3_R1.markdup.bam -374 1 h3k4me3_R1.markdup.bam -375 5 h3k4me3_R1.markdup.bam -376 1 h3k4me3_R1.markdup.bam -377 2 h3k4me3_R1.markdup.bam -378 3 h3k4me3_R1.markdup.bam -379 2 h3k4me3_R1.markdup.bam -380 3 h3k4me3_R1.markdup.bam -381 4 h3k4me3_R1.markdup.bam -382 2 h3k4me3_R1.markdup.bam -383 5 h3k4me3_R1.markdup.bam -384 4 h3k4me3_R1.markdup.bam -386 4 h3k4me3_R1.markdup.bam -387 2 h3k4me3_R1.markdup.bam -388 1 h3k4me3_R1.markdup.bam -389 4 h3k4me3_R1.markdup.bam -390 5 h3k4me3_R1.markdup.bam -392 2 h3k4me3_R1.markdup.bam -393 4 h3k4me3_R1.markdup.bam -394 3 h3k4me3_R1.markdup.bam -395 2 h3k4me3_R1.markdup.bam -396 3 h3k4me3_R1.markdup.bam -397 1 h3k4me3_R1.markdup.bam -398 1 h3k4me3_R1.markdup.bam -399 3 h3k4me3_R1.markdup.bam -400 1 h3k4me3_R1.markdup.bam -401 2 h3k4me3_R1.markdup.bam -402 3 h3k4me3_R1.markdup.bam -405 3 h3k4me3_R1.markdup.bam -406 4 h3k4me3_R1.markdup.bam -407 1 h3k4me3_R1.markdup.bam -408 3 h3k4me3_R1.markdup.bam -410 2 h3k4me3_R1.markdup.bam -411 2 h3k4me3_R1.markdup.bam -413 1 h3k4me3_R1.markdup.bam -414 3 h3k4me3_R1.markdup.bam -415 3 h3k4me3_R1.markdup.bam -416 7 h3k4me3_R1.markdup.bam -417 2 h3k4me3_R1.markdup.bam -418 1 h3k4me3_R1.markdup.bam -419 1 h3k4me3_R1.markdup.bam -421 5 h3k4me3_R1.markdup.bam -422 3 h3k4me3_R1.markdup.bam -423 2 h3k4me3_R1.markdup.bam -424 2 h3k4me3_R1.markdup.bam -425 1 h3k4me3_R1.markdup.bam -426 3 h3k4me3_R1.markdup.bam -428 3 h3k4me3_R1.markdup.bam -429 2 h3k4me3_R1.markdup.bam -431 1 h3k4me3_R1.markdup.bam -432 4 h3k4me3_R1.markdup.bam -433 1 h3k4me3_R1.markdup.bam -434 1 h3k4me3_R1.markdup.bam -435 1 h3k4me3_R1.markdup.bam -436 2 h3k4me3_R1.markdup.bam -437 3 h3k4me3_R1.markdup.bam -439 1 h3k4me3_R1.markdup.bam -442 3 h3k4me3_R1.markdup.bam -443 2 h3k4me3_R1.markdup.bam -444 2 h3k4me3_R1.markdup.bam -446 2 h3k4me3_R1.markdup.bam -448 3 h3k4me3_R1.markdup.bam -449 1 h3k4me3_R1.markdup.bam -450 1 h3k4me3_R1.markdup.bam -451 2 h3k4me3_R1.markdup.bam -452 2 h3k4me3_R1.markdup.bam -453 2 h3k4me3_R1.markdup.bam -455 1 h3k4me3_R1.markdup.bam -456 1 h3k4me3_R1.markdup.bam -460 2 h3k4me3_R1.markdup.bam -461 1 h3k4me3_R1.markdup.bam -462 2 h3k4me3_R1.markdup.bam -465 1 h3k4me3_R1.markdup.bam -466 1 h3k4me3_R1.markdup.bam -469 1 h3k4me3_R1.markdup.bam -471 2 h3k4me3_R1.markdup.bam -474 1 h3k4me3_R1.markdup.bam -475 1 h3k4me3_R1.markdup.bam -478 1 h3k4me3_R1.markdup.bam -479 1 h3k4me3_R1.markdup.bam -484 1 h3k4me3_R1.markdup.bam -485 1 h3k4me3_R1.markdup.bam -490 1 h3k4me3_R1.markdup.bam -493 1 h3k4me3_R1.markdup.bam -495 1 h3k4me3_R1.markdup.bam -496 2 h3k4me3_R1.markdup.bam -497 1 h3k4me3_R1.markdup.bam -498 1 h3k4me3_R1.markdup.bam -500 1 h3k4me3_R1.markdup.bam -501 2 h3k4me3_R1.markdup.bam -502 3 h3k4me3_R1.markdup.bam -505 1 h3k4me3_R1.markdup.bam -508 1 h3k4me3_R1.markdup.bam -510 1 h3k4me3_R1.markdup.bam -513 1 h3k4me3_R1.markdup.bam -514 1 h3k4me3_R1.markdup.bam -523 1 h3k4me3_R1.markdup.bam -524 1 h3k4me3_R1.markdup.bam -525 1 h3k4me3_R1.markdup.bam -526 1 h3k4me3_R1.markdup.bam -529 1 h3k4me3_R1.markdup.bam -532 1 h3k4me3_R1.markdup.bam -539 1 h3k4me3_R1.markdup.bam -545 3 h3k4me3_R1.markdup.bam -549 1 h3k4me3_R1.markdup.bam -550 1 h3k4me3_R1.markdup.bam -551 1 h3k4me3_R1.markdup.bam -552 1 h3k4me3_R1.markdup.bam -554 1 h3k4me3_R1.markdup.bam -556 1 h3k4me3_R1.markdup.bam -558 1 h3k4me3_R1.markdup.bam -559 3 h3k4me3_R1.markdup.bam -560 2 h3k4me3_R1.markdup.bam -561 1 h3k4me3_R1.markdup.bam -563 2 h3k4me3_R1.markdup.bam -565 2 h3k4me3_R1.markdup.bam -566 1 h3k4me3_R1.markdup.bam -569 1 h3k4me3_R1.markdup.bam -570 2 h3k4me3_R1.markdup.bam -571 1 h3k4me3_R1.markdup.bam -572 1 h3k4me3_R1.markdup.bam -576 2 h3k4me3_R1.markdup.bam -579 1 h3k4me3_R1.markdup.bam -581 2 h3k4me3_R1.markdup.bam -582 2 h3k4me3_R1.markdup.bam -583 1 h3k4me3_R1.markdup.bam -585 2 h3k4me3_R1.markdup.bam -586 1 h3k4me3_R1.markdup.bam -588 2 h3k4me3_R1.markdup.bam -589 2 h3k4me3_R1.markdup.bam -590 1 h3k4me3_R1.markdup.bam -591 3 h3k4me3_R1.markdup.bam -597 1 h3k4me3_R1.markdup.bam -598 1 h3k4me3_R1.markdup.bam -601 1 h3k4me3_R1.markdup.bam -603 1 h3k4me3_R1.markdup.bam -606 1 h3k4me3_R1.markdup.bam -611 1 h3k4me3_R1.markdup.bam -613 1 h3k4me3_R1.markdup.bam -617 1 h3k4me3_R1.markdup.bam -621 2 h3k4me3_R1.markdup.bam -625 2 h3k4me3_R1.markdup.bam -627 1 h3k4me3_R1.markdup.bam -628 1 h3k4me3_R1.markdup.bam -629 1 h3k4me3_R1.markdup.bam -630 1 h3k4me3_R1.markdup.bam -631 1 h3k4me3_R1.markdup.bam -632 1 h3k4me3_R1.markdup.bam -633 2 h3k4me3_R1.markdup.bam -636 1 h3k4me3_R1.markdup.bam -637 1 h3k4me3_R1.markdup.bam -638 1 h3k4me3_R1.markdup.bam -639 1 h3k4me3_R1.markdup.bam -640 1 h3k4me3_R1.markdup.bam -642 1 h3k4me3_R1.markdup.bam -643 1 h3k4me3_R1.markdup.bam -646 1 h3k4me3_R1.markdup.bam -648 1 h3k4me3_R1.markdup.bam -650 1 h3k4me3_R1.markdup.bam -652 1 h3k4me3_R1.markdup.bam -659 1 h3k4me3_R1.markdup.bam -660 1 h3k4me3_R1.markdup.bam -661 1 h3k4me3_R1.markdup.bam -662 1 h3k4me3_R1.markdup.bam -669 1 h3k4me3_R1.markdup.bam -675 1 h3k4me3_R1.markdup.bam -679 1 h3k4me3_R1.markdup.bam -680 1 h3k4me3_R1.markdup.bam -684 1 h3k4me3_R1.markdup.bam -687 1 h3k4me3_R1.markdup.bam -688 1 h3k4me3_R1.markdup.bam -692 1 h3k4me3_R1.markdup.bam -700 1 h3k4me3_R1.markdup.bam diff --git a/dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv b/dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv deleted file mode 100644 index f0b1ddb0..00000000 --- a/dev/docker/static_reports/test_data/h3k4me3_R2_raw.csv +++ /dev/null @@ -1,564 +0,0 @@ -#bamPEFragmentSize -Size Occurrences Sample -28 1 h3k4me3_R2.markdup.bam -30 1 h3k4me3_R2.markdup.bam -31 2 h3k4me3_R2.markdup.bam -32 1 h3k4me3_R2.markdup.bam -35 1 h3k4me3_R2.markdup.bam -36 3 h3k4me3_R2.markdup.bam -37 2 h3k4me3_R2.markdup.bam -38 2 h3k4me3_R2.markdup.bam -39 3 h3k4me3_R2.markdup.bam -40 4 h3k4me3_R2.markdup.bam -41 4 h3k4me3_R2.markdup.bam -42 6 h3k4me3_R2.markdup.bam -43 2 h3k4me3_R2.markdup.bam -44 1 h3k4me3_R2.markdup.bam -45 2 h3k4me3_R2.markdup.bam -46 4 h3k4me3_R2.markdup.bam -47 5 h3k4me3_R2.markdup.bam -48 1 h3k4me3_R2.markdup.bam -49 2 h3k4me3_R2.markdup.bam -51 6 h3k4me3_R2.markdup.bam -52 4 h3k4me3_R2.markdup.bam -53 5 h3k4me3_R2.markdup.bam -54 2 h3k4me3_R2.markdup.bam -55 6 h3k4me3_R2.markdup.bam -56 3 h3k4me3_R2.markdup.bam -57 1 h3k4me3_R2.markdup.bam -59 1 h3k4me3_R2.markdup.bam -60 3 h3k4me3_R2.markdup.bam -61 1 h3k4me3_R2.markdup.bam -62 4 h3k4me3_R2.markdup.bam -63 3 h3k4me3_R2.markdup.bam -64 11 h3k4me3_R2.markdup.bam -65 3 h3k4me3_R2.markdup.bam -66 2 h3k4me3_R2.markdup.bam -67 5 h3k4me3_R2.markdup.bam -68 1 h3k4me3_R2.markdup.bam -69 2 h3k4me3_R2.markdup.bam -70 1 h3k4me3_R2.markdup.bam -73 7 h3k4me3_R2.markdup.bam -74 5 h3k4me3_R2.markdup.bam -75 2 h3k4me3_R2.markdup.bam -76 3 h3k4me3_R2.markdup.bam -77 2 h3k4me3_R2.markdup.bam -78 2 h3k4me3_R2.markdup.bam -79 2 h3k4me3_R2.markdup.bam -80 1 h3k4me3_R2.markdup.bam -81 4 h3k4me3_R2.markdup.bam -82 3 h3k4me3_R2.markdup.bam -83 6 h3k4me3_R2.markdup.bam -84 8 h3k4me3_R2.markdup.bam -85 5 h3k4me3_R2.markdup.bam -86 1 h3k4me3_R2.markdup.bam -87 5 h3k4me3_R2.markdup.bam -88 2 h3k4me3_R2.markdup.bam -89 1 h3k4me3_R2.markdup.bam -91 2 h3k4me3_R2.markdup.bam -92 2 h3k4me3_R2.markdup.bam -93 1 h3k4me3_R2.markdup.bam -94 4 h3k4me3_R2.markdup.bam -95 2 h3k4me3_R2.markdup.bam -96 2 h3k4me3_R2.markdup.bam -97 1 h3k4me3_R2.markdup.bam -98 2 h3k4me3_R2.markdup.bam -99 2 h3k4me3_R2.markdup.bam -100 2 h3k4me3_R2.markdup.bam -103 5 h3k4me3_R2.markdup.bam -104 2 h3k4me3_R2.markdup.bam -105 5 h3k4me3_R2.markdup.bam -106 2 h3k4me3_R2.markdup.bam -107 4 h3k4me3_R2.markdup.bam -109 2 h3k4me3_R2.markdup.bam -110 2 h3k4me3_R2.markdup.bam -112 2 h3k4me3_R2.markdup.bam -113 1 h3k4me3_R2.markdup.bam -114 2 h3k4me3_R2.markdup.bam -115 5 h3k4me3_R2.markdup.bam -116 1 h3k4me3_R2.markdup.bam -117 1 h3k4me3_R2.markdup.bam -119 3 h3k4me3_R2.markdup.bam -120 1 h3k4me3_R2.markdup.bam -121 3 h3k4me3_R2.markdup.bam -123 2 h3k4me3_R2.markdup.bam -124 2 h3k4me3_R2.markdup.bam -125 1 h3k4me3_R2.markdup.bam -126 4 h3k4me3_R2.markdup.bam -127 1 h3k4me3_R2.markdup.bam -128 2 h3k4me3_R2.markdup.bam -129 2 h3k4me3_R2.markdup.bam -130 2 h3k4me3_R2.markdup.bam -131 1 h3k4me3_R2.markdup.bam -132 4 h3k4me3_R2.markdup.bam -133 2 h3k4me3_R2.markdup.bam -134 3 h3k4me3_R2.markdup.bam -135 4 h3k4me3_R2.markdup.bam -136 4 h3k4me3_R2.markdup.bam -137 3 h3k4me3_R2.markdup.bam -138 1 h3k4me3_R2.markdup.bam -139 1 h3k4me3_R2.markdup.bam -140 3 h3k4me3_R2.markdup.bam -141 2 h3k4me3_R2.markdup.bam -142 3 h3k4me3_R2.markdup.bam -143 2 h3k4me3_R2.markdup.bam -144 2 h3k4me3_R2.markdup.bam -145 2 h3k4me3_R2.markdup.bam -146 3 h3k4me3_R2.markdup.bam -147 1 h3k4me3_R2.markdup.bam -149 3 h3k4me3_R2.markdup.bam -150 6 h3k4me3_R2.markdup.bam -151 4 h3k4me3_R2.markdup.bam -152 3 h3k4me3_R2.markdup.bam -153 1 h3k4me3_R2.markdup.bam -154 4 h3k4me3_R2.markdup.bam -155 2 h3k4me3_R2.markdup.bam -156 3 h3k4me3_R2.markdup.bam -157 8 h3k4me3_R2.markdup.bam -158 2 h3k4me3_R2.markdup.bam -159 1 h3k4me3_R2.markdup.bam -160 1 h3k4me3_R2.markdup.bam -161 2 h3k4me3_R2.markdup.bam -162 3 h3k4me3_R2.markdup.bam -163 8 h3k4me3_R2.markdup.bam -164 9 h3k4me3_R2.markdup.bam -165 4 h3k4me3_R2.markdup.bam -166 6 h3k4me3_R2.markdup.bam -167 7 h3k4me3_R2.markdup.bam -168 2 h3k4me3_R2.markdup.bam -169 5 h3k4me3_R2.markdup.bam -170 4 h3k4me3_R2.markdup.bam -171 4 h3k4me3_R2.markdup.bam -172 5 h3k4me3_R2.markdup.bam -173 5 h3k4me3_R2.markdup.bam -174 6 h3k4me3_R2.markdup.bam -175 3 h3k4me3_R2.markdup.bam -176 7 h3k4me3_R2.markdup.bam -177 5 h3k4me3_R2.markdup.bam -178 7 h3k4me3_R2.markdup.bam -179 5 h3k4me3_R2.markdup.bam -180 5 h3k4me3_R2.markdup.bam -181 2 h3k4me3_R2.markdup.bam -182 6 h3k4me3_R2.markdup.bam -183 3 h3k4me3_R2.markdup.bam -184 6 h3k4me3_R2.markdup.bam -185 10 h3k4me3_R2.markdup.bam -186 8 h3k4me3_R2.markdup.bam -187 3 h3k4me3_R2.markdup.bam -188 8 h3k4me3_R2.markdup.bam -189 6 h3k4me3_R2.markdup.bam -190 13 h3k4me3_R2.markdup.bam -191 2 h3k4me3_R2.markdup.bam -192 5 h3k4me3_R2.markdup.bam -193 3 h3k4me3_R2.markdup.bam -194 3 h3k4me3_R2.markdup.bam -195 6 h3k4me3_R2.markdup.bam -196 10 h3k4me3_R2.markdup.bam -197 3 h3k4me3_R2.markdup.bam -198 4 h3k4me3_R2.markdup.bam -199 7 h3k4me3_R2.markdup.bam -200 6 h3k4me3_R2.markdup.bam -201 3 h3k4me3_R2.markdup.bam -202 12 h3k4me3_R2.markdup.bam -203 6 h3k4me3_R2.markdup.bam -204 3 h3k4me3_R2.markdup.bam -205 6 h3k4me3_R2.markdup.bam -206 7 h3k4me3_R2.markdup.bam -207 4 h3k4me3_R2.markdup.bam -208 8 h3k4me3_R2.markdup.bam -209 5 h3k4me3_R2.markdup.bam -210 6 h3k4me3_R2.markdup.bam -211 9 h3k4me3_R2.markdup.bam -212 2 h3k4me3_R2.markdup.bam -213 5 h3k4me3_R2.markdup.bam -214 2 h3k4me3_R2.markdup.bam -215 8 h3k4me3_R2.markdup.bam -216 2 h3k4me3_R2.markdup.bam -217 11 h3k4me3_R2.markdup.bam -218 7 h3k4me3_R2.markdup.bam -219 5 h3k4me3_R2.markdup.bam -220 4 h3k4me3_R2.markdup.bam -221 7 h3k4me3_R2.markdup.bam -222 5 h3k4me3_R2.markdup.bam -223 8 h3k4me3_R2.markdup.bam -224 3 h3k4me3_R2.markdup.bam -225 5 h3k4me3_R2.markdup.bam -226 7 h3k4me3_R2.markdup.bam -227 7 h3k4me3_R2.markdup.bam -228 8 h3k4me3_R2.markdup.bam -229 9 h3k4me3_R2.markdup.bam -230 3 h3k4me3_R2.markdup.bam -231 2 h3k4me3_R2.markdup.bam -232 5 h3k4me3_R2.markdup.bam -233 3 h3k4me3_R2.markdup.bam -234 7 h3k4me3_R2.markdup.bam -235 6 h3k4me3_R2.markdup.bam -236 7 h3k4me3_R2.markdup.bam -237 3 h3k4me3_R2.markdup.bam -238 5 h3k4me3_R2.markdup.bam -239 7 h3k4me3_R2.markdup.bam -240 7 h3k4me3_R2.markdup.bam -241 4 h3k4me3_R2.markdup.bam -242 4 h3k4me3_R2.markdup.bam -243 2 h3k4me3_R2.markdup.bam -244 2 h3k4me3_R2.markdup.bam -245 10 h3k4me3_R2.markdup.bam -246 4 h3k4me3_R2.markdup.bam -247 2 h3k4me3_R2.markdup.bam -248 4 h3k4me3_R2.markdup.bam -249 4 h3k4me3_R2.markdup.bam -250 3 h3k4me3_R2.markdup.bam -251 6 h3k4me3_R2.markdup.bam -253 8 h3k4me3_R2.markdup.bam -254 5 h3k4me3_R2.markdup.bam -255 2 h3k4me3_R2.markdup.bam -256 5 h3k4me3_R2.markdup.bam -257 5 h3k4me3_R2.markdup.bam -258 4 h3k4me3_R2.markdup.bam -259 1 h3k4me3_R2.markdup.bam -260 4 h3k4me3_R2.markdup.bam -261 1 h3k4me3_R2.markdup.bam -262 4 h3k4me3_R2.markdup.bam -263 2 h3k4me3_R2.markdup.bam -265 5 h3k4me3_R2.markdup.bam -266 3 h3k4me3_R2.markdup.bam -267 1 h3k4me3_R2.markdup.bam -268 6 h3k4me3_R2.markdup.bam -269 4 h3k4me3_R2.markdup.bam -270 4 h3k4me3_R2.markdup.bam -272 1 h3k4me3_R2.markdup.bam -273 3 h3k4me3_R2.markdup.bam -274 2 h3k4me3_R2.markdup.bam -275 3 h3k4me3_R2.markdup.bam -276 1 h3k4me3_R2.markdup.bam -277 1 h3k4me3_R2.markdup.bam -278 1 h3k4me3_R2.markdup.bam -279 7 h3k4me3_R2.markdup.bam -280 2 h3k4me3_R2.markdup.bam -281 2 h3k4me3_R2.markdup.bam -282 3 h3k4me3_R2.markdup.bam -283 2 h3k4me3_R2.markdup.bam -284 4 h3k4me3_R2.markdup.bam -285 1 h3k4me3_R2.markdup.bam -286 1 h3k4me3_R2.markdup.bam -287 1 h3k4me3_R2.markdup.bam -288 3 h3k4me3_R2.markdup.bam -289 3 h3k4me3_R2.markdup.bam -290 2 h3k4me3_R2.markdup.bam -291 3 h3k4me3_R2.markdup.bam -292 2 h3k4me3_R2.markdup.bam -293 2 h3k4me3_R2.markdup.bam -294 1 h3k4me3_R2.markdup.bam -295 4 h3k4me3_R2.markdup.bam -296 3 h3k4me3_R2.markdup.bam -297 1 h3k4me3_R2.markdup.bam -298 2 h3k4me3_R2.markdup.bam -299 5 h3k4me3_R2.markdup.bam -300 1 h3k4me3_R2.markdup.bam -301 2 h3k4me3_R2.markdup.bam -302 4 h3k4me3_R2.markdup.bam -303 1 h3k4me3_R2.markdup.bam -304 2 h3k4me3_R2.markdup.bam -305 5 h3k4me3_R2.markdup.bam -306 3 h3k4me3_R2.markdup.bam -307 2 h3k4me3_R2.markdup.bam -309 3 h3k4me3_R2.markdup.bam -310 2 h3k4me3_R2.markdup.bam -311 1 h3k4me3_R2.markdup.bam -312 2 h3k4me3_R2.markdup.bam -313 1 h3k4me3_R2.markdup.bam -314 2 h3k4me3_R2.markdup.bam -315 5 h3k4me3_R2.markdup.bam -317 1 h3k4me3_R2.markdup.bam -318 1 h3k4me3_R2.markdup.bam -319 2 h3k4me3_R2.markdup.bam -320 3 h3k4me3_R2.markdup.bam -321 2 h3k4me3_R2.markdup.bam -322 4 h3k4me3_R2.markdup.bam -323 2 h3k4me3_R2.markdup.bam -324 4 h3k4me3_R2.markdup.bam -325 2 h3k4me3_R2.markdup.bam -326 1 h3k4me3_R2.markdup.bam -327 1 h3k4me3_R2.markdup.bam -328 1 h3k4me3_R2.markdup.bam -329 1 h3k4me3_R2.markdup.bam -330 4 h3k4me3_R2.markdup.bam -331 2 h3k4me3_R2.markdup.bam -332 4 h3k4me3_R2.markdup.bam -333 5 h3k4me3_R2.markdup.bam -334 3 h3k4me3_R2.markdup.bam -336 3 h3k4me3_R2.markdup.bam -337 1 h3k4me3_R2.markdup.bam -338 2 h3k4me3_R2.markdup.bam -339 1 h3k4me3_R2.markdup.bam -341 1 h3k4me3_R2.markdup.bam -342 2 h3k4me3_R2.markdup.bam -343 2 h3k4me3_R2.markdup.bam -344 4 h3k4me3_R2.markdup.bam -345 1 h3k4me3_R2.markdup.bam -346 3 h3k4me3_R2.markdup.bam -347 4 h3k4me3_R2.markdup.bam -348 2 h3k4me3_R2.markdup.bam -349 1 h3k4me3_R2.markdup.bam -350 3 h3k4me3_R2.markdup.bam -351 4 h3k4me3_R2.markdup.bam -352 4 h3k4me3_R2.markdup.bam -353 1 h3k4me3_R2.markdup.bam -355 3 h3k4me3_R2.markdup.bam -356 1 h3k4me3_R2.markdup.bam -358 2 h3k4me3_R2.markdup.bam -359 3 h3k4me3_R2.markdup.bam -360 3 h3k4me3_R2.markdup.bam -361 3 h3k4me3_R2.markdup.bam -362 2 h3k4me3_R2.markdup.bam -363 1 h3k4me3_R2.markdup.bam -364 1 h3k4me3_R2.markdup.bam -365 4 h3k4me3_R2.markdup.bam -366 6 h3k4me3_R2.markdup.bam -367 2 h3k4me3_R2.markdup.bam -369 2 h3k4me3_R2.markdup.bam -370 1 h3k4me3_R2.markdup.bam -371 3 h3k4me3_R2.markdup.bam -372 3 h3k4me3_R2.markdup.bam -373 1 h3k4me3_R2.markdup.bam -374 4 h3k4me3_R2.markdup.bam -375 3 h3k4me3_R2.markdup.bam -376 2 h3k4me3_R2.markdup.bam -377 5 h3k4me3_R2.markdup.bam -378 1 h3k4me3_R2.markdup.bam -379 5 h3k4me3_R2.markdup.bam -380 3 h3k4me3_R2.markdup.bam -381 2 h3k4me3_R2.markdup.bam -382 1 h3k4me3_R2.markdup.bam -383 5 h3k4me3_R2.markdup.bam -384 5 h3k4me3_R2.markdup.bam -385 1 h3k4me3_R2.markdup.bam -386 3 h3k4me3_R2.markdup.bam -387 1 h3k4me3_R2.markdup.bam -388 4 h3k4me3_R2.markdup.bam -389 3 h3k4me3_R2.markdup.bam -390 5 h3k4me3_R2.markdup.bam -391 4 h3k4me3_R2.markdup.bam -392 6 h3k4me3_R2.markdup.bam -393 3 h3k4me3_R2.markdup.bam -394 1 h3k4me3_R2.markdup.bam -395 2 h3k4me3_R2.markdup.bam -396 3 h3k4me3_R2.markdup.bam -397 2 h3k4me3_R2.markdup.bam -398 5 h3k4me3_R2.markdup.bam -399 4 h3k4me3_R2.markdup.bam -400 1 h3k4me3_R2.markdup.bam -401 1 h3k4me3_R2.markdup.bam -402 2 h3k4me3_R2.markdup.bam -404 5 h3k4me3_R2.markdup.bam -405 2 h3k4me3_R2.markdup.bam -406 2 h3k4me3_R2.markdup.bam -407 4 h3k4me3_R2.markdup.bam -408 2 h3k4me3_R2.markdup.bam -409 1 h3k4me3_R2.markdup.bam -410 3 h3k4me3_R2.markdup.bam -411 2 h3k4me3_R2.markdup.bam -412 1 h3k4me3_R2.markdup.bam -413 3 h3k4me3_R2.markdup.bam -414 4 h3k4me3_R2.markdup.bam -415 1 h3k4me3_R2.markdup.bam -417 4 h3k4me3_R2.markdup.bam -418 2 h3k4me3_R2.markdup.bam -419 5 h3k4me3_R2.markdup.bam -420 3 h3k4me3_R2.markdup.bam -423 1 h3k4me3_R2.markdup.bam -424 2 h3k4me3_R2.markdup.bam -425 2 h3k4me3_R2.markdup.bam -426 3 h3k4me3_R2.markdup.bam -428 4 h3k4me3_R2.markdup.bam -429 1 h3k4me3_R2.markdup.bam -430 1 h3k4me3_R2.markdup.bam -431 4 h3k4me3_R2.markdup.bam -432 3 h3k4me3_R2.markdup.bam -433 1 h3k4me3_R2.markdup.bam -434 1 h3k4me3_R2.markdup.bam -435 2 h3k4me3_R2.markdup.bam -436 1 h3k4me3_R2.markdup.bam -437 4 h3k4me3_R2.markdup.bam -438 3 h3k4me3_R2.markdup.bam -439 2 h3k4me3_R2.markdup.bam -440 2 h3k4me3_R2.markdup.bam -441 1 h3k4me3_R2.markdup.bam -442 1 h3k4me3_R2.markdup.bam -443 1 h3k4me3_R2.markdup.bam -444 1 h3k4me3_R2.markdup.bam -445 2 h3k4me3_R2.markdup.bam -446 1 h3k4me3_R2.markdup.bam -447 1 h3k4me3_R2.markdup.bam -448 1 h3k4me3_R2.markdup.bam -449 1 h3k4me3_R2.markdup.bam -450 1 h3k4me3_R2.markdup.bam -451 3 h3k4me3_R2.markdup.bam -452 4 h3k4me3_R2.markdup.bam -453 3 h3k4me3_R2.markdup.bam -456 1 h3k4me3_R2.markdup.bam -457 1 h3k4me3_R2.markdup.bam -458 2 h3k4me3_R2.markdup.bam -459 1 h3k4me3_R2.markdup.bam -460 3 h3k4me3_R2.markdup.bam -461 2 h3k4me3_R2.markdup.bam -462 2 h3k4me3_R2.markdup.bam -463 1 h3k4me3_R2.markdup.bam -464 2 h3k4me3_R2.markdup.bam -465 2 h3k4me3_R2.markdup.bam -467 3 h3k4me3_R2.markdup.bam -468 2 h3k4me3_R2.markdup.bam -469 1 h3k4me3_R2.markdup.bam -470 1 h3k4me3_R2.markdup.bam -471 1 h3k4me3_R2.markdup.bam -473 2 h3k4me3_R2.markdup.bam -474 1 h3k4me3_R2.markdup.bam -476 4 h3k4me3_R2.markdup.bam -477 2 h3k4me3_R2.markdup.bam -481 1 h3k4me3_R2.markdup.bam -482 1 h3k4me3_R2.markdup.bam -483 2 h3k4me3_R2.markdup.bam -484 2 h3k4me3_R2.markdup.bam -485 3 h3k4me3_R2.markdup.bam -487 1 h3k4me3_R2.markdup.bam -488 2 h3k4me3_R2.markdup.bam -489 2 h3k4me3_R2.markdup.bam -490 3 h3k4me3_R2.markdup.bam -492 3 h3k4me3_R2.markdup.bam -493 1 h3k4me3_R2.markdup.bam -494 4 h3k4me3_R2.markdup.bam -501 2 h3k4me3_R2.markdup.bam -502 1 h3k4me3_R2.markdup.bam -503 3 h3k4me3_R2.markdup.bam -504 1 h3k4me3_R2.markdup.bam -505 2 h3k4me3_R2.markdup.bam -506 2 h3k4me3_R2.markdup.bam -507 1 h3k4me3_R2.markdup.bam -509 2 h3k4me3_R2.markdup.bam -511 2 h3k4me3_R2.markdup.bam -514 2 h3k4me3_R2.markdup.bam -516 1 h3k4me3_R2.markdup.bam -517 1 h3k4me3_R2.markdup.bam -518 1 h3k4me3_R2.markdup.bam -520 1 h3k4me3_R2.markdup.bam -521 1 h3k4me3_R2.markdup.bam -523 1 h3k4me3_R2.markdup.bam -524 2 h3k4me3_R2.markdup.bam -525 2 h3k4me3_R2.markdup.bam -527 1 h3k4me3_R2.markdup.bam -528 3 h3k4me3_R2.markdup.bam -529 2 h3k4me3_R2.markdup.bam -530 3 h3k4me3_R2.markdup.bam -531 1 h3k4me3_R2.markdup.bam -532 1 h3k4me3_R2.markdup.bam -533 2 h3k4me3_R2.markdup.bam -534 2 h3k4me3_R2.markdup.bam -535 2 h3k4me3_R2.markdup.bam -536 3 h3k4me3_R2.markdup.bam -537 1 h3k4me3_R2.markdup.bam -539 2 h3k4me3_R2.markdup.bam -540 1 h3k4me3_R2.markdup.bam -542 1 h3k4me3_R2.markdup.bam -543 4 h3k4me3_R2.markdup.bam -544 1 h3k4me3_R2.markdup.bam -545 2 h3k4me3_R2.markdup.bam -546 2 h3k4me3_R2.markdup.bam -547 1 h3k4me3_R2.markdup.bam -548 1 h3k4me3_R2.markdup.bam -550 1 h3k4me3_R2.markdup.bam -551 3 h3k4me3_R2.markdup.bam -554 2 h3k4me3_R2.markdup.bam -555 2 h3k4me3_R2.markdup.bam -556 1 h3k4me3_R2.markdup.bam -557 3 h3k4me3_R2.markdup.bam -558 3 h3k4me3_R2.markdup.bam -560 1 h3k4me3_R2.markdup.bam -561 2 h3k4me3_R2.markdup.bam -563 1 h3k4me3_R2.markdup.bam -565 1 h3k4me3_R2.markdup.bam -566 2 h3k4me3_R2.markdup.bam -567 1 h3k4me3_R2.markdup.bam -568 4 h3k4me3_R2.markdup.bam -569 1 h3k4me3_R2.markdup.bam -570 1 h3k4me3_R2.markdup.bam -571 3 h3k4me3_R2.markdup.bam -574 1 h3k4me3_R2.markdup.bam -575 4 h3k4me3_R2.markdup.bam -577 3 h3k4me3_R2.markdup.bam -578 1 h3k4me3_R2.markdup.bam -579 1 h3k4me3_R2.markdup.bam -581 1 h3k4me3_R2.markdup.bam -583 1 h3k4me3_R2.markdup.bam -584 3 h3k4me3_R2.markdup.bam -585 1 h3k4me3_R2.markdup.bam -587 3 h3k4me3_R2.markdup.bam -588 1 h3k4me3_R2.markdup.bam -589 1 h3k4me3_R2.markdup.bam -591 1 h3k4me3_R2.markdup.bam -592 1 h3k4me3_R2.markdup.bam -593 1 h3k4me3_R2.markdup.bam -594 2 h3k4me3_R2.markdup.bam -595 1 h3k4me3_R2.markdup.bam -596 3 h3k4me3_R2.markdup.bam -597 1 h3k4me3_R2.markdup.bam -598 2 h3k4me3_R2.markdup.bam -599 3 h3k4me3_R2.markdup.bam -600 2 h3k4me3_R2.markdup.bam -601 1 h3k4me3_R2.markdup.bam -602 1 h3k4me3_R2.markdup.bam -603 2 h3k4me3_R2.markdup.bam -604 2 h3k4me3_R2.markdup.bam -605 1 h3k4me3_R2.markdup.bam -606 2 h3k4me3_R2.markdup.bam -607 2 h3k4me3_R2.markdup.bam -608 1 h3k4me3_R2.markdup.bam -609 1 h3k4me3_R2.markdup.bam -610 1 h3k4me3_R2.markdup.bam -611 1 h3k4me3_R2.markdup.bam -612 3 h3k4me3_R2.markdup.bam -613 1 h3k4me3_R2.markdup.bam -616 1 h3k4me3_R2.markdup.bam -619 2 h3k4me3_R2.markdup.bam -620 1 h3k4me3_R2.markdup.bam -622 2 h3k4me3_R2.markdup.bam -623 1 h3k4me3_R2.markdup.bam -624 1 h3k4me3_R2.markdup.bam -627 1 h3k4me3_R2.markdup.bam -628 1 h3k4me3_R2.markdup.bam -629 1 h3k4me3_R2.markdup.bam -631 1 h3k4me3_R2.markdup.bam -634 1 h3k4me3_R2.markdup.bam -635 1 h3k4me3_R2.markdup.bam -639 1 h3k4me3_R2.markdup.bam -640 1 h3k4me3_R2.markdup.bam -642 2 h3k4me3_R2.markdup.bam -644 1 h3k4me3_R2.markdup.bam -646 1 h3k4me3_R2.markdup.bam -649 3 h3k4me3_R2.markdup.bam -651 2 h3k4me3_R2.markdup.bam -652 1 h3k4me3_R2.markdup.bam -653 1 h3k4me3_R2.markdup.bam -658 1 h3k4me3_R2.markdup.bam -659 2 h3k4me3_R2.markdup.bam -660 1 h3k4me3_R2.markdup.bam -661 2 h3k4me3_R2.markdup.bam -662 3 h3k4me3_R2.markdup.bam -663 1 h3k4me3_R2.markdup.bam -664 1 h3k4me3_R2.markdup.bam -665 2 h3k4me3_R2.markdup.bam -667 1 h3k4me3_R2.markdup.bam -670 1 h3k4me3_R2.markdup.bam -672 1 h3k4me3_R2.markdup.bam -673 2 h3k4me3_R2.markdup.bam -674 1 h3k4me3_R2.markdup.bam -676 2 h3k4me3_R2.markdup.bam -677 1 h3k4me3_R2.markdup.bam -683 2 h3k4me3_R2.markdup.bam -685 1 h3k4me3_R2.markdup.bam -686 1 h3k4me3_R2.markdup.bam -687 2 h3k4me3_R2.markdup.bam -693 1 h3k4me3_R2.markdup.bam -694 2 h3k4me3_R2.markdup.bam -696 1 h3k4me3_R2.markdup.bam -698 1 h3k4me3_R2.markdup.bam -699 2 h3k4me3_R2.markdup.bam diff --git a/dev/docker/static_reports/test_data/igg_R1_raw.csv b/dev/docker/static_reports/test_data/igg_R1_raw.csv deleted file mode 100644 index 18a32397..00000000 --- a/dev/docker/static_reports/test_data/igg_R1_raw.csv +++ /dev/null @@ -1,534 +0,0 @@ -#bamPEFragmentSize -Size Occurrences Sample -25 1 igg_R1.dedup.bam -27 1 igg_R1.dedup.bam -28 1 igg_R1.dedup.bam -30 1 igg_R1.dedup.bam -34 1 igg_R1.dedup.bam -35 1 igg_R1.dedup.bam -38 1 igg_R1.dedup.bam -40 1 igg_R1.dedup.bam -42 2 igg_R1.dedup.bam -45 1 igg_R1.dedup.bam -47 2 igg_R1.dedup.bam -52 1 igg_R1.dedup.bam -53 1 igg_R1.dedup.bam -54 1 igg_R1.dedup.bam -56 1 igg_R1.dedup.bam -59 2 igg_R1.dedup.bam -60 1 igg_R1.dedup.bam -61 2 igg_R1.dedup.bam -62 2 igg_R1.dedup.bam -63 3 igg_R1.dedup.bam -64 5 igg_R1.dedup.bam -65 1 igg_R1.dedup.bam -67 2 igg_R1.dedup.bam -71 3 igg_R1.dedup.bam -72 3 igg_R1.dedup.bam -73 4 igg_R1.dedup.bam -74 1 igg_R1.dedup.bam -75 1 igg_R1.dedup.bam -76 3 igg_R1.dedup.bam -77 2 igg_R1.dedup.bam -78 2 igg_R1.dedup.bam -80 3 igg_R1.dedup.bam -81 2 igg_R1.dedup.bam -83 1 igg_R1.dedup.bam -84 4 igg_R1.dedup.bam -85 5 igg_R1.dedup.bam -86 1 igg_R1.dedup.bam -87 6 igg_R1.dedup.bam -88 1 igg_R1.dedup.bam -90 1 igg_R1.dedup.bam -92 2 igg_R1.dedup.bam -93 2 igg_R1.dedup.bam -94 4 igg_R1.dedup.bam -95 2 igg_R1.dedup.bam -97 3 igg_R1.dedup.bam -98 1 igg_R1.dedup.bam -99 2 igg_R1.dedup.bam -100 4 igg_R1.dedup.bam -101 1 igg_R1.dedup.bam -102 2 igg_R1.dedup.bam -103 2 igg_R1.dedup.bam -104 1 igg_R1.dedup.bam -105 1 igg_R1.dedup.bam -106 3 igg_R1.dedup.bam -107 4 igg_R1.dedup.bam -108 1 igg_R1.dedup.bam -110 3 igg_R1.dedup.bam -111 2 igg_R1.dedup.bam -112 1 igg_R1.dedup.bam -113 2 igg_R1.dedup.bam -114 3 igg_R1.dedup.bam -115 1 igg_R1.dedup.bam -116 2 igg_R1.dedup.bam -117 3 igg_R1.dedup.bam -119 2 igg_R1.dedup.bam -120 3 igg_R1.dedup.bam -121 3 igg_R1.dedup.bam -124 1 igg_R1.dedup.bam -125 2 igg_R1.dedup.bam -126 1 igg_R1.dedup.bam -127 3 igg_R1.dedup.bam -128 2 igg_R1.dedup.bam -129 4 igg_R1.dedup.bam -130 2 igg_R1.dedup.bam -131 2 igg_R1.dedup.bam -132 3 igg_R1.dedup.bam -133 2 igg_R1.dedup.bam -134 2 igg_R1.dedup.bam -136 1 igg_R1.dedup.bam -137 3 igg_R1.dedup.bam -138 1 igg_R1.dedup.bam -139 1 igg_R1.dedup.bam -140 1 igg_R1.dedup.bam -143 2 igg_R1.dedup.bam -145 3 igg_R1.dedup.bam -146 1 igg_R1.dedup.bam -147 1 igg_R1.dedup.bam -148 1 igg_R1.dedup.bam -149 3 igg_R1.dedup.bam -150 2 igg_R1.dedup.bam -151 2 igg_R1.dedup.bam -153 2 igg_R1.dedup.bam -154 4 igg_R1.dedup.bam -155 4 igg_R1.dedup.bam -156 3 igg_R1.dedup.bam -157 2 igg_R1.dedup.bam -158 5 igg_R1.dedup.bam -159 4 igg_R1.dedup.bam -160 1 igg_R1.dedup.bam -161 6 igg_R1.dedup.bam -162 3 igg_R1.dedup.bam -163 2 igg_R1.dedup.bam -164 3 igg_R1.dedup.bam -165 5 igg_R1.dedup.bam -166 5 igg_R1.dedup.bam -167 10 igg_R1.dedup.bam -168 7 igg_R1.dedup.bam -169 7 igg_R1.dedup.bam -170 6 igg_R1.dedup.bam -171 4 igg_R1.dedup.bam -172 3 igg_R1.dedup.bam -173 5 igg_R1.dedup.bam -174 3 igg_R1.dedup.bam -175 6 igg_R1.dedup.bam -176 13 igg_R1.dedup.bam -177 9 igg_R1.dedup.bam -178 11 igg_R1.dedup.bam -179 9 igg_R1.dedup.bam -180 6 igg_R1.dedup.bam -181 8 igg_R1.dedup.bam -182 7 igg_R1.dedup.bam -183 7 igg_R1.dedup.bam -184 5 igg_R1.dedup.bam -185 11 igg_R1.dedup.bam -186 14 igg_R1.dedup.bam -187 6 igg_R1.dedup.bam -188 3 igg_R1.dedup.bam -189 12 igg_R1.dedup.bam -190 3 igg_R1.dedup.bam -191 6 igg_R1.dedup.bam -192 7 igg_R1.dedup.bam -193 9 igg_R1.dedup.bam -194 11 igg_R1.dedup.bam -195 6 igg_R1.dedup.bam -196 6 igg_R1.dedup.bam -197 7 igg_R1.dedup.bam -198 7 igg_R1.dedup.bam -199 7 igg_R1.dedup.bam -200 8 igg_R1.dedup.bam -201 8 igg_R1.dedup.bam -202 7 igg_R1.dedup.bam -203 6 igg_R1.dedup.bam -204 8 igg_R1.dedup.bam -205 9 igg_R1.dedup.bam -206 7 igg_R1.dedup.bam -207 2 igg_R1.dedup.bam -208 8 igg_R1.dedup.bam -209 7 igg_R1.dedup.bam -210 11 igg_R1.dedup.bam -211 8 igg_R1.dedup.bam -212 10 igg_R1.dedup.bam -213 7 igg_R1.dedup.bam -214 11 igg_R1.dedup.bam -215 11 igg_R1.dedup.bam -216 7 igg_R1.dedup.bam -217 7 igg_R1.dedup.bam -218 8 igg_R1.dedup.bam -219 7 igg_R1.dedup.bam -220 9 igg_R1.dedup.bam -221 11 igg_R1.dedup.bam -222 5 igg_R1.dedup.bam -223 8 igg_R1.dedup.bam -224 5 igg_R1.dedup.bam -225 3 igg_R1.dedup.bam -226 5 igg_R1.dedup.bam -227 6 igg_R1.dedup.bam -228 6 igg_R1.dedup.bam -229 10 igg_R1.dedup.bam -230 8 igg_R1.dedup.bam -231 8 igg_R1.dedup.bam -232 6 igg_R1.dedup.bam -233 11 igg_R1.dedup.bam -234 6 igg_R1.dedup.bam -235 6 igg_R1.dedup.bam -236 8 igg_R1.dedup.bam -237 2 igg_R1.dedup.bam -238 8 igg_R1.dedup.bam -239 7 igg_R1.dedup.bam -240 6 igg_R1.dedup.bam -241 4 igg_R1.dedup.bam -242 2 igg_R1.dedup.bam -243 3 igg_R1.dedup.bam -244 4 igg_R1.dedup.bam -245 3 igg_R1.dedup.bam -246 6 igg_R1.dedup.bam -247 2 igg_R1.dedup.bam -248 5 igg_R1.dedup.bam -249 7 igg_R1.dedup.bam -250 2 igg_R1.dedup.bam -251 1 igg_R1.dedup.bam -252 3 igg_R1.dedup.bam -253 5 igg_R1.dedup.bam -254 4 igg_R1.dedup.bam -255 1 igg_R1.dedup.bam -256 1 igg_R1.dedup.bam -257 5 igg_R1.dedup.bam -258 2 igg_R1.dedup.bam -259 8 igg_R1.dedup.bam -261 4 igg_R1.dedup.bam -262 3 igg_R1.dedup.bam -263 2 igg_R1.dedup.bam -264 2 igg_R1.dedup.bam -265 1 igg_R1.dedup.bam -266 4 igg_R1.dedup.bam -267 3 igg_R1.dedup.bam -268 4 igg_R1.dedup.bam -269 3 igg_R1.dedup.bam -270 6 igg_R1.dedup.bam -271 3 igg_R1.dedup.bam -273 2 igg_R1.dedup.bam -274 3 igg_R1.dedup.bam -275 2 igg_R1.dedup.bam -276 2 igg_R1.dedup.bam -277 4 igg_R1.dedup.bam -278 2 igg_R1.dedup.bam -279 2 igg_R1.dedup.bam -280 4 igg_R1.dedup.bam -281 5 igg_R1.dedup.bam -283 2 igg_R1.dedup.bam -285 1 igg_R1.dedup.bam -286 4 igg_R1.dedup.bam -287 1 igg_R1.dedup.bam -288 3 igg_R1.dedup.bam -290 5 igg_R1.dedup.bam -291 4 igg_R1.dedup.bam -292 1 igg_R1.dedup.bam -293 4 igg_R1.dedup.bam -294 1 igg_R1.dedup.bam -295 1 igg_R1.dedup.bam -297 2 igg_R1.dedup.bam -298 1 igg_R1.dedup.bam -299 1 igg_R1.dedup.bam -300 6 igg_R1.dedup.bam -303 4 igg_R1.dedup.bam -304 1 igg_R1.dedup.bam -305 2 igg_R1.dedup.bam -306 4 igg_R1.dedup.bam -307 1 igg_R1.dedup.bam -308 1 igg_R1.dedup.bam -309 2 igg_R1.dedup.bam -310 2 igg_R1.dedup.bam -311 1 igg_R1.dedup.bam -312 2 igg_R1.dedup.bam -313 2 igg_R1.dedup.bam -314 3 igg_R1.dedup.bam -315 3 igg_R1.dedup.bam -316 2 igg_R1.dedup.bam -317 3 igg_R1.dedup.bam -318 3 igg_R1.dedup.bam -319 1 igg_R1.dedup.bam -320 2 igg_R1.dedup.bam -321 2 igg_R1.dedup.bam -322 2 igg_R1.dedup.bam -323 7 igg_R1.dedup.bam -324 1 igg_R1.dedup.bam -325 5 igg_R1.dedup.bam -326 2 igg_R1.dedup.bam -327 5 igg_R1.dedup.bam -329 3 igg_R1.dedup.bam -330 3 igg_R1.dedup.bam -331 3 igg_R1.dedup.bam -333 2 igg_R1.dedup.bam -335 1 igg_R1.dedup.bam -336 1 igg_R1.dedup.bam -338 2 igg_R1.dedup.bam -339 4 igg_R1.dedup.bam -340 3 igg_R1.dedup.bam -341 1 igg_R1.dedup.bam -342 5 igg_R1.dedup.bam -343 1 igg_R1.dedup.bam -344 3 igg_R1.dedup.bam -345 3 igg_R1.dedup.bam -346 6 igg_R1.dedup.bam -347 1 igg_R1.dedup.bam -348 1 igg_R1.dedup.bam -349 1 igg_R1.dedup.bam -350 4 igg_R1.dedup.bam -351 2 igg_R1.dedup.bam -352 5 igg_R1.dedup.bam -353 2 igg_R1.dedup.bam -354 3 igg_R1.dedup.bam -355 2 igg_R1.dedup.bam -356 2 igg_R1.dedup.bam -357 2 igg_R1.dedup.bam -358 1 igg_R1.dedup.bam -359 3 igg_R1.dedup.bam -361 5 igg_R1.dedup.bam -362 3 igg_R1.dedup.bam -363 2 igg_R1.dedup.bam -364 5 igg_R1.dedup.bam -365 2 igg_R1.dedup.bam -366 3 igg_R1.dedup.bam -367 2 igg_R1.dedup.bam -368 3 igg_R1.dedup.bam -369 3 igg_R1.dedup.bam -371 4 igg_R1.dedup.bam -373 5 igg_R1.dedup.bam -374 1 igg_R1.dedup.bam -375 2 igg_R1.dedup.bam -376 1 igg_R1.dedup.bam -377 2 igg_R1.dedup.bam -378 1 igg_R1.dedup.bam -379 4 igg_R1.dedup.bam -380 2 igg_R1.dedup.bam -381 2 igg_R1.dedup.bam -382 3 igg_R1.dedup.bam -383 2 igg_R1.dedup.bam -384 2 igg_R1.dedup.bam -385 2 igg_R1.dedup.bam -387 2 igg_R1.dedup.bam -388 5 igg_R1.dedup.bam -389 4 igg_R1.dedup.bam -390 3 igg_R1.dedup.bam -391 2 igg_R1.dedup.bam -392 6 igg_R1.dedup.bam -393 3 igg_R1.dedup.bam -394 1 igg_R1.dedup.bam -395 2 igg_R1.dedup.bam -397 2 igg_R1.dedup.bam -398 3 igg_R1.dedup.bam -399 5 igg_R1.dedup.bam -401 3 igg_R1.dedup.bam -402 2 igg_R1.dedup.bam -404 3 igg_R1.dedup.bam -405 6 igg_R1.dedup.bam -407 3 igg_R1.dedup.bam -408 1 igg_R1.dedup.bam -409 3 igg_R1.dedup.bam -410 1 igg_R1.dedup.bam -411 6 igg_R1.dedup.bam -413 4 igg_R1.dedup.bam -415 2 igg_R1.dedup.bam -416 1 igg_R1.dedup.bam -417 3 igg_R1.dedup.bam -418 3 igg_R1.dedup.bam -419 1 igg_R1.dedup.bam -421 1 igg_R1.dedup.bam -422 4 igg_R1.dedup.bam -423 2 igg_R1.dedup.bam -424 1 igg_R1.dedup.bam -425 4 igg_R1.dedup.bam -426 1 igg_R1.dedup.bam -427 1 igg_R1.dedup.bam -428 1 igg_R1.dedup.bam -429 1 igg_R1.dedup.bam -430 2 igg_R1.dedup.bam -431 3 igg_R1.dedup.bam -432 2 igg_R1.dedup.bam -433 1 igg_R1.dedup.bam -434 2 igg_R1.dedup.bam -435 4 igg_R1.dedup.bam -436 1 igg_R1.dedup.bam -437 1 igg_R1.dedup.bam -438 2 igg_R1.dedup.bam -439 3 igg_R1.dedup.bam -440 1 igg_R1.dedup.bam -441 2 igg_R1.dedup.bam -442 3 igg_R1.dedup.bam -444 1 igg_R1.dedup.bam -445 4 igg_R1.dedup.bam -446 1 igg_R1.dedup.bam -447 3 igg_R1.dedup.bam -448 1 igg_R1.dedup.bam -449 2 igg_R1.dedup.bam -450 1 igg_R1.dedup.bam -453 2 igg_R1.dedup.bam -454 1 igg_R1.dedup.bam -455 1 igg_R1.dedup.bam -456 2 igg_R1.dedup.bam -457 2 igg_R1.dedup.bam -458 3 igg_R1.dedup.bam -459 2 igg_R1.dedup.bam -460 1 igg_R1.dedup.bam -461 1 igg_R1.dedup.bam -463 1 igg_R1.dedup.bam -464 1 igg_R1.dedup.bam -465 2 igg_R1.dedup.bam -466 2 igg_R1.dedup.bam -467 1 igg_R1.dedup.bam -469 1 igg_R1.dedup.bam -470 2 igg_R1.dedup.bam -471 1 igg_R1.dedup.bam -472 3 igg_R1.dedup.bam -473 1 igg_R1.dedup.bam -474 1 igg_R1.dedup.bam -475 1 igg_R1.dedup.bam -476 3 igg_R1.dedup.bam -477 3 igg_R1.dedup.bam -478 2 igg_R1.dedup.bam -479 1 igg_R1.dedup.bam -480 1 igg_R1.dedup.bam -481 1 igg_R1.dedup.bam -482 1 igg_R1.dedup.bam -483 1 igg_R1.dedup.bam -484 2 igg_R1.dedup.bam -486 2 igg_R1.dedup.bam -488 1 igg_R1.dedup.bam -489 1 igg_R1.dedup.bam -490 2 igg_R1.dedup.bam -491 3 igg_R1.dedup.bam -492 1 igg_R1.dedup.bam -493 2 igg_R1.dedup.bam -494 1 igg_R1.dedup.bam -495 2 igg_R1.dedup.bam -498 2 igg_R1.dedup.bam -500 1 igg_R1.dedup.bam -501 1 igg_R1.dedup.bam -502 2 igg_R1.dedup.bam -503 1 igg_R1.dedup.bam -504 1 igg_R1.dedup.bam -505 2 igg_R1.dedup.bam -506 1 igg_R1.dedup.bam -509 3 igg_R1.dedup.bam -510 4 igg_R1.dedup.bam -512 2 igg_R1.dedup.bam -513 1 igg_R1.dedup.bam -514 3 igg_R1.dedup.bam -515 1 igg_R1.dedup.bam -516 1 igg_R1.dedup.bam -517 2 igg_R1.dedup.bam -518 2 igg_R1.dedup.bam -520 2 igg_R1.dedup.bam -521 3 igg_R1.dedup.bam -524 1 igg_R1.dedup.bam -526 2 igg_R1.dedup.bam -527 1 igg_R1.dedup.bam -528 1 igg_R1.dedup.bam -530 1 igg_R1.dedup.bam -531 1 igg_R1.dedup.bam -532 2 igg_R1.dedup.bam -533 1 igg_R1.dedup.bam -535 2 igg_R1.dedup.bam -536 1 igg_R1.dedup.bam -537 1 igg_R1.dedup.bam -538 5 igg_R1.dedup.bam -539 2 igg_R1.dedup.bam -540 2 igg_R1.dedup.bam -541 2 igg_R1.dedup.bam -542 2 igg_R1.dedup.bam -543 2 igg_R1.dedup.bam -544 1 igg_R1.dedup.bam -547 1 igg_R1.dedup.bam -548 5 igg_R1.dedup.bam -549 1 igg_R1.dedup.bam -551 1 igg_R1.dedup.bam -552 1 igg_R1.dedup.bam -554 2 igg_R1.dedup.bam -555 2 igg_R1.dedup.bam -556 1 igg_R1.dedup.bam -557 1 igg_R1.dedup.bam -558 1 igg_R1.dedup.bam -559 2 igg_R1.dedup.bam -560 4 igg_R1.dedup.bam -561 1 igg_R1.dedup.bam -562 1 igg_R1.dedup.bam -563 1 igg_R1.dedup.bam -566 2 igg_R1.dedup.bam -567 1 igg_R1.dedup.bam -568 1 igg_R1.dedup.bam -571 1 igg_R1.dedup.bam -575 2 igg_R1.dedup.bam -577 1 igg_R1.dedup.bam -578 3 igg_R1.dedup.bam -580 3 igg_R1.dedup.bam -582 2 igg_R1.dedup.bam -584 1 igg_R1.dedup.bam -585 3 igg_R1.dedup.bam -586 1 igg_R1.dedup.bam -587 2 igg_R1.dedup.bam -588 1 igg_R1.dedup.bam -590 2 igg_R1.dedup.bam -592 1 igg_R1.dedup.bam -595 1 igg_R1.dedup.bam -597 1 igg_R1.dedup.bam -598 2 igg_R1.dedup.bam -599 1 igg_R1.dedup.bam -601 1 igg_R1.dedup.bam -602 1 igg_R1.dedup.bam -603 1 igg_R1.dedup.bam -604 1 igg_R1.dedup.bam -606 1 igg_R1.dedup.bam -609 1 igg_R1.dedup.bam -610 1 igg_R1.dedup.bam -611 3 igg_R1.dedup.bam -615 2 igg_R1.dedup.bam -617 1 igg_R1.dedup.bam -619 2 igg_R1.dedup.bam -621 1 igg_R1.dedup.bam -622 2 igg_R1.dedup.bam -625 1 igg_R1.dedup.bam -626 3 igg_R1.dedup.bam -627 1 igg_R1.dedup.bam -629 1 igg_R1.dedup.bam -630 1 igg_R1.dedup.bam -631 1 igg_R1.dedup.bam -635 1 igg_R1.dedup.bam -636 2 igg_R1.dedup.bam -639 1 igg_R1.dedup.bam -640 1 igg_R1.dedup.bam -641 3 igg_R1.dedup.bam -642 1 igg_R1.dedup.bam -644 1 igg_R1.dedup.bam -645 2 igg_R1.dedup.bam -646 1 igg_R1.dedup.bam -647 2 igg_R1.dedup.bam -650 2 igg_R1.dedup.bam -653 1 igg_R1.dedup.bam -654 1 igg_R1.dedup.bam -656 2 igg_R1.dedup.bam -657 1 igg_R1.dedup.bam -658 1 igg_R1.dedup.bam -660 1 igg_R1.dedup.bam -661 1 igg_R1.dedup.bam -663 1 igg_R1.dedup.bam -664 2 igg_R1.dedup.bam -666 1 igg_R1.dedup.bam -668 1 igg_R1.dedup.bam -671 2 igg_R1.dedup.bam -673 2 igg_R1.dedup.bam -675 1 igg_R1.dedup.bam -676 1 igg_R1.dedup.bam -682 2 igg_R1.dedup.bam -683 1 igg_R1.dedup.bam -685 1 igg_R1.dedup.bam -689 1 igg_R1.dedup.bam -692 2 igg_R1.dedup.bam -694 1 igg_R1.dedup.bam -695 2 igg_R1.dedup.bam -696 1 igg_R1.dedup.bam -697 1 igg_R1.dedup.bam -698 3 igg_R1.dedup.bam -699 2 igg_R1.dedup.bam diff --git a/dev/docker/static_reports/test_data/igg_R2_raw.csv b/dev/docker/static_reports/test_data/igg_R2_raw.csv deleted file mode 100644 index 1fa3681a..00000000 --- a/dev/docker/static_reports/test_data/igg_R2_raw.csv +++ /dev/null @@ -1,508 +0,0 @@ -#bamPEFragmentSize -Size Occurrences Sample -26 1 igg_R2.dedup.bam -27 1 igg_R2.dedup.bam -29 1 igg_R2.dedup.bam -30 1 igg_R2.dedup.bam -35 1 igg_R2.dedup.bam -37 2 igg_R2.dedup.bam -40 1 igg_R2.dedup.bam -41 1 igg_R2.dedup.bam -42 1 igg_R2.dedup.bam -44 1 igg_R2.dedup.bam -45 1 igg_R2.dedup.bam -49 1 igg_R2.dedup.bam -50 2 igg_R2.dedup.bam -52 1 igg_R2.dedup.bam -54 3 igg_R2.dedup.bam -57 1 igg_R2.dedup.bam -58 4 igg_R2.dedup.bam -59 2 igg_R2.dedup.bam -61 1 igg_R2.dedup.bam -63 3 igg_R2.dedup.bam -64 4 igg_R2.dedup.bam -65 3 igg_R2.dedup.bam -66 3 igg_R2.dedup.bam -67 1 igg_R2.dedup.bam -68 1 igg_R2.dedup.bam -69 3 igg_R2.dedup.bam -70 2 igg_R2.dedup.bam -72 3 igg_R2.dedup.bam -73 2 igg_R2.dedup.bam -74 2 igg_R2.dedup.bam -75 7 igg_R2.dedup.bam -77 2 igg_R2.dedup.bam -78 3 igg_R2.dedup.bam -80 1 igg_R2.dedup.bam -81 1 igg_R2.dedup.bam -84 2 igg_R2.dedup.bam -85 5 igg_R2.dedup.bam -86 2 igg_R2.dedup.bam -87 2 igg_R2.dedup.bam -88 2 igg_R2.dedup.bam -89 3 igg_R2.dedup.bam -90 4 igg_R2.dedup.bam -91 1 igg_R2.dedup.bam -92 1 igg_R2.dedup.bam -93 2 igg_R2.dedup.bam -94 1 igg_R2.dedup.bam -95 2 igg_R2.dedup.bam -96 3 igg_R2.dedup.bam -97 2 igg_R2.dedup.bam -98 1 igg_R2.dedup.bam -99 2 igg_R2.dedup.bam -100 1 igg_R2.dedup.bam -101 1 igg_R2.dedup.bam -102 1 igg_R2.dedup.bam -104 2 igg_R2.dedup.bam -105 4 igg_R2.dedup.bam -106 2 igg_R2.dedup.bam -107 4 igg_R2.dedup.bam -108 3 igg_R2.dedup.bam -109 1 igg_R2.dedup.bam -110 1 igg_R2.dedup.bam -111 1 igg_R2.dedup.bam -112 1 igg_R2.dedup.bam -113 2 igg_R2.dedup.bam -114 2 igg_R2.dedup.bam -115 2 igg_R2.dedup.bam -116 1 igg_R2.dedup.bam -118 2 igg_R2.dedup.bam -120 1 igg_R2.dedup.bam -121 1 igg_R2.dedup.bam -122 3 igg_R2.dedup.bam -123 1 igg_R2.dedup.bam -124 2 igg_R2.dedup.bam -125 2 igg_R2.dedup.bam -126 1 igg_R2.dedup.bam -127 2 igg_R2.dedup.bam -128 1 igg_R2.dedup.bam -129 1 igg_R2.dedup.bam -131 1 igg_R2.dedup.bam -132 1 igg_R2.dedup.bam -134 2 igg_R2.dedup.bam -136 2 igg_R2.dedup.bam -137 1 igg_R2.dedup.bam -138 2 igg_R2.dedup.bam -140 1 igg_R2.dedup.bam -142 4 igg_R2.dedup.bam -143 1 igg_R2.dedup.bam -144 2 igg_R2.dedup.bam -145 3 igg_R2.dedup.bam -146 2 igg_R2.dedup.bam -147 1 igg_R2.dedup.bam -148 2 igg_R2.dedup.bam -149 4 igg_R2.dedup.bam -150 8 igg_R2.dedup.bam -151 4 igg_R2.dedup.bam -152 4 igg_R2.dedup.bam -153 4 igg_R2.dedup.bam -154 4 igg_R2.dedup.bam -155 3 igg_R2.dedup.bam -156 4 igg_R2.dedup.bam -158 4 igg_R2.dedup.bam -159 4 igg_R2.dedup.bam -160 2 igg_R2.dedup.bam -161 7 igg_R2.dedup.bam -162 1 igg_R2.dedup.bam -163 3 igg_R2.dedup.bam -164 9 igg_R2.dedup.bam -165 6 igg_R2.dedup.bam -166 10 igg_R2.dedup.bam -167 4 igg_R2.dedup.bam -168 8 igg_R2.dedup.bam -169 4 igg_R2.dedup.bam -170 5 igg_R2.dedup.bam -171 4 igg_R2.dedup.bam -172 7 igg_R2.dedup.bam -173 6 igg_R2.dedup.bam -174 6 igg_R2.dedup.bam -175 10 igg_R2.dedup.bam -176 20 igg_R2.dedup.bam -177 9 igg_R2.dedup.bam -178 12 igg_R2.dedup.bam -179 7 igg_R2.dedup.bam -180 9 igg_R2.dedup.bam -181 6 igg_R2.dedup.bam -182 8 igg_R2.dedup.bam -183 5 igg_R2.dedup.bam -184 7 igg_R2.dedup.bam -185 10 igg_R2.dedup.bam -186 17 igg_R2.dedup.bam -187 9 igg_R2.dedup.bam -188 6 igg_R2.dedup.bam -189 13 igg_R2.dedup.bam -190 13 igg_R2.dedup.bam -191 11 igg_R2.dedup.bam -192 9 igg_R2.dedup.bam -193 7 igg_R2.dedup.bam -194 3 igg_R2.dedup.bam -195 5 igg_R2.dedup.bam -196 14 igg_R2.dedup.bam -197 15 igg_R2.dedup.bam -198 8 igg_R2.dedup.bam -199 15 igg_R2.dedup.bam -200 7 igg_R2.dedup.bam -201 9 igg_R2.dedup.bam -202 6 igg_R2.dedup.bam -203 7 igg_R2.dedup.bam -204 13 igg_R2.dedup.bam -205 9 igg_R2.dedup.bam -206 4 igg_R2.dedup.bam -207 6 igg_R2.dedup.bam -208 10 igg_R2.dedup.bam -209 7 igg_R2.dedup.bam -210 4 igg_R2.dedup.bam -211 8 igg_R2.dedup.bam -212 5 igg_R2.dedup.bam -213 2 igg_R2.dedup.bam -214 9 igg_R2.dedup.bam -215 6 igg_R2.dedup.bam -216 8 igg_R2.dedup.bam -217 10 igg_R2.dedup.bam -218 12 igg_R2.dedup.bam -219 8 igg_R2.dedup.bam -220 11 igg_R2.dedup.bam -221 6 igg_R2.dedup.bam -222 9 igg_R2.dedup.bam -223 13 igg_R2.dedup.bam -224 5 igg_R2.dedup.bam -225 8 igg_R2.dedup.bam -226 3 igg_R2.dedup.bam -227 6 igg_R2.dedup.bam -228 4 igg_R2.dedup.bam -229 13 igg_R2.dedup.bam -230 3 igg_R2.dedup.bam -231 12 igg_R2.dedup.bam -232 8 igg_R2.dedup.bam -233 5 igg_R2.dedup.bam -234 8 igg_R2.dedup.bam -235 7 igg_R2.dedup.bam -236 8 igg_R2.dedup.bam -237 7 igg_R2.dedup.bam -238 5 igg_R2.dedup.bam -239 8 igg_R2.dedup.bam -240 9 igg_R2.dedup.bam -241 9 igg_R2.dedup.bam -242 6 igg_R2.dedup.bam -243 5 igg_R2.dedup.bam -244 8 igg_R2.dedup.bam -245 5 igg_R2.dedup.bam -246 10 igg_R2.dedup.bam -247 4 igg_R2.dedup.bam -248 9 igg_R2.dedup.bam -249 5 igg_R2.dedup.bam -250 1 igg_R2.dedup.bam -251 5 igg_R2.dedup.bam -252 6 igg_R2.dedup.bam -253 5 igg_R2.dedup.bam -254 4 igg_R2.dedup.bam -256 2 igg_R2.dedup.bam -257 6 igg_R2.dedup.bam -258 6 igg_R2.dedup.bam -259 3 igg_R2.dedup.bam -260 3 igg_R2.dedup.bam -261 4 igg_R2.dedup.bam -262 4 igg_R2.dedup.bam -263 3 igg_R2.dedup.bam -264 4 igg_R2.dedup.bam -265 3 igg_R2.dedup.bam -266 4 igg_R2.dedup.bam -267 2 igg_R2.dedup.bam -268 6 igg_R2.dedup.bam -269 1 igg_R2.dedup.bam -270 8 igg_R2.dedup.bam -271 1 igg_R2.dedup.bam -272 2 igg_R2.dedup.bam -273 8 igg_R2.dedup.bam -274 5 igg_R2.dedup.bam -275 1 igg_R2.dedup.bam -277 1 igg_R2.dedup.bam -278 1 igg_R2.dedup.bam -279 3 igg_R2.dedup.bam -280 1 igg_R2.dedup.bam -281 3 igg_R2.dedup.bam -282 3 igg_R2.dedup.bam -283 5 igg_R2.dedup.bam -284 5 igg_R2.dedup.bam -285 3 igg_R2.dedup.bam -286 1 igg_R2.dedup.bam -287 4 igg_R2.dedup.bam -288 2 igg_R2.dedup.bam -289 2 igg_R2.dedup.bam -290 3 igg_R2.dedup.bam -293 4 igg_R2.dedup.bam -294 2 igg_R2.dedup.bam -295 2 igg_R2.dedup.bam -296 1 igg_R2.dedup.bam -297 3 igg_R2.dedup.bam -298 3 igg_R2.dedup.bam -299 2 igg_R2.dedup.bam -300 2 igg_R2.dedup.bam -301 4 igg_R2.dedup.bam -302 2 igg_R2.dedup.bam -303 2 igg_R2.dedup.bam -304 4 igg_R2.dedup.bam -305 4 igg_R2.dedup.bam -306 3 igg_R2.dedup.bam -307 2 igg_R2.dedup.bam -308 1 igg_R2.dedup.bam -309 3 igg_R2.dedup.bam -310 3 igg_R2.dedup.bam -311 3 igg_R2.dedup.bam -312 2 igg_R2.dedup.bam -313 2 igg_R2.dedup.bam -314 6 igg_R2.dedup.bam -315 1 igg_R2.dedup.bam -316 5 igg_R2.dedup.bam -317 3 igg_R2.dedup.bam -318 1 igg_R2.dedup.bam -319 2 igg_R2.dedup.bam -320 1 igg_R2.dedup.bam -321 1 igg_R2.dedup.bam -322 2 igg_R2.dedup.bam -323 2 igg_R2.dedup.bam -324 3 igg_R2.dedup.bam -325 1 igg_R2.dedup.bam -326 2 igg_R2.dedup.bam -329 3 igg_R2.dedup.bam -330 4 igg_R2.dedup.bam -331 5 igg_R2.dedup.bam -332 3 igg_R2.dedup.bam -333 3 igg_R2.dedup.bam -334 2 igg_R2.dedup.bam -336 2 igg_R2.dedup.bam -337 1 igg_R2.dedup.bam -338 1 igg_R2.dedup.bam -339 2 igg_R2.dedup.bam -340 4 igg_R2.dedup.bam -341 2 igg_R2.dedup.bam -343 3 igg_R2.dedup.bam -344 2 igg_R2.dedup.bam -345 1 igg_R2.dedup.bam -346 3 igg_R2.dedup.bam -347 2 igg_R2.dedup.bam -348 4 igg_R2.dedup.bam -349 7 igg_R2.dedup.bam -350 4 igg_R2.dedup.bam -351 2 igg_R2.dedup.bam -352 1 igg_R2.dedup.bam -353 1 igg_R2.dedup.bam -354 2 igg_R2.dedup.bam -355 2 igg_R2.dedup.bam -357 2 igg_R2.dedup.bam -358 2 igg_R2.dedup.bam -359 1 igg_R2.dedup.bam -360 3 igg_R2.dedup.bam -362 1 igg_R2.dedup.bam -363 1 igg_R2.dedup.bam -364 4 igg_R2.dedup.bam -365 3 igg_R2.dedup.bam -366 4 igg_R2.dedup.bam -367 3 igg_R2.dedup.bam -368 6 igg_R2.dedup.bam -369 4 igg_R2.dedup.bam -370 3 igg_R2.dedup.bam -371 4 igg_R2.dedup.bam -372 3 igg_R2.dedup.bam -373 5 igg_R2.dedup.bam -374 2 igg_R2.dedup.bam -376 1 igg_R2.dedup.bam -378 2 igg_R2.dedup.bam -379 1 igg_R2.dedup.bam -380 4 igg_R2.dedup.bam -381 6 igg_R2.dedup.bam -382 1 igg_R2.dedup.bam -383 1 igg_R2.dedup.bam -384 2 igg_R2.dedup.bam -385 1 igg_R2.dedup.bam -386 2 igg_R2.dedup.bam -387 3 igg_R2.dedup.bam -388 1 igg_R2.dedup.bam -389 4 igg_R2.dedup.bam -390 3 igg_R2.dedup.bam -391 3 igg_R2.dedup.bam -392 3 igg_R2.dedup.bam -394 3 igg_R2.dedup.bam -395 2 igg_R2.dedup.bam -396 3 igg_R2.dedup.bam -397 3 igg_R2.dedup.bam -399 3 igg_R2.dedup.bam -400 3 igg_R2.dedup.bam -401 3 igg_R2.dedup.bam -402 1 igg_R2.dedup.bam -403 5 igg_R2.dedup.bam -404 5 igg_R2.dedup.bam -405 2 igg_R2.dedup.bam -407 2 igg_R2.dedup.bam -408 4 igg_R2.dedup.bam -409 1 igg_R2.dedup.bam -410 2 igg_R2.dedup.bam -411 5 igg_R2.dedup.bam -412 1 igg_R2.dedup.bam -414 3 igg_R2.dedup.bam -415 3 igg_R2.dedup.bam -416 2 igg_R2.dedup.bam -417 2 igg_R2.dedup.bam -418 2 igg_R2.dedup.bam -419 2 igg_R2.dedup.bam -420 3 igg_R2.dedup.bam -421 1 igg_R2.dedup.bam -423 1 igg_R2.dedup.bam -425 1 igg_R2.dedup.bam -426 3 igg_R2.dedup.bam -427 1 igg_R2.dedup.bam -428 5 igg_R2.dedup.bam -429 1 igg_R2.dedup.bam -430 2 igg_R2.dedup.bam -431 3 igg_R2.dedup.bam -432 1 igg_R2.dedup.bam -433 3 igg_R2.dedup.bam -435 1 igg_R2.dedup.bam -436 2 igg_R2.dedup.bam -437 2 igg_R2.dedup.bam -438 1 igg_R2.dedup.bam -439 1 igg_R2.dedup.bam -440 2 igg_R2.dedup.bam -441 4 igg_R2.dedup.bam -442 3 igg_R2.dedup.bam -443 1 igg_R2.dedup.bam -444 2 igg_R2.dedup.bam -446 1 igg_R2.dedup.bam -447 1 igg_R2.dedup.bam -449 2 igg_R2.dedup.bam -450 2 igg_R2.dedup.bam -453 4 igg_R2.dedup.bam -454 2 igg_R2.dedup.bam -455 1 igg_R2.dedup.bam -456 1 igg_R2.dedup.bam -457 3 igg_R2.dedup.bam -459 2 igg_R2.dedup.bam -461 2 igg_R2.dedup.bam -462 1 igg_R2.dedup.bam -463 3 igg_R2.dedup.bam -465 3 igg_R2.dedup.bam -466 2 igg_R2.dedup.bam -470 1 igg_R2.dedup.bam -473 4 igg_R2.dedup.bam -474 2 igg_R2.dedup.bam -476 2 igg_R2.dedup.bam -477 2 igg_R2.dedup.bam -481 2 igg_R2.dedup.bam -482 3 igg_R2.dedup.bam -484 2 igg_R2.dedup.bam -485 1 igg_R2.dedup.bam -486 2 igg_R2.dedup.bam -487 1 igg_R2.dedup.bam -488 1 igg_R2.dedup.bam -489 2 igg_R2.dedup.bam -490 1 igg_R2.dedup.bam -491 1 igg_R2.dedup.bam -492 2 igg_R2.dedup.bam -493 2 igg_R2.dedup.bam -494 2 igg_R2.dedup.bam -495 1 igg_R2.dedup.bam -499 1 igg_R2.dedup.bam -501 1 igg_R2.dedup.bam -502 1 igg_R2.dedup.bam -503 1 igg_R2.dedup.bam -505 2 igg_R2.dedup.bam -506 1 igg_R2.dedup.bam -508 1 igg_R2.dedup.bam -509 2 igg_R2.dedup.bam -511 1 igg_R2.dedup.bam -512 1 igg_R2.dedup.bam -513 3 igg_R2.dedup.bam -514 2 igg_R2.dedup.bam -515 2 igg_R2.dedup.bam -516 1 igg_R2.dedup.bam -517 1 igg_R2.dedup.bam -518 2 igg_R2.dedup.bam -519 2 igg_R2.dedup.bam -520 1 igg_R2.dedup.bam -523 1 igg_R2.dedup.bam -525 1 igg_R2.dedup.bam -527 1 igg_R2.dedup.bam -528 2 igg_R2.dedup.bam -529 2 igg_R2.dedup.bam -530 1 igg_R2.dedup.bam -534 1 igg_R2.dedup.bam -535 1 igg_R2.dedup.bam -536 3 igg_R2.dedup.bam -538 1 igg_R2.dedup.bam -539 2 igg_R2.dedup.bam -540 1 igg_R2.dedup.bam -541 1 igg_R2.dedup.bam -543 2 igg_R2.dedup.bam -544 1 igg_R2.dedup.bam -545 3 igg_R2.dedup.bam -548 1 igg_R2.dedup.bam -550 1 igg_R2.dedup.bam -552 2 igg_R2.dedup.bam -553 1 igg_R2.dedup.bam -555 1 igg_R2.dedup.bam -558 2 igg_R2.dedup.bam -559 2 igg_R2.dedup.bam -561 2 igg_R2.dedup.bam -563 1 igg_R2.dedup.bam -565 3 igg_R2.dedup.bam -567 2 igg_R2.dedup.bam -569 1 igg_R2.dedup.bam -570 1 igg_R2.dedup.bam -571 1 igg_R2.dedup.bam -574 1 igg_R2.dedup.bam -575 1 igg_R2.dedup.bam -576 1 igg_R2.dedup.bam -578 1 igg_R2.dedup.bam -579 1 igg_R2.dedup.bam -580 1 igg_R2.dedup.bam -581 1 igg_R2.dedup.bam -582 3 igg_R2.dedup.bam -584 1 igg_R2.dedup.bam -585 2 igg_R2.dedup.bam -587 1 igg_R2.dedup.bam -592 2 igg_R2.dedup.bam -594 1 igg_R2.dedup.bam -596 2 igg_R2.dedup.bam -598 1 igg_R2.dedup.bam -599 1 igg_R2.dedup.bam -600 1 igg_R2.dedup.bam -601 1 igg_R2.dedup.bam -603 1 igg_R2.dedup.bam -605 1 igg_R2.dedup.bam -607 1 igg_R2.dedup.bam -611 2 igg_R2.dedup.bam -612 1 igg_R2.dedup.bam -613 2 igg_R2.dedup.bam -615 1 igg_R2.dedup.bam -621 1 igg_R2.dedup.bam -622 1 igg_R2.dedup.bam -623 1 igg_R2.dedup.bam -627 2 igg_R2.dedup.bam -628 1 igg_R2.dedup.bam -629 1 igg_R2.dedup.bam -630 1 igg_R2.dedup.bam -634 1 igg_R2.dedup.bam -638 1 igg_R2.dedup.bam -640 1 igg_R2.dedup.bam -641 3 igg_R2.dedup.bam -650 1 igg_R2.dedup.bam -652 1 igg_R2.dedup.bam -655 1 igg_R2.dedup.bam -660 1 igg_R2.dedup.bam -662 1 igg_R2.dedup.bam -665 2 igg_R2.dedup.bam -670 4 igg_R2.dedup.bam -671 1 igg_R2.dedup.bam -673 1 igg_R2.dedup.bam -676 1 igg_R2.dedup.bam -678 1 igg_R2.dedup.bam -679 1 igg_R2.dedup.bam -680 1 igg_R2.dedup.bam -683 1 igg_R2.dedup.bam -685 1 igg_R2.dedup.bam -686 1 igg_R2.dedup.bam -691 1 igg_R2.dedup.bam -694 2 igg_R2.dedup.bam -696 1 igg_R2.dedup.bam -698 1 igg_R2.dedup.bam diff --git a/dev/docker/static_reports/test_data/meta_table.csv b/dev/docker/static_reports/test_data/meta_table.csv deleted file mode 100644 index d264545f..00000000 --- a/dev/docker/static_reports/test_data/meta_table.csv +++ /dev/null @@ -1,7 +0,0 @@ -id,group,replicate,single_end,bt2_total_reads_spikein,bt2_align1_spikein,bt2_align_gt1_spikein,bt2_non_aligned_spikein,bt2_total_aligned_spikein,bt2_total_reads_target,bt2_align1_target,bt2_align_gt1_target,bt2_non_aligned_target,bt2_total_aligned_target,scale_factor,dedup_library,dedup_unpaired_reads_examined,dedup_read_pairs_examined,dedup_secondary_or_supplementary_rds,dedup_unmapped_reads,dedup_unpaired_read_duplicates,dedup_read_pair_duplicates,dedup_read_pair_optical_duplicates,dedup_percent_duplication,dedup_estimated_library_size -h3k4me3_R2,h3k4me3,2,false,1725035,4093,113,1720829,4206,1725035,106331,62940,1555764,169271,2.3775558726,unknown library,0,169271,0,0,0,4037,0,0.023849,3492107 -h3k27me3_R2,h3k27me3,2,false,2535578,446,15,2535117,461,2535578,190258,181849,2163471,372107,21.6919739696,unknown library,0,372107,0,0,0,4051,0,0.010887,16965792 -h3k4me3_R1,h3k4me3,1,false,1511072,340,7,1510725,347,1511072,87991,32964,1390117,120955,28.8184438040,unknown library,0,120955,0,0,0,7628,0,0.063065,918217 -igg_R2,igg,2,false,1113563,40122,1160,1072281,41282,1113563,62155,71755,979653,133910,0.2422363258,unknown library,0,133910,0,0,0,39588,0,0.295631,179210 -h3k27me3_R1,h3k27me3,1,false,2860575,210,10,2860355,220,2860575,208496,170330,2481749,378826,45.4545454545,unknown library,0,378826,0,0,0,16244,0,0.04288,4290097 -igg_R1,igg,1,false,2056442,75440,2061,1978941,77501,2056442,122953,125243,1808246,248196,0.1290305932,unknown library,0,248196,0,0,0,62615,0,0.25228,405129 diff --git a/modules/local/generate_reports.nf b/modules/local/generate_reports.nf index 9e3f5834..135300a4 100644 --- a/modules/local/generate_reports.nf +++ b/modules/local/generate_reports.nf @@ -29,10 +29,10 @@ process GENERATE_REPORTS { script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ """ - reporting.py genimg \\ + reporting.py gen_reports \\ --meta $meta_data \\ --raw_frag "*.frag_len.txt" \\ - --bed_frag "*bin500.awk.bed" \\ + --bin_frag "*bin500.awk.bed" \\ --seacr_bed "*bed.*.bed" \\ --bams "*.bam" \\ --output . \\ diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 02a2d47a..a086ef54 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -730,11 +730,11 @@ workflow CUTANDRUN { * MODULE: Generate python reporting using mixture of meta-data and direct file processing */ GENERATE_REPORTS( - EXPORT_META.out.csv, - SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, - AWK_FRAG_BIN.out.file.collect{it[1]}, - ch_seacr_bed.collect{it[1]}, - SAMTOOLS_SORT.out.bam.collect{it[1]} + EXPORT_META.out.csv, // meta-data report stats + SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments + AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments + ch_seacr_bed.collect{it[1]}, // peak beds + SAMTOOLS_SORT.out.bam.collect{it[1]} // bam files sorted by mate pair ids ) ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) From 20c8026321454b751ceed6637ee41974c24dfbf4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 21 May 2021 11:24:22 +0100 Subject: [PATCH 211/675] Include dummy files --- .gitignore | 6 ++++-- dev/docker/static_reports/test_data/_dummy.txt | 0 dev/docker/static_reports/test_output/_dummy.txt | 0 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 dev/docker/static_reports/test_data/_dummy.txt create mode 100644 dev/docker/static_reports/test_output/_dummy.txt diff --git a/.gitignore b/.gitignore index 87be124e..815cd078 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,7 @@ testing* R_sessionInfo.log -dev/docker/static_reports/test_data/ -dev/docker/static_reports/test_output/ +dev/docker/static_reports/test_data/* +dev/docker/static_reports/test_output/* +!dev/docker/static_reports/test_data/_dummy.txt +!dev/docker/static_reports/test_output/_dummy.txt diff --git a/dev/docker/static_reports/test_data/_dummy.txt b/dev/docker/static_reports/test_data/_dummy.txt new file mode 100644 index 00000000..e69de29b diff --git a/dev/docker/static_reports/test_output/_dummy.txt b/dev/docker/static_reports/test_output/_dummy.txt new file mode 100644 index 00000000..e69de29b From df9c5ce35ca72d007394580bfa8f1553b327959b Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 21 May 2021 15:41:47 +0100 Subject: [PATCH 212/675] change param type from string to boolean --- nextflow_schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 374819f5..95fc5b36 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -332,10 +332,10 @@ "type": "boolean" }, "skip_markduplicates": { - "type": "string" + "type": "boolean" }, "skip_removeduplicates": { - "type": "string" + "type": "boolean" }, "dedup_target_reads": { "type": "string" From 90cdfca760fd84bca8e972625c590fd6bc56dc78 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 21 May 2021 15:58:20 +0100 Subject: [PATCH 213/675] reorganising results folder with new module configs --- conf/modules.config | 294 +++++++++++++++++++++++++++++++++-------- workflows/cutandrun.nf | 99 ++++++++++---- 2 files changed, 306 insertions(+), 87 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index af8b49b2..d83a82ce 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -56,65 +56,108 @@ params { args = "--fastqc" publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] } - 'bowtie2_align' { - args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" - suffix = ".target" - publish_dir = "aligner/${params.aligner}/intermediate/" - publish_files = [:] - } + // 'bowtie2_align' { + // args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" + // suffix = ".target" + // publish_dir = "aligner/${params.aligner}/intermediate/" + // publish_files = ['txt':''] + // } + + // 'bowtie2_align' { + // args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" + // suffix = ".target" + // publish_dir = '' + // publish_files = [:] + // } 'bowtie2_spikein_align' { args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" suffix = ".spikein" - publish_dir = "aligner/${params.aligner}/intermediate/spikein" - publish_files = [:] - } - 'samtools_sort' { - suffix = ".target.sorted" - publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/target" - } + publish_dir = "aligner/${params.aligner}/spikein" + publish_files = ['bam':''] + } + // 'samtools_sort' { + // suffix = ".target.sorted" + // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + // publish_dir = "${params.aligner}/target" + // } + // 'samtools_sort' { + // suffix = ".target.sorted" + // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + // publish_dir = '' + // publish_files = [:] + // } 'samtools_spikein_sort' { suffix = ".spikein.sorted" - publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/spikein" - } - - 'samtools_view_qfilter' { - args = '-q 0 -b' - suffix = ".filtered" - publish_files = false - publish_dir = "${params.aligner}/target" - } - 'samtools_qfilter' { - suffix = ".filtered" - publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/target" - } - - 'picard_markduplicates' { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".markdup" - publish_files = ['bam': 'picard_markdup', 'metrics.txt':'picard_metrics'] - publish_dir = "${params.aligner}/target" - } - 'picard_markduplicates_samtools' { - suffix = ".markdup.sorted" - publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/target" - } - - 'picard_dedup' { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".dedup" - publish_files = ['bam': '', 'metrics.txt':'picard_metrics'] - publish_dir = "${params.aligner}/target" - } - 'picard_dedup_samtools' { - suffix = ".dedup.sorted" - publish_files = ['bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "${params.aligner}/target" + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}/spikein" } + // 'samtools_view_qfilter' { + // args = '-q 0 -b' + // suffix = ".filtered" + // publish_files = ['txt':''] + // publish_dir = "${params.aligner}/target" + // } + // 'samtools_view_qfilter' { + // args = '-q 0 -b' + // suffix = ".filtered" + // publish_files = [:] + // publish_dir = '' + // } + // 'samtools_qfilter' { + // suffix = ".filtered" + // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + // publish_dir = "${params.aligner}/target" + // } + // 'samtools_qfilter' { + // suffix = ".filtered" + // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + // publish_dir = "${params.aligner}/target" + // } + // 'picard_markduplicates' { + // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + // suffix = ".markdup" + // publish_files = ['bam': 'picard_markdup', 'metrics.txt':'picard_metrics'] + // publish_dir = "${params.aligner}/target" + // } + // 'picard_markduplicates' { + // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + // suffix = ".markdup" + // publish_files = [:] + // publish_dir = '' + // } + // 'picard_markduplicates_samtools' { + // suffix = ".markdup.sorted" + // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + // publish_dir = "${params.aligner}/target" + // } + // 'picard_markduplicates_samtools' { + // suffix = ".markdup.sorted" + // publish_files = [:] + // publish_dir = '' + // } + // 'picard_dedup' { + // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + // suffix = ".dedup" + // publish_files = ['bam': '', 'metrics.txt':'picard_metrics'] + // publish_dir = "${params.aligner}/target" + // } + // 'picard_dedup' { + // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + // suffix = ".dedup" + // publish_files = [:] + // publish_dir = '' + // } + // 'picard_dedup_samtools' { + // suffix = ".dedup.sorted" + // publish_files = ['bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + // publish_dir = "${params.aligner}/target" + // } + // 'picard_dedup_samtools' { + // suffix = ".dedup.sorted" + // publish_files = [:] + // publish_dir = '' + // } 'awk_bt2' { args = "" suffix = ".target" @@ -143,7 +186,7 @@ params { publish_files = false } 'ucsc_bedgraphtobigwig' { - publish_dir = "${params.aligner}/bigwig" + publish_dir = "ucsc/bedgraphtobigwig" } 'deeptools_fragmentsize' { publish_dir = "deeptools" @@ -256,11 +299,146 @@ params { publish_files = false } + // 'samtools_sort' { + // args = "-n" + // publish_dir = "" + // suffix = ".sorted" + // publish_files = ['txt':''] + // } + + /* + ======================================================================================== + ALIGNMENT STUFF + ======================================================================================== + */ + // ALIGN BT2 + 'bowtie2_align' { + args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" + suffix = ".target" + publish_dir = '' + publish_files = [:] + } + 'bowtie2_align_intermed' { + args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" + suffix = ".target" + publish_dir = "aligner/${params.aligner}/intermediate" + publish_files = ['bam':''] + } 'samtools_sort' { - args = "-n" - publish_dir = "" - suffix = ".sorted" - publish_files = false - } + suffix = ".target.sorted" + publish_dir = '' + publish_files = [:] + + } + 'samtools_sort_intermed' { + suffix = ".target.sorted" + publish_dir = "aligner/${params.aligner}/intermediate" + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + } + + // SAMTOOLS Q FILTER + 'samtools_view_qfilter' { + args = '-q 0 -b' + suffix = ".filtered" + publish_files = [:] + publish_dir = '' + } + 'samtools_view_qfilter_intermed' { + args = '-q 0 -b' + suffix = ".filtered" + publish_files = ['bam':''] + publish_dir = "aligner/${params.aligner}/intermediate" + } + 'samtools_view_qfilter_final' { + args = '-q 0 -b' + suffix = ".filtered" + publish_files = ['bam':'b'] + publish_dir = "aligner/${params.aligner}" + } + 'samtools_qfilter' { + suffix = ".filtered" + publish_files = [:] + publish_dir = '' + } + 'samtools_qfilter_intermed' { + suffix = ".filtered" + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}/intermediate" + } + 'samtools_qfilter_final' { + suffix = ".filtered" + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}" + } + + // MARK DUPS + 'picard_markduplicates' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".markdup" + publish_files = [:] + publish_dir = '' + } + 'picard_markduplicates_intermed' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".markdup" + publish_files = ['metrics.txt':'picard_metrics'] + publish_dir = "aligner/${params.aligner}/intermediate" + } + 'picard_markduplicates_final' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".markdup" + publish_files = ['metrics.txt':'picard_metrics'] + publish_dir = "aligner/${params.aligner}" + } + 'picard_markduplicates_samtools' { + suffix = ".markdup.sorted" + publish_files = [:] + publish_dir = '' + } + 'picard_markduplicates_samtools_intermed' { + suffix = ".markdup.sorted" + publish_files = ['bam':'','bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}/intermediate" + } + 'picard_markduplicates_samtools_final' { + suffix = ".markdup.sorted" + publish_files = ['bam':'','bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}" + } + + // DEDUP + 'picard_dedup' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".dedup" + publish_files = [:] + publish_dir = '' + } + 'picard_dedup_intermed' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".dedup" + publish_files = ['metrics.txt':'picard_metrics'] + publish_dir = "aligner/${params.aligner}/intermediate" + } + 'picard_dedup_final' { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".dedup" + publish_files = ['metrics.txt':'picard_metrics'] + publish_dir = "aligner/${params.aligner}" + } + 'picard_dedup_samtools' { + suffix = ".dedup.sorted" + publish_files = [:] + publish_dir = '' + } + 'picard_dedup_samtools_intermed' { + suffix = ".dedup.sorted" + publish_files = ['bam': '', 'bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}/intermediate" + } + 'picard_dedup_samtools_final' { + suffix = ".dedup.sorted" + publish_files = ['bam': '', 'bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}" + } } } diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 02a2d47a..95aebf11 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -77,41 +77,82 @@ if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } // Alignment dedup and filtering def prepareToolIndices = ['bowtie2'] -def bowtie2_align_options = modules['bowtie2_align'] def bowtie2_spikein_align_options = modules['bowtie2_spikein_align'] +def samtools_spikein_sort_options = modules['samtools_spikein_sort'] +def dedup_control_only = true +if(params.dedup_target_reads) { dedup_control_only = false } + +def bowtie2_align_options = null +def samtools_sort_options = null +def samtools_view_options = null +def samtools_qfilter_options = null +def picard_markduplicates_options = null +def picard_markduplicates_samtools_options = null +def picard_deduplicates_options = null +def picard_deduplicates_samtools_options = null + +if (!params.skip_markduplicates && params.skip_removeduplicates) { + picard_markduplicates_options = modules['picard_markduplicates_final'] + picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_final'] + if (params.publish_align_intermed) { + bowtie2_align_options = modules['bowtie2_align_intermed'] + samtools_sort_options = modules['samtools_sort_intermed'] + samtools_view_options = modules['samtools_view_qfilter_intermed'] + samtools_qfilter_options = modules['samtools_qfilter_intermed'] + picard_deduplicates_options = modules['picard_dedup_intermed'] + picard_deduplicates_samtools_options = modules['picard_dedup_samtools_intermed'] + } else { + bowtie2_align_options = modules['bowtie2_align'] + samtools_sort_options = modules['samtools_sort'] + samtools_view_options = modules['samtools_view_qfilter'] + samtools_qfilter_options = modules['samtools_qfilter'] + picard_deduplicates_options = modules['picard_dedup'] + picard_deduplicates_samtools_options = modules['picard_dedup_samtools'] + } +} else if (!params.skip_markduplicates && !params.skip_removeduplicates) { + picard_deduplicates_options = modules['picard_dedup_final'] + picard_deduplicates_samtools_options = modules['picard_dedup_samtools_final'] + if (params.publish_align_intermed) { + bowtie2_align_options = modules['bowtie2_align_intermed'] + samtools_sort_options = modules['samtools_sort_intermed'] + samtools_view_options = modules['samtools_view_qfilter_intermed'] + samtools_qfilter_options = modules['samtools_qfilter_intermed'] + picard_markduplicates_options = modules['picard_markduplicates_intermed'] + picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_intermed'] + } else { + bowtie2_align_options = modules['bowtie2_align'] + samtools_sort_options = modules['samtools_sort'] + samtools_view_options = modules['samtools_view_qfilter'] + samtools_qfilter_options = modules['samtools_qfilter'] + picard_markduplicates_options = modules['picard_markduplicates'] + picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] + } +} else { + samtools_view_options = modules['samtools_view_qfilter_final'] + samtools_qfilter_options = modules['samtools_qfilter_final'] + if (params.publish_align_intermed ) { + bowtie2_align_options = modules['bowtie2_align_intermed'] + samtools_sort_options = modules['samtools_sort_intermed'] + picard_markduplicates_options = modules['picard_markduplicates_intermed'] + picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_intermed'] + picard_deduplicates_options = modules['picard_dedup_intermed'] + picard_deduplicates_samtools_options = modules['picard_dedup_samtools_intermed'] + } else { + bowtie2_align_options = modules['bowtie2_align'] + samtools_sort_options = modules['samtools_sort'] + picard_markduplicates_options = modules['picard_markduplicates'] + picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] + picard_deduplicates_options = modules['picard_dedup'] + picard_deduplicates_samtools_options = modules['picard_dedup_samtools'] + } +} if (params.save_unaligned) { bowtie2_align_options.publish_files.put('.gz','') } if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put('.gz','') } -if (params.publish_align_intermed) { bowtie2_align_options.publish_files.put('.bam','') } -if (params.publish_align_intermed) { bowtie2_spikein_align_options.publish_files.put('.bam','') } -def samtools_sort_options = modules['samtools_sort'] -def samtools_spikein_sort_options = modules['samtools_spikein_sort'] -if (params.publish_align_intermed || params.skip_markduplicates) { - samtools_sort_options.publish_files.put('bam','') - samtools_sort_options.publish_files.put('bai','') - samtools_spikein_sort_options.publish_files.put('bam','') - samtools_spikein_sort_options.publish_files.put('bai','') -} - -def samtools_view_options = modules['samtools_view_qfilter'] -def samtools_qfilter_options = modules['samtools_qfilter'] if (params.minimum_alignment_q_score > 0) { samtools_view_options.args = "-b -q " + params.minimum_alignment_q_score } -if (params.publish_align_intermed) { - samtools_view_options.publish_files = ['bam':''] - samtools_qfilter_options.publish_files.put('bai','') -} - -def picard_markduplicates_options = modules['picard_markduplicates'] -def picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] -if (params.publish_align_intermed) { - picard_markduplicates_options.publish_files.put('bam','') - picard_markduplicates_samtools_options.publish_files.put('bai','') -} -def dedup_control_only = true -if(params.dedup_target_reads) { dedup_control_only = false } // Meta annotation options def awk_bt2_options = modules['awk_bt2'] @@ -205,7 +246,7 @@ include { UCSC_BEDCLIP } from '../mo */ include { FASTQC_TRIMGALORE } from '../subworkflows/nf-core/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) include { MARK_DUPLICATES_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: modules['picard_dedup'], samtools_options: modules['picard_dedup_samtools'], control_only: dedup_control_only ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) /* ======================================================================================== @@ -723,7 +764,7 @@ workflow CUTANDRUN { * MODULE: Export meta-data to csv file */ EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty([]) + ch_samtools_bam.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) ) /* From 9855519063f2da9700a4f0e510b509b2848e77a7 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Fri, 21 May 2021 17:04:30 +0100 Subject: [PATCH 214/675] remove untar process as its now in nf-core modules --- modules/local/untar.nf | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 modules/local/untar.nf diff --git a/modules/local/untar.nf b/modules/local/untar.nf deleted file mode 100644 index bb953287..00000000 --- a/modules/local/untar.nf +++ /dev/null @@ -1,34 +0,0 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -def options = initOptions(params.options) - -process UNTAR { - tag "$archive" - label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" - } else { - container "biocontainers/biocontainers:v1.2.0_cv1" - } - - input: - path archive - - output: - path "$untar" , emit: untar - path "*.version.txt", emit: version - - script: - def software = getSoftwareName(task.process) - untar = archive.toString() - '.tar.gz' - """ - tar -xzvf $options.args $archive - echo \$(tar --version 2>&1) | sed 's/^.*(GNU tar) //; s/ Copyright.*\$//' > ${software}.version.txt - """ -} From 66e22063390e74b00c7bd5b2346d5d6aec30afdf Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 11:55:44 +0100 Subject: [PATCH 215/675] new results folder structure, still needs cleaning up --- conf/modules.config | 40 +++++++++++++++---------------- workflows/cutandrun.nf | 53 ++++++++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 45 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d83a82ce..d5f43e16 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -178,7 +178,7 @@ params { } 'seacr' { args = "non stringent" - suffix = ".bed" + suffix = ".peaks.bed" publish_dir = "seacr" } 'ucsc_bedclip' { @@ -201,7 +201,7 @@ params { } 'awk_dedup' { args = "" - suffix = ".dedup" + suffix = ".awk" publish_dir = "" command = "'/^[^#]/{print}'" command2 = "| head -2 | sed 's/\\t/,/g' - | sed 's/.*/\\L&/g' -" @@ -352,7 +352,7 @@ params { 'samtools_view_qfilter_final' { args = '-q 0 -b' suffix = ".filtered" - publish_files = ['bam':'b'] + publish_files = ['bam':''] publish_dir = "aligner/${params.aligner}" } 'samtools_qfilter' { @@ -381,13 +381,13 @@ params { 'picard_markduplicates_intermed' { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".markdup" - publish_files = ['metrics.txt':'picard_metrics'] + publish_files = ['bam':'','metrics.txt':'picard_metrics'] publish_dir = "aligner/${params.aligner}/intermediate" } 'picard_markduplicates_final' { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".markdup" - publish_files = ['metrics.txt':'picard_metrics'] + publish_files = ['bam':'','metrics.txt':'picard_metrics'] publish_dir = "aligner/${params.aligner}" } 'picard_markduplicates_samtools' { @@ -397,12 +397,12 @@ params { } 'picard_markduplicates_samtools_intermed' { suffix = ".markdup.sorted" - publish_files = ['bam':'','bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "aligner/${params.aligner}/intermediate" } 'picard_markduplicates_samtools_final' { suffix = ".markdup.sorted" - publish_files = ['bam':'','bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "aligner/${params.aligner}" } @@ -416,15 +416,15 @@ params { 'picard_dedup_intermed' { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".dedup" - publish_files = ['metrics.txt':'picard_metrics'] + publish_files = ['bam':'','metrics.txt':'picard_metrics'] publish_dir = "aligner/${params.aligner}/intermediate" } - 'picard_dedup_final' { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".dedup" - publish_files = ['metrics.txt':'picard_metrics'] - publish_dir = "aligner/${params.aligner}" - } + // 'picard_dedup_final' { + // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + // suffix = ".dedup" + // publish_files = ['bam':'','metrics.txt':'picard_metrics'] + // publish_dir = "aligner/${params.aligner}" + // } 'picard_dedup_samtools' { suffix = ".dedup.sorted" publish_files = [:] @@ -432,13 +432,13 @@ params { } 'picard_dedup_samtools_intermed' { suffix = ".dedup.sorted" - publish_files = ['bam': '', 'bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "aligner/${params.aligner}/intermediate" } - 'picard_dedup_samtools_final' { - suffix = ".dedup.sorted" - publish_files = ['bam': '', 'bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "aligner/${params.aligner}" - } + // 'picard_dedup_samtools_final' { + // suffix = ".dedup.sorted" + // publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + // publish_dir = "aligner/${params.aligner}" + // } } } diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index cfeff7bd..8423e97e 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -91,7 +91,8 @@ def picard_markduplicates_samtools_options = null def picard_deduplicates_options = null def picard_deduplicates_samtools_options = null -if (!params.skip_markduplicates && params.skip_removeduplicates) { +// if (!params.skip_markduplicates && params.skip_removeduplicates) { +if (!params.skip_markduplicates) { picard_markduplicates_options = modules['picard_markduplicates_final'] picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_final'] if (params.publish_align_intermed) { @@ -109,24 +110,24 @@ if (!params.skip_markduplicates && params.skip_removeduplicates) { picard_deduplicates_options = modules['picard_dedup'] picard_deduplicates_samtools_options = modules['picard_dedup_samtools'] } -} else if (!params.skip_markduplicates && !params.skip_removeduplicates) { - picard_deduplicates_options = modules['picard_dedup_final'] - picard_deduplicates_samtools_options = modules['picard_dedup_samtools_final'] - if (params.publish_align_intermed) { - bowtie2_align_options = modules['bowtie2_align_intermed'] - samtools_sort_options = modules['samtools_sort_intermed'] - samtools_view_options = modules['samtools_view_qfilter_intermed'] - samtools_qfilter_options = modules['samtools_qfilter_intermed'] - picard_markduplicates_options = modules['picard_markduplicates_intermed'] - picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_intermed'] - } else { - bowtie2_align_options = modules['bowtie2_align'] - samtools_sort_options = modules['samtools_sort'] - samtools_view_options = modules['samtools_view_qfilter'] - samtools_qfilter_options = modules['samtools_qfilter'] - picard_markduplicates_options = modules['picard_markduplicates'] - picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] - } +// } else if (!params.skip_markduplicates && !params.skip_removeduplicates) { +// picard_deduplicates_options = modules['picard_dedup_final'] +// picard_deduplicates_samtools_options = modules['picard_dedup_samtools_final'] +// if (params.publish_align_intermed) { +// bowtie2_align_options = modules['bowtie2_align_intermed'] +// samtools_sort_options = modules['samtools_sort_intermed'] +// samtools_view_options = modules['samtools_view_qfilter_intermed'] +// samtools_qfilter_options = modules['samtools_qfilter_intermed'] +// picard_markduplicates_options = modules['picard_markduplicates_intermed'] +// picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_intermed'] +// } else { +// bowtie2_align_options = modules['bowtie2_align'] +// samtools_sort_options = modules['samtools_sort'] +// samtools_view_options = modules['samtools_view_qfilter'] +// samtools_qfilter_options = modules['samtools_qfilter'] +// picard_markduplicates_options = modules['picard_markduplicates'] +// picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] +// } } else { samtools_view_options = modules['samtools_view_qfilter_final'] samtools_qfilter_options = modules['samtools_qfilter_final'] @@ -721,12 +722,14 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Annotate meta-data with duplication stats */ - ANNOTATE_DEDUP_META( - ch_samtools_bam, - ch_markduplicates_multiqc, - ch_dummy_file.collect() - ) - ch_samtools_bam = ANNOTATE_DEDUP_META.out.output + if (!params.skip_markduplicates) { + ANNOTATE_DEDUP_META( + ch_samtools_bam, + ch_markduplicates_multiqc, + ch_dummy_file.collect() + ) + ch_samtools_bam = ANNOTATE_DEDUP_META.out.output + } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, From 8a1a04a845b4fcec7db1ad276c3ac7d57bd4f5bf Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 12:12:08 +0100 Subject: [PATCH 216/675] cleanup and fix use-case for no duplication info --- bin/lib/reports.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index e80592c3..325de2bd 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -57,6 +57,9 @@ def format_thousands(self, x, pos): def load_data(self): # ---------- Data - data_table --------- # self.data_table = pd.read_csv(self.meta_path, sep=',') + self.duplicate_info = False + if 'dedup_percent_duplication' in self.data_table.columns: + self.duplicate_info = True # ---------- Data - Raw frag histogram --------- # # Create list of deeptools raw fragment files @@ -65,7 +68,6 @@ def load_data(self): for i in list(range(len(dt_frag_list))): # create dataframe from csv file for each file and save to a list dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', header=None, names=['Size','Occurrences']) - # print(dt_frag_i.shape[0]) frag_base_i = os.path.basename(dt_frag_list[i]) sample_id = frag_base_i.split(".")[0] [group_i,rep_i] = sample_id.split("_") @@ -111,6 +113,7 @@ def load_data(self): if i==0: self.frag_bin500 = dt_bin_frag_i + else: self.frag_bin500 = pd.merge(self.frag_bin500, dt_bin_frag_i, on=['chrom','bin'], how='outer') @@ -205,10 +208,7 @@ def pe_bam_to_df(bam_path): for bam in bam_list: - # bam_now = pr.read_bam(bam, as_df=True, filter_flag=0) # no frags filtered - # print(bam_now) bam_now = pe_bam_to_df(bam) - # print(bam_now.head(10)) self.bam_df_list.append(bam_now) bam_base = os.path.basename(bam) sample_id = bam_base.split(".")[0] @@ -345,9 +345,10 @@ def generate_plots(self): data["alignment_summary"] = data1 # Plot 2 - plot2, data2 = self.duplication_summary() - plots["duplication_summary"] = plot2 - data["duplication_summary"] = data2 + if self.duplicate_info == True: + plot2, data2 = self.duplication_summary() + plots["duplication_summary"] = plot2 + data["duplication_summary"] = data2 # Plot 3 plot3, data3 = self.fraglen_summary_violin() @@ -532,9 +533,8 @@ def alignment_summary_ex(self): def replicate_heatmap(self): fig, ax = plt.subplots() plot_data = self.frag_bin500[self.frag_bin500.columns[-(len(self.frag_bin500.columns)-2):]] - plot_data = plot_data.fillna(0) - # print(plot_data.head(15)) - corr_mat = plot_data.corr() + # plot_data = plot_data.fillna(0) + corr_mat = plot_data.corr(method='pearson') ax = sns.heatmap(corr_mat, annot=True) fig.suptitle("Replicate Reproducibility") From 1855bc9b0b8d74447e3c700cf179ef9a8f29e066 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 16:08:20 +0100 Subject: [PATCH 217/675] add deseq2 module config --- conf/modules.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index d5f43e16..c305390a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -56,6 +56,9 @@ params { args = "--fastqc" publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] } + 'deseq2' { + publish_dir = "deseq2" + } // 'bowtie2_align' { // args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" // suffix = ".target" From aa327afc67519339624c7829094866bcee01642e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 16:34:58 +0100 Subject: [PATCH 218/675] first pass of output doc without images --- docs/output.md | 238 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 217 insertions(+), 21 deletions(-) diff --git a/docs/output.md b/docs/output.md index 29ca1a52..de9fc422 100644 --- a/docs/output.md +++ b/docs/output.md @@ -2,18 +2,17 @@ ## Introduction -This document describes the output produced by the pipeline. Most of the plots are taken from the MultiQC report, which summarises results at the end of the pipeline. +This document describes the output produced by the pipeline. Plots are taken from the python report which details summary details and analyses specific to CUT&Run/CUT&Tag data, and MultiQC report, which summarises results from tools used, at the end of the pipeline. The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. - - ## Pipeline overview The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: * [Preprocessing](#preprocessing) + * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids * [cat](#cat) - Merge re-sequenced FastQ files * [FastQC](#fastqc) - Raw read QC * [TrimGalore](#trimgalore) - Adapter and quality trimming @@ -29,28 +28,202 @@ and processes data using the following steps: * [SEACR](#seacr) - Peak calling for high signal-noise data * [Summary and quality control](#summary-and-quality-control) * [DESeq2](#deseq2) - PCA plot and differential peak analysis + * [Python report](#python-report) * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similiarity - * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes + * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes +* [Workflow reporting and genomes](#workflow-reporting-and-genomes) + * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files + * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution - +## Preprocessing -## FastQC +### ENA FTP -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. +
+Output files -For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). +* `public_data/` + * `samplesheet.csv`: Auto-created samplesheet that can be used to run the pipeline. + * `*.fastq.gz`: Paired-end/single-end reads downloaded from the ENA / SRA. +* `public_data/md5/` + * `*.md5`: Files containing `md5` sum for FastQ files downloaded from the ENA / SRA. +* `public_data/runinfo/` + * `*.runinfo.tsv`: Original metadata file downloaded from the ENA + * `*.runinfo_ftp.tsv`: Re-formatted metadata file downloaded from the ENA -**Output files:** +
+ +Please see the [usage documentation](https://nf-co.re/cutandrun/usage#direct-download-of-public-repository-data) for a list of supported public repository identifiers and how to provide them to the pipeline. The final sample information for all identifiers is obtained from the ENA which provides direct download links for FastQ files as well as their associated md5sums. If download links exist, the files will be downloaded in parallel by FTP otherwise they will NOT be downloaded. This is intentional because the tools such as `parallel-fastq-dump`, `fasterq-dump`, `prefetch` etc require pre-existing configuration files in the users home directory which makes automation tricky across different platforms and containerisation. + +### cat + +
+Output files + +* `fastq/` + * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory. + +
+ +If multiple libraries/runs have been provided for the same sample in the input samplesheet (e.g. to increase sequencing depth) then these will be merged at the very beginning of the pipeline in order to have consistent sample naming throughout the pipeline. Please refer to the [usage documentation](https://nf-co.re/rnaseq/usage#samplesheet-input) to see how to specify these samples in the input samplesheet. + +### FastQC + +
+Output files * `fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics for your untrimmed raw fastq files. -* `fastqc/zips/` - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + * `*_fastqc.html`: FastQC report containing quality metrics. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + +> **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `trimgalore/fastqc/` directory. + +
+ +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). + + + +### TrimGalore + +
+Output files + +* `trimgalore/` + * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. + * `*_trimming_report.txt`: Log file generated by Trim Galore!. +* `trimgalore/fastqc/` + * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + +
+ +[Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) is a wrapper tool around Cutadapt and FastQC to peform quality and adapter trimming on FastQ files. By default, Trim Galore! will automatically detect and trim the appropriate adapter sequence. + +> **NB:** TrimGalore! will only run using multiple cores if you are able to use more than > 5 and > 6 CPUs for single- and paired-end data, respectively. The total cores available to TrimGalore! will also be capped at 4 (7 and 8 CPUs in total for single- and paired-end data, respectively) because there is no longer a run-time benefit. See [release notes](https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019) and [discussion whilst adding this logic to the nf-core/atacseq pipeline](https://github.com/nf-core/atacseq/pull/65). + + + +## Alignment + +### Bowtie 2 + +
+Output files + +* `aligner/bowtie2/intermediate/` + * `.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. + * `.bam.bai`: BAI file for BAM. +* `aligner/bowtie2/intermediate/samtools_stats` + * `.bam.*stats`: various statistics regarding the BAM files. +* `aligner/bowtie2/spikein/` + * `.bam`: BAM file of reads aligned to the spike-in genome + * `.bam.bai`: BAI file for spike-in BAM. +* `aligner/bowtie2/spikein/samtools_stats` + * `.bam.*stats`: various statistics regarding the spike-in BAM files. + +
+ +Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowtie 2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml). A genome index is required to run Bowtie2 which is created automatically from the genome fasta input. By default, the only alignment files output are the quality filtered, marked and/or deduplicated alignment files. To output all alignment files inlcuding those directly from the aligner, set `--publish_align_intermed true`. + +## Alignment post-processing + +### SAMtools + +
+Output files + +* `aligner/bowtie2/intermediate/` + * `.filtered.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. + * `.filtered.bam.bai`: BAI file for BAM. +* `aligner/bowtie2/intermediate/samtools_stats` + * `.filtered.bam.*stats`: various statistics regarding the BAM files. + +
+ +BAM files are filtered for a minimum quality score of 0 using [SAMtools](http://samtools.sourceforge.net/). If duplicate marking and deduplication is skipped, then these will be the final alignment files under `aligner/bowtie2/`. Otherwise, these files can be included in the output by specifying `--publish_align_intermed true`. + +### picard MarkDuplicates + +
+Output files + +* `aligner/bowtie2/` + * `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. + * `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. +* `aligner/bowtie2/picard_metrics` + * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. + + +
-> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. +By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to guage the overall level of duplication in your samples. If your data includes IgG controls, these will additionally be deduplicated. You can skip this step via the `--skip_markduplicates` parameter. By default, this is the final processing step for the target BAM files and will appear in `aligner/bowtie2/`. However, if `--skip_markduplicates true` is set, this step will be skipped. + +## Other steps + +### BEDTools and bedGraphToBigWig + +
+Output files + +* `ucsc/` + * `*.bigWig`: bigWig coverage file. + +
+ +The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an indexed binary format useful for displaying dense, continuous data in Genome Browsers such as the [UCSC](https://genome.ucsc.edu/cgi-bin/hgTracks) and [IGV](http://software.broadinstitute.org/software/igv/). This mitigates the need to load the much larger BAM files for data visualisation purposes which will be slower and result in memory issues. The bigWig format is also supported by various bioinformatics software for downstream processing such as meta-profile plotting. + +## Peak calling + +### SEACR + +
+Output files + +* `seacr/` + * `.peaks*.bed`: BED file containing peak coordinates and peak signal. + +
+ +[SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. + +## Summary and quality control + +### DESeq2 + +
+Output files + +* `deseq2_qc/` + * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. + * `*.dds.RData`: File containing R `DESeqDataSet` object generated + by DESeq2, with either an rlog or vst `assay` storing the + variance-stabilised data. + * `*pca.vals.txt`: Matrix of values for the first 2 principal components. + * `*sample.dists.txt`: Sample distance matrix. + * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. +* `deseq2_qc/size_factors/` + * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample. + +
+ +[DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) is one of the most commonly used software packages to perform differential expression analysis for RNA-seq datasets, but is used in this instance to compare between experimental CUT&Run datasets. + +The script included in the pipeline uses DESeq2 to normalise read counts across all of the provided samples in order to create a PCA plot and a clustered heatmap showing pairwise Euclidean distances between the samples in the experiment. These help to show the similarity between groups of samples and can reveal batch effects and other potential issues with the experiment. + +## Python report + +**Output files:** + +* `reports/` + * `report.pdf`: PDF report of all plots. + * `*.png`: individual plots featured in the PDF report. + * `*.csv`: corresponding data used to produce the plot. + + + +Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data are reported in this module. This report was adapted in python from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). ## MultiQC @@ -67,13 +240,36 @@ For more information about how to use MultiQC reports, see [https://multiqc.info * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. * `multiqc_plots/`: directory containing static images from the report in various formats. -## Pipeline information +## Workflow reporting and genomes -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +### Reference genome files -**Output files:** +
+Output files + +* `genome/` + * `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. +* `genome/index/` + * `bowtie2`: Directory containing target Bowtie2 indices. +* `genome/spikein_index/` + * `bowtie2`: Directory containing spike-in Bowtie2 indices. + +
+ +A number of genome-specific files are generated by the pipeline because they are required for the downstream processing of the results. If the `--save_reference` parameter is provided then these will be saved in the `genome/` directory. It is recommended to use the `--save_reference` parameter if you are using the pipeline to build new indices so that you can save them somewhere locally. The index building step can be quite a time-consuming process and it permits their reuse for future runs of the pipeline to save disk space. + +### Pipeline information + +
+Output files * `pipeline_info/` - * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Documentation for interpretation of results in HTML format: `results_description.html`. + * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. + * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. + +
+ +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. + + From 1951dd76ac17a1dc2e9ba74515d4180a1913afb3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 16:37:12 +0100 Subject: [PATCH 219/675] cleanup --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 115ce2b9..eff7e95f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,6 @@ ## Introduction - **nf-core/cutandrun** is a bioinformatics best-practise analysis pipeline for CUT&Run and CUT&Tag sequencing data analysis to study protein-DNA interactions and epigenomic profiling. The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It comes with docker containers making installation trivial and results highly reproducible. From fcef551ae6087331baca0e488a431ff62bc6cd56 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 16:44:22 +0100 Subject: [PATCH 220/675] organise modules config --- conf/modules.config | 273 ++++++++++++++------------------------------ 1 file changed, 84 insertions(+), 189 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index c305390a..aa8385dd 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -1,20 +1,24 @@ /* - * -------------------------------------------------- - * Config file for defining DSL2 per module options - * -------------------------------------------------- - * - * Available keys to override module options: - * args = Additional arguments appended to command in module. - * args2 = Second set of arguments appended to command in module (multi-tool modules). - * publish_dir = Directory to publish results. - * publish_by_id = Publish results in separate folders by meta.id value. - * publish_files = Groovy map where key = "file_ext" and value = "directory" to publish results for that file extension - * The value of "directory" is appended to the standard "publish_dir" path as defined above. - * If publish_files == null (unspecified) - All files are published. - * If publish_files == false - No files are published. - * suffix = File name suffix for output files. - * - */ +======================================================================================== + Config file for defining DSL2 per module options +======================================================================================== + Available keys to override module options: + args = Additional arguments appended to command in module. + args2 = Second set of arguments appended to command in module (multi-tool modules). + args3 = Third set of arguments appended to command in module (multi-tool modules). + publish_dir = Directory to publish results. + publish_by_meta = Groovy list of keys available in meta map to append as directories to "publish_dir" path + If publish_by_meta = true - Value of ${meta['id']} is appended as a directory to "publish_dir" path + If publish_by_meta = ['id', 'custompath'] - If "id" is in meta map and "custompath" isn't then "${meta['id']}/custompath/" + is appended as a directory to "publish_dir" path + If publish_by_meta = false / null - No directories are appended to "publish_dir" path + publish_files = Groovy map where key = "file_ext" and value = "directory" to publish results for that file extension + The value of "directory" is appended to the standard "publish_dir" path as defined above. + If publish_files = null (unspecified) - All files are published. + If publish_files = false - No files are published. + suffix = File name suffix for output files. +---------------------------------------------------------------------------------------- +*/ params { modules { @@ -38,14 +42,12 @@ params { 'sra_merge_samplesheet' { publish_dir = 'public_data' } - 'bowtie2_index' { publish_dir = "genome/index" } 'bowtie2_spikein_index' { publish_dir = "genome/spikein_index" } - 'cat_fastq' { publish_dir = 'fastq' } @@ -57,123 +59,8 @@ params { publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] } 'deseq2' { - publish_dir = "deseq2" - } - // 'bowtie2_align' { - // args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" - // suffix = ".target" - // publish_dir = "aligner/${params.aligner}/intermediate/" - // publish_files = ['txt':''] - // } - - // 'bowtie2_align' { - // args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" - // suffix = ".target" - // publish_dir = '' - // publish_files = [:] - // } - 'bowtie2_spikein_align' { - args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" - suffix = ".spikein" - publish_dir = "aligner/${params.aligner}/spikein" - publish_files = ['bam':''] + publish_dir = "deseq2_qc" } - // 'samtools_sort' { - // suffix = ".target.sorted" - // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - // publish_dir = "${params.aligner}/target" - // } - // 'samtools_sort' { - // suffix = ".target.sorted" - // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - // publish_dir = '' - // publish_files = [:] - // } - 'samtools_spikein_sort' { - suffix = ".spikein.sorted" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - publish_dir = "aligner/${params.aligner}/spikein" - } - - // 'samtools_view_qfilter' { - // args = '-q 0 -b' - // suffix = ".filtered" - // publish_files = ['txt':''] - // publish_dir = "${params.aligner}/target" - // } - // 'samtools_view_qfilter' { - // args = '-q 0 -b' - // suffix = ".filtered" - // publish_files = [:] - // publish_dir = '' - // } - // 'samtools_qfilter' { - // suffix = ".filtered" - // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - // publish_dir = "${params.aligner}/target" - // } - // 'samtools_qfilter' { - // suffix = ".filtered" - // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - // publish_dir = "${params.aligner}/target" - // } - // 'picard_markduplicates' { - // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - // suffix = ".markdup" - // publish_files = ['bam': 'picard_markdup', 'metrics.txt':'picard_metrics'] - // publish_dir = "${params.aligner}/target" - // } - // 'picard_markduplicates' { - // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - // suffix = ".markdup" - // publish_files = [:] - // publish_dir = '' - // } - // 'picard_markduplicates_samtools' { - // suffix = ".markdup.sorted" - // publish_files = ['stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - // publish_dir = "${params.aligner}/target" - // } - // 'picard_markduplicates_samtools' { - // suffix = ".markdup.sorted" - // publish_files = [:] - // publish_dir = '' - // } - // 'picard_dedup' { - // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - // suffix = ".dedup" - // publish_files = ['bam': '', 'metrics.txt':'picard_metrics'] - // publish_dir = "${params.aligner}/target" - // } - // 'picard_dedup' { - // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - // suffix = ".dedup" - // publish_files = [:] - // publish_dir = '' - // } - // 'picard_dedup_samtools' { - // suffix = ".dedup.sorted" - // publish_files = ['bai':'', 'stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - // publish_dir = "${params.aligner}/target" - // } - // 'picard_dedup_samtools' { - // suffix = ".dedup.sorted" - // publish_files = [:] - // publish_dir = '' - // } - 'awk_bt2' { - args = "" - suffix = ".target" - publish_dir = "" - publish_files = false - } - 'awk_bt2_spikein' { - args = "" - suffix = ".spikein" - publish_dir = "" - publish_files = false - } - 'bedtools_genomecov_bedgraph' { args = "" suffix = "" @@ -194,7 +81,6 @@ params { 'deeptools_fragmentsize' { publish_dir = "deeptools" } - 'igv' { publish_dir = "igv" } @@ -202,27 +88,12 @@ params { args = "" publish_dir = "multiqc" } - 'awk_dedup' { - args = "" - suffix = ".awk" - publish_dir = "" - command = "'/^[^#]/{print}'" - command2 = "| head -2 | sed 's/\\t/,/g' - | sed 's/.*/\\L&/g' -" - publish_files = false - } - 'awk_dt_frag' { - args = "" - suffix = ".dt.frag" - publish_dir = "" - publish_files = false - } 'export_meta' { publish_dir = "meta" } 'generate_reports' { publish_dir = "reports" } - 'calc_frag_samtools_view' { args = '-F 0x04 -b' suffix = ".mapped" @@ -258,23 +129,13 @@ params { command = "| sort -k1,1 -k2,2n -k3,3n" publish_files = false } - - 'awk_frag_bin' { - args = "-v w=500" - suffix = ".frags.bin500" - ext = "bed" - publish_dir = "binned_fragment_counts" - command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" - command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" - publish_files = false - } - - 'awk_edit_peak_bed' { - command = "'{split(\$6, summit, \":\"); split(summit[2], region, \"-\"); print summit[1]\"\\t\"region[1]\"\\t\"region[2]}'" - suffix = ".max_signal" + 'samtools_frag_len' { + args = '-F 0x04' + args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" + suffix = '.frag_len' + publish_dir = '' publish_files = false } - 'dt_compute_mat_gene' { args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZeros" publish_dir = "deeptools/heatmaps/gene" @@ -294,24 +155,56 @@ params { publish_dir = "deeptools/heatmaps/peaks" } - 'samtools_frag_len' { - args = '-F 0x04' - args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" - suffix = '.frag_len' - publish_dir = '' + /* + ======================================================================================== + AWK OPTIONS + ======================================================================================== + */ + + 'awk_bt2' { + args = "" + suffix = ".target" + publish_dir = "" + publish_files = false + } + 'awk_bt2_spikein' { + args = "" + suffix = ".spikein" + publish_dir = "" + publish_files = false + } + 'awk_dedup' { + args = "" + suffix = ".awk" + publish_dir = "" + command = "'/^[^#]/{print}'" + command2 = "| head -2 | sed 's/\\t/,/g' - | sed 's/.*/\\L&/g' -" + publish_files = false + } + 'awk_dt_frag' { + args = "" + suffix = ".dt.frag" + publish_dir = "" + publish_files = false + } + 'awk_frag_bin' { + args = "-v w=500" + suffix = ".frags.bin500" + ext = "bed" + publish_dir = "binned_fragment_counts" + command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" + command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" + publish_files = false + } + 'awk_edit_peak_bed' { + command = "'{split(\$6, summit, \":\"); split(summit[2], region, \"-\"); print summit[1]\"\\t\"region[1]\"\\t\"region[2]}'" + suffix = ".max_signal" publish_files = false } - - // 'samtools_sort' { - // args = "-n" - // publish_dir = "" - // suffix = ".sorted" - // publish_files = ['txt':''] - // } /* ======================================================================================== - ALIGNMENT STUFF + ALIGNMENT FILE MODULE OPTIONS ======================================================================================== */ // ALIGN BT2 @@ -339,6 +232,19 @@ params { publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] } + // ALIGN BT2 - SPIKE-IN + 'bowtie2_spikein_align' { + args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" + suffix = ".spikein" + publish_dir = "aligner/${params.aligner}/spikein" + publish_files = ['bam':''] + } + 'samtools_spikein_sort' { + suffix = ".spikein.sorted" + publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_dir = "aligner/${params.aligner}/spikein" + } + // SAMTOOLS Q FILTER 'samtools_view_qfilter' { args = '-q 0 -b' @@ -422,12 +328,6 @@ params { publish_files = ['bam':'','metrics.txt':'picard_metrics'] publish_dir = "aligner/${params.aligner}/intermediate" } - // 'picard_dedup_final' { - // args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - // suffix = ".dedup" - // publish_files = ['bam':'','metrics.txt':'picard_metrics'] - // publish_dir = "aligner/${params.aligner}" - // } 'picard_dedup_samtools' { suffix = ".dedup.sorted" publish_files = [:] @@ -438,10 +338,5 @@ params { publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] publish_dir = "aligner/${params.aligner}/intermediate" } - // 'picard_dedup_samtools_final' { - // suffix = ".dedup.sorted" - // publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] - // publish_dir = "aligner/${params.aligner}" - // } } } From b185584803e9b65ad798d1fcf89e6736d75380f3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 16:48:20 +0100 Subject: [PATCH 221/675] add SRA part to usage docs --- docs/usage.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index ad04caa8..a4211c25 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -63,6 +63,36 @@ igg,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +# Direct download of public repository data + +> **NB:** This is an experimental feature but should work beautifully when it does! :) + +The pipeline has been set-up to automatically download and process the raw FastQ files from public repositories. Identifiers can be provided in a file, one-per-line via the `--public_data_ids` parameter. Currently, the following identifiers are supported: + +| `SRA` | `ENA` | `GEO` | +|--------------|--------------|------------| +| SRR11605097 | ERR4007730 | GSM4432381 | +| SRX8171613 | ERX4009132 | GSE147507 | +| SRS6531847 | ERS4399630 | | +| SAMN14689442 | SAMEA6638373 | | +| SRP256957 | ERP120836 | | +| SRA1068758 | ERA2420837 | | +| PRJNA625551 | PRJEB37513 | | + +If `SRR`/`ERR` run ids are provided then these will be resolved back to their appropriate `SRX`/`ERX` ids to be able to merge multiple runs from the same experiment. This is conceptually the same as merging multiple libraries sequenced from the same sample. + +The final sample information for all identifiers is obtained from the ENA which provides direct download links for FastQ files as well as their associated md5 sums. If download links exist, the files will be downloaded in parallel by FTP otherwise they will NOT be downloaded. This is intentional because the tools such as `parallel-fastq-dump`, `fasterq-dump`, `prefetch` etc require pre-existing configuration files in the users home directory which makes automation tricky across different platforms and containerisation. + +As a bonus, the pipeline will also generate a valid samplesheet with paths to the downloaded data that can be used with the `--input` parameter, however, it is highly recommended that you double-check that all of the identifiers you defined using `--public_data_ids` are represented in the samplesheet. Also, public databases don't reliably hold information such as strandedness information so you may need to amend these entries too. All of the sample metadata obtained from the ENA has been appended as additional columns to help you manually curate the samplesheet before you run the pipeline. + +If you have a GEO accession (found in the data availability section of published papers) you can directly download a text file containing the appropriate SRA ids to pass to the pipeline: + +* Search for your GEO accession on [GEO](https://www.ncbi.nlm.nih.gov/geo) +* Click `SRA Run Selector` at the bottom of the GEO accession page +* Select the desired samples in the `SRA Run Selector` and then download the `Accession List` + +This downloads a text file called `SRR_Acc_List.txt` which can be directly provided to the pipeline e.g. `--public_data_ids SRR_Acc_List.txt`. + ## Running the pipeline The typical command for running the pipeline is as follows: From 52163d42b751c47bc7be150ef48cfc8d2739464f Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 17:38:50 +0100 Subject: [PATCH 222/675] email completion test --- workflows/cutandrun.nf | 54 ++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 36 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 8423e97e..dcb1e6aa 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -110,24 +110,6 @@ if (!params.skip_markduplicates) { picard_deduplicates_options = modules['picard_dedup'] picard_deduplicates_samtools_options = modules['picard_dedup_samtools'] } -// } else if (!params.skip_markduplicates && !params.skip_removeduplicates) { -// picard_deduplicates_options = modules['picard_dedup_final'] -// picard_deduplicates_samtools_options = modules['picard_dedup_samtools_final'] -// if (params.publish_align_intermed) { -// bowtie2_align_options = modules['bowtie2_align_intermed'] -// samtools_sort_options = modules['samtools_sort_intermed'] -// samtools_view_options = modules['samtools_view_qfilter_intermed'] -// samtools_qfilter_options = modules['samtools_qfilter_intermed'] -// picard_markduplicates_options = modules['picard_markduplicates_intermed'] -// picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_intermed'] -// } else { -// bowtie2_align_options = modules['bowtie2_align'] -// samtools_sort_options = modules['samtools_sort'] -// samtools_view_options = modules['samtools_view_qfilter'] -// samtools_qfilter_options = modules['samtools_qfilter'] -// picard_markduplicates_options = modules['picard_markduplicates'] -// picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] -// } } else { samtools_view_options = modules['samtools_view_qfilter_final'] samtools_qfilter_options = modules['samtools_qfilter_final'] @@ -170,20 +152,20 @@ def awk_dt_frag_options = modules['awk_dt_frag'] /* * MODULES */ -include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) -include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) -include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) -include { CAT_FASTQ } from '../modules/local/cat_fastq' addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) -include { IGV_SESSION } from '../modules/local/igv_session' addParams( options: modules['igv'] ) -include { EXPORT_META } from '../modules/local/export_meta' addParams( options: modules['export_meta'] ) -include { GENERATE_REPORTS } from '../modules/local/generate_reports' addParams( options: modules['generate_reports'] ) -include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) -include { AWK as AWK_FRAG_BIN } from '../modules/local/awk' addParams( options: modules['awk_frag_bin'] ) -include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/awk' addParams( options: modules['awk_edit_peak_bed'] ) -include { DESEQ2_DIFF } from '../modules/local/deseq2_diff' addParams( options: [:], multiqc_label: 'deseq2' ) -include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) -include { SEACR_CALLPEAK as SEACR_NO_IGG } from '../modules/local/seacr_no_igg' addParams( options: modules['seacr'] ) +include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) +include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) +include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) +include { CAT_FASTQ } from '../modules/local/cat_fastq' addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) +include { IGV_SESSION } from '../modules/local/igv_session' addParams( options: modules['igv'] ) +include { EXPORT_META } from '../modules/local/export_meta' addParams( options: modules['export_meta'] ) +include { GENERATE_REPORTS } from '../modules/local/generate_reports' addParams( options: modules['generate_reports'] ) +include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) +include { AWK as AWK_FRAG_BIN } from '../modules/local/awk' addParams( options: modules['awk_frag_bin'] ) +include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/awk' addParams( options: modules['awk_edit_peak_bed'] ) +include { DESEQ2_DIFF } from '../modules/local/deseq2_diff' addParams( options: modules['deseq2'], multiqc_label: 'deseq2') +include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) +include { SEACR_CALLPEAK as SEACR_NO_IGG } from '../modules/local/seacr_no_igg' addParams( options: modules['seacr'] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -844,10 +826,10 @@ workflow CUTANDRUN { /* -- COMPLETION EMAIL -- */ //////////////////////////////////////////////////// -// workflow.onComplete { -// Completion.email(workflow, params, params.summary_params, projectDir, log, multiqc_report, fail_percent_mapped) -// Completion.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) -// } +workflow.onComplete { + NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) + NfcoreTemplate.summary(workflow, params, log) + } //////////////////////////////////////////////////// /* -- THE END -- */ From b189f0c4652ed07cbb348d32b4aca356660d8672 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 17:39:08 +0100 Subject: [PATCH 223/675] email test --- workflows/cutandrun.nf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index dcb1e6aa..147a2746 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -827,8 +827,10 @@ workflow CUTANDRUN { //////////////////////////////////////////////////// workflow.onComplete { - NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) - NfcoreTemplate.summary(workflow, params, log) + NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report, fail_percent_mapped) + NfcoreTemplate.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) + // NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) + // NfcoreTemplate.summary(workflow, params, log) } //////////////////////////////////////////////////// From 3d9dcc927ae693130b616437eb83da7b22dcf368 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 18:12:57 +0100 Subject: [PATCH 224/675] change single quotes to double in cutandrun.nf --- workflows/cutandrun.nf | 218 ++++++++++++++++++++--------------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 147a2746..9ce43c7d 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -22,8 +22,8 @@ checkPathParamList = [ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters that cannot be checked in the groovy lib as we want a channel for them -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } -if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, 'Genome blacklist file not specified!' } +if (params.input) { ch_input = file(params.input) } else { exit 1, "Input samplesheet not specified!" } +if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, "Genome blacklist file not specified!" } // Save AWS IGenomes file containing annotation version def anno_readme = params.genomes[ params.genome ]?.readme @@ -54,31 +54,31 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi ======================================================================================== */ -// Don't overwrite global params.modules, create a copy instead and use that within the main script. +// Don"t overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() // Genome -def genome_options = params.save_reference ? [publish_dir: 'genome/target'] : [publish_files: false] -def spikein_genome_options = params.save_reference ? [publish_dir: 'genome/spikein'] : [publish_files: false] -def bowtie2_index_options = params.save_reference ? [publish_dir: 'genome/target/index'] : [publish_files: false] -def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: 'genome/spikein/index'] : [publish_files: false] +def genome_options = params.save_reference ? [publish_dir: "genome/target"] : [publish_files: false] +def spikein_genome_options = params.save_reference ? [publish_dir: "genome/spikein"] : [publish_files: false] +def bowtie2_index_options = params.save_reference ? [publish_dir: "genome/target/index"] : [publish_files: false] +def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genome/spikein/index"] : [publish_files: false] // QC -def cat_fastq_options = modules['cat_fastq'] -if (!params.save_merged_fastq) { cat_fastq_options['publish_files'] = false } +def cat_fastq_options = modules["cat_fastq"] +if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } -def multiqc_options = modules['multiqc'] -multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : '' +def multiqc_options = modules["multiqc"] +multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" // Trimming -def trimgalore_options = modules['trimgalore'] -trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : '' -if (params.save_trimmed) { trimgalore_options.publish_files.put('fq.gz','') } +def trimgalore_options = modules["trimgalore"] +trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : "" +if (params.save_trimmed) { trimgalore_options.publish_files.put("fq.gz","") } // Alignment dedup and filtering -def prepareToolIndices = ['bowtie2'] -def bowtie2_spikein_align_options = modules['bowtie2_spikein_align'] -def samtools_spikein_sort_options = modules['samtools_spikein_sort'] +def prepareToolIndices = ["bowtie2"] +def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] +def samtools_spikein_sort_options = modules["samtools_spikein_sort"] def dedup_control_only = true if(params.dedup_target_reads) { dedup_control_only = false } @@ -93,55 +93,55 @@ def picard_deduplicates_samtools_options = null // if (!params.skip_markduplicates && params.skip_removeduplicates) { if (!params.skip_markduplicates) { - picard_markduplicates_options = modules['picard_markduplicates_final'] - picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_final'] + picard_markduplicates_options = modules["picard_markduplicates_final"] + picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_final"] if (params.publish_align_intermed) { - bowtie2_align_options = modules['bowtie2_align_intermed'] - samtools_sort_options = modules['samtools_sort_intermed'] - samtools_view_options = modules['samtools_view_qfilter_intermed'] - samtools_qfilter_options = modules['samtools_qfilter_intermed'] - picard_deduplicates_options = modules['picard_dedup_intermed'] - picard_deduplicates_samtools_options = modules['picard_dedup_samtools_intermed'] + bowtie2_align_options = modules["bowtie2_align_intermed"] + samtools_sort_options = modules["samtools_sort_intermed"] + samtools_view_options = modules["samtools_view_qfilter_intermed"] + samtools_qfilter_options = modules["samtools_qfilter_intermed"] + picard_deduplicates_options = modules["picard_dedup_intermed"] + picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] } else { - bowtie2_align_options = modules['bowtie2_align'] - samtools_sort_options = modules['samtools_sort'] - samtools_view_options = modules['samtools_view_qfilter'] - samtools_qfilter_options = modules['samtools_qfilter'] - picard_deduplicates_options = modules['picard_dedup'] - picard_deduplicates_samtools_options = modules['picard_dedup_samtools'] + bowtie2_align_options = modules["bowtie2_align"] + samtools_sort_options = modules["samtools_sort"] + samtools_view_options = modules["samtools_view_qfilter"] + samtools_qfilter_options = modules["samtools_qfilter"] + picard_deduplicates_options = modules["picard_dedup"] + picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] } } else { - samtools_view_options = modules['samtools_view_qfilter_final'] - samtools_qfilter_options = modules['samtools_qfilter_final'] + samtools_view_options = modules["samtools_view_qfilter_final"] + samtools_qfilter_options = modules["samtools_qfilter_final"] if (params.publish_align_intermed ) { - bowtie2_align_options = modules['bowtie2_align_intermed'] - samtools_sort_options = modules['samtools_sort_intermed'] - picard_markduplicates_options = modules['picard_markduplicates_intermed'] - picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools_intermed'] - picard_deduplicates_options = modules['picard_dedup_intermed'] - picard_deduplicates_samtools_options = modules['picard_dedup_samtools_intermed'] + bowtie2_align_options = modules["bowtie2_align_intermed"] + samtools_sort_options = modules["samtools_sort_intermed"] + picard_markduplicates_options = modules["picard_markduplicates_intermed"] + picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_intermed"] + picard_deduplicates_options = modules["picard_dedup_intermed"] + picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] } else { - bowtie2_align_options = modules['bowtie2_align'] - samtools_sort_options = modules['samtools_sort'] - picard_markduplicates_options = modules['picard_markduplicates'] - picard_markduplicates_samtools_options = modules['picard_markduplicates_samtools'] - picard_deduplicates_options = modules['picard_dedup'] - picard_deduplicates_samtools_options = modules['picard_dedup_samtools'] + bowtie2_align_options = modules["bowtie2_align"] + samtools_sort_options = modules["samtools_sort"] + picard_markduplicates_options = modules["picard_markduplicates"] + picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools"] + picard_deduplicates_options = modules["picard_dedup"] + picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] } } -if (params.save_unaligned) { bowtie2_align_options.publish_files.put('.gz','') } -if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put('.gz','') } +if (params.save_unaligned) { bowtie2_align_options.publish_files.put(".gz","") } +if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put(".gz","") } if (params.minimum_alignment_q_score > 0) { samtools_view_options.args = "-b -q " + params.minimum_alignment_q_score } // Meta annotation options -def awk_bt2_options = modules['awk_bt2'] -def awk_bt2_spikein_options = modules['awk_bt2_spikein'] -def awk_dedup_options = modules['awk_dedup'] -def awk_dt_frag_options = modules['awk_dt_frag'] +def awk_bt2_options = modules["awk_bt2"] +def awk_bt2_spikein_options = modules["awk_bt2_spikein"] +def awk_dedup_options = modules["awk_dedup"] +def awk_dt_frag_options = modules["awk_dt_frag"] /* ======================================================================================== @@ -152,58 +152,58 @@ def awk_dt_frag_options = modules['awk_dt_frag'] /* * MODULES */ -include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['csv':'']] ) -include { MULTIQC } from '../modules/local/multiqc' addParams( options: multiqc_options ) -include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) -include { CAT_FASTQ } from '../modules/local/cat_fastq' addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from '../modules/local/bedtools_genomecov_scale' addParams( options: modules['bedtools_genomecov_bedgraph'] ) -include { IGV_SESSION } from '../modules/local/igv_session' addParams( options: modules['igv'] ) -include { EXPORT_META } from '../modules/local/export_meta' addParams( options: modules['export_meta'] ) -include { GENERATE_REPORTS } from '../modules/local/generate_reports' addParams( options: modules['generate_reports'] ) -include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from '../modules/local/software/deeptools/bamPEFragmentSize/main' addParams( options: modules['deeptools_fragmentsize'] ) -include { AWK as AWK_FRAG_BIN } from '../modules/local/awk' addParams( options: modules['awk_frag_bin'] ) -include { AWK as AWK_EDIT_PEAK_BED } from '../modules/local/awk' addParams( options: modules['awk_edit_peak_bed'] ) -include { DESEQ2_DIFF } from '../modules/local/deseq2_diff' addParams( options: modules['deseq2'], multiqc_label: 'deseq2') -include { SAMTOOLS_CUSTOMVIEW } from '../modules/local/software/samtools/custom_view/main' addParams( options: modules['samtools_frag_len'] ) -include { SEACR_CALLPEAK as SEACR_NO_IGG } from '../modules/local/seacr_no_igg' addParams( options: modules['seacr'] ) +include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) +include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) +include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) +include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) +include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) +include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) +include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) +include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) +include { DESEQ2_DIFF } from "../modules/local/deseq2_diff" addParams( options: modules["deseq2"], multiqc_label: "deseq2") +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' addParams( genome_options: genome_options, +include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) -include { ALIGN_BOWTIE2 } from '../subworkflows/local/align_bowtie2' addParams( align_options: bowtie2_align_options, +include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_options: samtools_sort_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from '../subworkflows/local/samtools_view_sort_stats' addParams( samtools_options: samtools_qfilter_options, +include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) -include { CALCULATE_FRAGMENTS } from '../subworkflows/local/calculate_fragments' addParams( samtools_options: modules['calc_frag_samtools'], - samtools_view_options: modules['calc_frag_samtools_view'], - bamtobed_options: modules['calc_frag_bamtobed'], - awk_options: modules['calc_frag_awk'], - cut_options: modules['calc_frag_cut'] ) - -include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_options, - meta_suffix: '_target', +include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], + samtools_view_options: modules["calc_frag_samtools_view"], + bamtobed_options: modules["calc_frag_bamtobed"], + awk_options: modules["calc_frag_awk"], + cut_options: modules["calc_frag_cut"] ) + +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, + meta_suffix: "_target", script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_bt2_spikein_options, - meta_suffix: '_spikein', +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, + meta_suffix: "_spikein", script_mode: true) -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dedup_options, meta_suffix: '', - meta_prefix: 'dedup_', +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", + meta_prefix: "dedup_", script_mode: false ) -include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/local/annotate_meta_awk' addParams( options: awk_dt_frag_options, - meta_suffix: '', - meta_prefix: '', +include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, + meta_suffix: "", + meta_prefix: "", script_mode: true) /* @@ -215,21 +215,21 @@ include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from '../subworkflows/loc /* * MODULES */ -include { UCSC_BEDGRAPHTOBIGWIG } from '../modules/nf-core/software/ucsc/bedgraphtobigwig/main' addParams( options: modules['ucsc_bedgraphtobigwig'] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_gene'] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from '../modules/nf-core/software/deeptools/computematrix/main' addParams( options: modules['dt_compute_mat_peaks'] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_gene'] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from '../modules/nf-core/software/deeptools/plotheatmap/main' addParams( options: modules['dt_plotheatmap_peaks'] ) -include { SAMTOOLS_SORT } from '../modules/nf-core/software/samtools/sort/main.nf' addParams( options: modules['samtools_sort'] ) -include { SEACR_CALLPEAK } from '../modules/nf-core/software/seacr/callpeak/main' addParams( options: modules['seacr'] ) -include { UCSC_BEDCLIP } from '../modules/nf-core/software/ucsc/bedclip/main' addParams( options: modules['ucsc_bedclip'] ) +include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) +include { SAMTOOLS_SORT } from "../modules/nf-core/software/samtools/sort/main.nf" addParams( options: modules["samtools_sort"] ) +include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) +include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { FASTQC_TRIMGALORE } from '../subworkflows/nf-core/fastqc_trimgalore' addParams( fastqc_options: modules['fastqc'], trimgalore_options: trimgalore_options ) -include { MARK_DUPLICATES_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from '../subworkflows/nf-core/mark_duplicates_picard' addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) +include { FASTQC_TRIMGALORE } from "../subworkflows/nf-core/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) +include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) /* ======================================================================================== @@ -259,7 +259,7 @@ workflow CUTANDRUN { ) .map { meta, fastq -> - meta.id = meta.id.split('_')[0..-2].join('_') + meta.id = meta.id.split("_")[0..-2].join("_") [ meta, fastq ] } .groupTuple(by: [0]) .branch { @@ -313,7 +313,7 @@ workflow CUTANDRUN { ch_samtools_spikein_stats = Channel.empty() ch_samtools_spikein_flagstat = Channel.empty() ch_samtools_spikein_idxstats = Channel.empty() - if (params.aligner == 'bowtie2') { + if (params.aligner == "bowtie2") { ALIGN_BOWTIE2 ( ch_trimmed_reads, PREPARE_GENOME.out.bowtie2_index, @@ -398,7 +398,7 @@ workflow CUTANDRUN { * SUBWORKFLOW: Annotate meta-data with aligner stats for target and spike-in * the meta-data is annotated additivley so we only need to track the final channel output */ - if (params.aligner == 'bowtie2') { + if (params.aligner == "bowtie2") { ANNOTATE_BT2_META ( ch_samtools_bam, ch_bowtie2_log, @@ -437,7 +437,7 @@ workflow CUTANDRUN { .join ( ch_scale_factor ) .map { row -> row[1..(row.size() - 1)] } .map { row -> - row[0].put('scale_factor', row[2]) + row[0].put("scale_factor", row[2]) [ row[0], row[1], row[2] ] } .set { ch_samtools_bam_scale } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, @@ -515,8 +515,8 @@ workflow CUTANDRUN { * CHANNEL: Separate bedgraphs into target/control pairings for each replicate */ BEDTOOLS_GENOMECOV_SCALE.out.bedgraph.branch { it -> - target: it[0].group != 'igg' - control: it[0].group == 'igg' + target: it[0].group != "igg" + control: it[0].group == "igg" } .set { ch_bedgraph_split } //EXAMPLE CHANNEL STRUCT: NO CHANGE @@ -602,7 +602,7 @@ workflow CUTANDRUN { * CHANNEL: Remove IgG from bigwig channel */ UCSC_BEDGRAPHTOBIGWIG.out.bigwig - .filter { it[0].group != 'igg' } + .filter { it[0].group != "igg" } .set { ch_bigwig_no_igg } //ch_bigwig_no_igg | view @@ -749,7 +749,7 @@ workflow CUTANDRUN { * MODULE: Export meta-data to csv file */ EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty(['{{NO-DATA}}']) + ch_samtools_bam.collect{it[0]}.ifEmpty(["{{NO-DATA}}"]) ) /* @@ -785,7 +785,7 @@ workflow CUTANDRUN { // // Filter bam bai channels for non-igg only // ch_samtools_bam_bai - // .filter { it[0].group != 'igg' } + // .filter { it[0].group != "igg" } // .set { ch_no_igg_bam_bai } } @@ -807,7 +807,7 @@ workflow CUTANDRUN { ch_multiqc_config, ch_multiqc_custom_config.collect().ifEmpty([]), GET_SOFTWARE_VERSIONS.out.yaml.collect(), - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), + ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml"), FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), @@ -827,11 +827,11 @@ workflow CUTANDRUN { //////////////////////////////////////////////////// workflow.onComplete { - NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report, fail_percent_mapped) - NfcoreTemplate.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) - // NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) - // NfcoreTemplate.summary(workflow, params, log) - } + // NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report, fail_percent_mapped) + // NfcoreTemplate.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) + NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) + NfcoreTemplate.summary(workflow, params, log) +} //////////////////////////////////////////////////// /* -- THE END -- */ From 731a7643366c09d84355c5c5fa52e1622a00b5f0 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 18:17:11 +0100 Subject: [PATCH 225/675] changing single quotes to double --- conf/modules.config | 204 ++++++++++++++++++++++---------------------- nextflow.config | 64 +++++++------- 2 files changed, 134 insertions(+), 134 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index aa8385dd..412e38a6 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -22,97 +22,97 @@ params { modules { - 'sra_ids_to_runinfo' { - publish_dir = 'public_data' - publish_files = ['tsv':'runinfo'] + "sra_ids_to_runinfo" { + publish_dir = "public_data" + publish_files = ["tsv":"runinfo"] } - 'sra_runinfo_to_ftp' { - publish_dir = 'public_data' - publish_files = ['tsv':'runinfo'] + "sra_runinfo_to_ftp" { + publish_dir = "public_data" + publish_files = ["tsv":"runinfo"] } - 'sra_fastq_ftp' { - publish_dir = 'public_data' - publish_files = ['fastq.gz':'', 'md5':'md5'] - args = '-C - --max-time 1200' + "sra_fastq_ftp" { + publish_dir = "public_data" + publish_files = ["fastq.gz":"", "md5":"md5"] + args = "-C - --max-time 1200" } - 'sra_to_samplesheet' { - publish_dir = 'public_data' + "sra_to_samplesheet" { + publish_dir = "public_data" publish_files = false } - 'sra_merge_samplesheet' { - publish_dir = 'public_data' + "sra_merge_samplesheet" { + publish_dir = "public_data" } - 'bowtie2_index' { + "bowtie2_index" { publish_dir = "genome/index" } - 'bowtie2_spikein_index' { + "bowtie2_spikein_index" { publish_dir = "genome/spikein_index" } - 'cat_fastq' { - publish_dir = 'fastq' + "cat_fastq" { + publish_dir = "fastq" } - 'fastqc' { + "fastqc" { args = "--quiet" } - 'trimgalore' { + "trimgalore" { args = "--fastqc" - publish_files = ['txt':'', 'html':'fastqc', 'zip':'fastqc'] + publish_files = ["txt":"", "html":"fastqc", "zip":"fastqc"] } - 'deseq2' { + "deseq2" { publish_dir = "deseq2_qc" } - 'bedtools_genomecov_bedgraph' { + "bedtools_genomecov_bedgraph" { args = "" suffix = "" publish_dir = "genomecov" } - 'seacr' { + "seacr" { args = "non stringent" suffix = ".peaks.bed" publish_dir = "seacr" } - 'ucsc_bedclip' { + "ucsc_bedclip" { suffix = ".clip" publish_files = false } - 'ucsc_bedgraphtobigwig' { + "ucsc_bedgraphtobigwig" { publish_dir = "ucsc/bedgraphtobigwig" } - 'deeptools_fragmentsize' { + "deeptools_fragmentsize" { publish_dir = "deeptools" } - 'igv' { + "igv" { publish_dir = "igv" } - 'multiqc' { + "multiqc" { args = "" publish_dir = "multiqc" } - 'export_meta' { + "export_meta" { publish_dir = "meta" } - 'generate_reports' { + "generate_reports" { publish_dir = "reports" } - 'calc_frag_samtools_view' { - args = '-F 0x04 -b' + "calc_frag_samtools_view" { + args = "-F 0x04 -b" suffix = ".mapped" publish_dir = "" publish_files = false } - 'calc_frag_samtools' { - args = '' + "calc_frag_samtools" { + args = "" suffix = ".mapped" publish_dir = "" publish_files = false } - 'calc_frag_bamtobed' { - args = '-bedpe' - suffix = '' - publish_dir = '' + "calc_frag_bamtobed" { + args = "-bedpe" + suffix = "" + publish_dir = "" publish_files = false } - 'calc_frag_awk' { + "calc_frag_awk" { args = "" suffix = ".clean" ext = "bed" @@ -121,7 +121,7 @@ params { command2 = "" publish_files = false } - 'calc_frag_cut' { + "calc_frag_cut" { args = "-f 1,2,6" suffix = ".frags" ext = "bed" @@ -129,28 +129,28 @@ params { command = "| sort -k1,1 -k2,2n -k3,3n" publish_files = false } - 'samtools_frag_len' { - args = '-F 0x04' + "samtools_frag_len" { + args = "-F 0x04" args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" - suffix = '.frag_len' - publish_dir = '' + suffix = ".frag_len" + publish_dir = "" publish_files = false } - 'dt_compute_mat_gene' { + "dt_compute_mat_gene" { args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZeros" publish_dir = "deeptools/heatmaps/gene" } - 'dt_compute_mat_peaks' { + "dt_compute_mat_peaks" { args = "reference-point -a 3000 -b 3000 --referencePoint center --skipZeros" publish_dir = "deeptools/heatmaps/peaks" } - 'dt_plotheatmap_gene' { + "dt_plotheatmap_gene" { args = "--sortUsing sum" publish_dir = "deeptools/heatmaps/gene" } - 'dt_plotheatmap_peaks' { + "dt_plotheatmap_peaks" { args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\"" publish_dir = "deeptools/heatmaps/peaks" } @@ -161,19 +161,19 @@ params { ======================================================================================== */ - 'awk_bt2' { + "awk_bt2" { args = "" suffix = ".target" publish_dir = "" publish_files = false } - 'awk_bt2_spikein' { + "awk_bt2_spikein" { args = "" suffix = ".spikein" publish_dir = "" publish_files = false } - 'awk_dedup' { + "awk_dedup" { args = "" suffix = ".awk" publish_dir = "" @@ -181,13 +181,13 @@ params { command2 = "| head -2 | sed 's/\\t/,/g' - | sed 's/.*/\\L&/g' -" publish_files = false } - 'awk_dt_frag' { + "awk_dt_frag" { args = "" suffix = ".dt.frag" publish_dir = "" publish_files = false } - 'awk_frag_bin' { + "awk_frag_bin" { args = "-v w=500" suffix = ".frags.bin500" ext = "bed" @@ -196,7 +196,7 @@ params { command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" publish_files = false } - 'awk_edit_peak_bed' { + "awk_edit_peak_bed" { command = "'{split(\$6, summit, \":\"); split(summit[2], region, \"-\"); print summit[1]\"\\t\"region[1]\"\\t\"region[2]}'" suffix = ".max_signal" publish_files = false @@ -208,134 +208,134 @@ params { ======================================================================================== */ // ALIGN BT2 - 'bowtie2_align' { + "bowtie2_align" { args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" suffix = ".target" - publish_dir = '' + publish_dir = "" publish_files = [:] } - 'bowtie2_align_intermed' { + "bowtie2_align_intermed" { args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" suffix = ".target" publish_dir = "aligner/${params.aligner}/intermediate" - publish_files = ['bam':''] + publish_files = ["bam":""] } - 'samtools_sort' { + "samtools_sort" { suffix = ".target.sorted" - publish_dir = '' + publish_dir = "" publish_files = [:] } - 'samtools_sort_intermed' { + "samtools_sort_intermed" { suffix = ".target.sorted" publish_dir = "aligner/${params.aligner}/intermediate" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } // ALIGN BT2 - SPIKE-IN - 'bowtie2_spikein_align' { + "bowtie2_spikein_align" { args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" suffix = ".spikein" publish_dir = "aligner/${params.aligner}/spikein" - publish_files = ['bam':''] + publish_files = ["bam":""] } - 'samtools_spikein_sort' { + "samtools_spikein_sort" { suffix = ".spikein.sorted" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] publish_dir = "aligner/${params.aligner}/spikein" } // SAMTOOLS Q FILTER - 'samtools_view_qfilter' { - args = '-q 0 -b' + "samtools_view_qfilter" { + args = "-q 0 -b" suffix = ".filtered" publish_files = [:] - publish_dir = '' + publish_dir = "" } - 'samtools_view_qfilter_intermed' { - args = '-q 0 -b' + "samtools_view_qfilter_intermed" { + args = "-q 0 -b" suffix = ".filtered" - publish_files = ['bam':''] + publish_files = ["bam":""] publish_dir = "aligner/${params.aligner}/intermediate" } - 'samtools_view_qfilter_final' { - args = '-q 0 -b' + "samtools_view_qfilter_final" { + args = "-q 0 -b" suffix = ".filtered" - publish_files = ['bam':''] + publish_files = ["bam":""] publish_dir = "aligner/${params.aligner}" } - 'samtools_qfilter' { + "samtools_qfilter" { suffix = ".filtered" publish_files = [:] - publish_dir = '' + publish_dir = "" } - 'samtools_qfilter_intermed' { + "samtools_qfilter_intermed" { suffix = ".filtered" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] publish_dir = "aligner/${params.aligner}/intermediate" } - 'samtools_qfilter_final' { + "samtools_qfilter_final" { suffix = ".filtered" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] publish_dir = "aligner/${params.aligner}" } // MARK DUPS - 'picard_markduplicates' { + "picard_markduplicates" { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".markdup" publish_files = [:] - publish_dir = '' + publish_dir = "" } - 'picard_markduplicates_intermed' { + "picard_markduplicates_intermed" { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".markdup" - publish_files = ['bam':'','metrics.txt':'picard_metrics'] + publish_files = ["bam":"","metrics.txt":"picard_metrics"] publish_dir = "aligner/${params.aligner}/intermediate" } - 'picard_markduplicates_final' { + "picard_markduplicates_final" { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".markdup" - publish_files = ['bam':'','metrics.txt':'picard_metrics'] + publish_files = ["bam":"","metrics.txt":"picard_metrics"] publish_dir = "aligner/${params.aligner}" } - 'picard_markduplicates_samtools' { + "picard_markduplicates_samtools" { suffix = ".markdup.sorted" publish_files = [:] - publish_dir = '' + publish_dir = "" } - 'picard_markduplicates_samtools_intermed' { + "picard_markduplicates_samtools_intermed" { suffix = ".markdup.sorted" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] publish_dir = "aligner/${params.aligner}/intermediate" } - 'picard_markduplicates_samtools_final' { + "picard_markduplicates_samtools_final" { suffix = ".markdup.sorted" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] publish_dir = "aligner/${params.aligner}" } // DEDUP - 'picard_dedup' { + "picard_dedup" { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".dedup" publish_files = [:] - publish_dir = '' + publish_dir = "" } - 'picard_dedup_intermed' { + "picard_dedup_intermed" { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" suffix = ".dedup" - publish_files = ['bam':'','metrics.txt':'picard_metrics'] + publish_files = ["bam":"","metrics.txt":"picard_metrics"] publish_dir = "aligner/${params.aligner}/intermediate" } - 'picard_dedup_samtools' { + "picard_dedup_samtools" { suffix = ".dedup.sorted" publish_files = [:] - publish_dir = '' + publish_dir = "" } - 'picard_dedup_samtools_intermed' { + "picard_dedup_samtools_intermed" { suffix = ".dedup.sorted" - publish_files = ['bai':'','stats':'samtools_stats', 'flagstat':'samtools_stats', 'idxstats':'samtools_stats'] + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] publish_dir = "aligner/${params.aligner}/intermediate" } } diff --git a/nextflow.config b/nextflow.config index 829c7786..1b6f598d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -15,7 +15,7 @@ params { // References genome = null - spikein_genome = 'K12-MG1655' + spikein_genome = "K12-MG1655" save_reference = false // QC @@ -37,7 +37,7 @@ params { skip_trimming = false // Alignment - aligner = 'bowtie2' + aligner = "bowtie2" save_unaligned = false save_spikein_aligned = false publish_align_intermed = false @@ -59,27 +59,27 @@ params { skip_reporting = false // Boilerplate options - outdir = './results' - publish_dir_mode = 'copy' + outdir = "./results" + publish_dir_mode = "copy" multiqc_config = null multiqc_title = null email = null email_on_fail = null - max_multiqc_email_size = '25.MB' + max_multiqc_email_size = "25.MB" plaintext_email = false monochrome_logs = false help = false - igenomes_base = 's3://ngi-igenomes/igenomes/' + igenomes_base = "s3://ngi-igenomes/igenomes/" tracedir = "${params.outdir}/pipeline_info" igenomes_ignore = false validate_params = true show_hidden_params = false - schema_ignore_params = 'genomes,modules' + schema_ignore_params = "genomes,modules" enable_conda = false singularity_pull_docker_container = false // Config options - custom_config_version = 'master' + custom_config_version = "master" custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" hostnames = [:] config_profile_name = null @@ -88,16 +88,16 @@ params { config_profile_url = null // Max resource options - max_memory = '8.GB' + max_memory = "8.GB" max_cpus = 4 - max_time = '24.h' + max_time = "24.h" } // Load base.config by default for all pipelines -includeConfig 'conf/base.config' +includeConfig "conf/base.config" // Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +includeConfig "conf/modules.config" // Load nf-core custom profiles from different Institutions try { @@ -107,7 +107,7 @@ try { } profiles { - debug { process.beforeScript = 'echo $HOSTNAME' } + debug { process.beforeScript = "echo $HOSTNAME" } conda { params.enable_conda = true docker.enabled = false @@ -122,7 +122,7 @@ profiles { // 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)' + docker.runOptions = "-u \$(id -u):\$(id -g)" singularity.enabled = false podman.enabled = false shifter.enabled = false @@ -157,16 +157,16 @@ profiles { podman.enabled = false shifter.enabled = false } - local { includeConfig 'conf/local.config' } - test { includeConfig 'conf/test.config' } - test_sra { includeConfig 'conf/test_sra.config' } - test_full { includeConfig 'conf/test_full.config' } - test_hg38_chr7 { includeConfig 'conf/test_hg38_chr7.config' } + local { includeConfig "conf/local.config" } + test { includeConfig "conf/test.config" } + test_sra { includeConfig "conf/test_sra.config" } + test_full { includeConfig "conf/test_full.config" } + test_hg38_chr7 { includeConfig "conf/test_hg38_chr7.config" } } // Load igenomes.config if required if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' + includeConfig "conf/igenomes.config" } // Export these variables to prevent local Python/R libraries from conflicting with those in the container @@ -177,9 +177,9 @@ env { } // Capture exit codes from upstream processes when piping -process.shell = ['/bin/bash', '-euo', 'pipefail'] +process.shell = ["/bin/bash", "-euo", "pipefail"] -def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') +def trace_timestamp = new java.util.Date().format( "yyyy-MM-dd_HH-mm-ss") timeline { enabled = true file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" @@ -198,19 +198,19 @@ dag { } manifest { - name = 'nf-core/cutandrun' - author = 'Chris Cheshire and Charlotte West' - homePage = 'https://github.com/nf-core/cutandrun' - description = 'Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.' - mainScript = 'main.nf' - nextflowVersion = '!>=21.04.0' - version = '1.0-dev' + name = "nf-core/cutandrun" + author = "Chris Cheshire and Charlotte West" + homePage = "https://github.com/nf-core/cutandrun" + description = "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis." + mainScript = "main.nf" + nextflowVersion = "!>=21.04.0" + version = "1.0-dev" } // Function to ensure that resource requirements don't go beyond // a maximum limit def check_max(obj, type) { - if (type == 'memory') { + if (type == "memory") { try { if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) return params.max_memory as nextflow.util.MemoryUnit @@ -220,7 +220,7 @@ def check_max(obj, type) { println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj" return obj } - } else if (type == 'time') { + } else if (type == "time") { try { if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) return params.max_time as nextflow.util.Duration @@ -230,7 +230,7 @@ def check_max(obj, type) { println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj" return obj } - } else if (type == 'cpus') { + } else if (type == "cpus") { try { return Math.min( obj, params.max_cpus as int ) } catch (all) { From a8d6e1daf24fb4f7b58057d810c793226fe65a13 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 18:24:01 +0100 Subject: [PATCH 226/675] swapping single quotes with double --- nextflow.config | 1 + subworkflows/local/align_bowtie2.nf | 8 ++--- subworkflows/local/annotate_meta_awk.nf | 8 ++--- subworkflows/local/calculate_fragments.nf | 8 ++--- subworkflows/local/input_check.nf | 4 +-- subworkflows/local/prepare_genome.nf | 34 +++++++++---------- .../local/samtools_view_sort_stats.nf | 6 ++-- workflows/cutandrun.nf | 2 -- 8 files changed, 35 insertions(+), 36 deletions(-) diff --git a/nextflow.config b/nextflow.config index 1b6f598d..f3dc0925 100644 --- a/nextflow.config +++ b/nextflow.config @@ -45,6 +45,7 @@ params { skip_removeduplicates = false dedup_target_reads = false minimum_alignment_q_score = 0 + min_mapped_reads = 5 // Coverage normalisation_c = 10000 diff --git a/subworkflows/local/align_bowtie2.nf b/subworkflows/local/align_bowtie2.nf index 0afde9ec..065c5a17 100644 --- a/subworkflows/local/align_bowtie2.nf +++ b/subworkflows/local/align_bowtie2.nf @@ -7,10 +7,10 @@ params.spikein_align_options = [:] params.samtools_options = [:] params.samtools_spikein_options = [:] -include { BOWTIE2_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.align_options, save_unaligned: params.save_unaligned ) -include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from '../../modules/nf-core/software/bowtie2/align/main' addParams( options: params.spikein_align_options, save_unaligned: false ) -include { BAM_SORT_SAMTOOLS } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_options ) -include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from '../nf-core/bam_sort_samtools' addParams( options: params.samtools_spikein_options ) +include { BOWTIE2_ALIGN } from "../../modules/nf-core/software/bowtie2/align/main" addParams( options: params.align_options, save_unaligned: params.save_unaligned ) +include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from "../../modules/nf-core/software/bowtie2/align/main" addParams( options: params.spikein_align_options, save_unaligned: false ) +include { BAM_SORT_SAMTOOLS } from "../nf-core/bam_sort_samtools" addParams( options: params.samtools_options ) +include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from "../nf-core/bam_sort_samtools" addParams( options: params.samtools_spikein_options ) workflow ALIGN_BOWTIE2 { take: diff --git a/subworkflows/local/annotate_meta_awk.nf b/subworkflows/local/annotate_meta_awk.nf index 63f7daee..25e265c7 100644 --- a/subworkflows/local/annotate_meta_awk.nf +++ b/subworkflows/local/annotate_meta_awk.nf @@ -4,12 +4,12 @@ */ params.options = [:] -params.meta_suffix = '' -params.meta_prefix = '' +params.meta_suffix = "" +params.meta_prefix = "" params.script_mode = false -include { AWK_SCRIPT } from '../../modules/local/awk_script' addParams( options: params.options ) -include { AWK } from '../../modules/local/awk' addParams( options: params.options ) +include { AWK_SCRIPT } from "../../modules/local/awk_script" addParams( options: params.options ) +include { AWK } from "../../modules/local/awk" addParams( options: params.options ) workflow ANNOTATE_META_AWK { take: passthrough diff --git a/subworkflows/local/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf index ffc5f03b..169afdce 100644 --- a/subworkflows/local/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -8,10 +8,10 @@ params.bamtobed_options = [:] params.awk_options = [:] params.cut_options = [:] -include { SAMTOOLS_VIEW_SORT_STATS } from './samtools_view_sort_stats' addParams( samtools_options: params.samtools_options, samtools_view_options: params.samtools_view_options ) -include { BEDTOOLS_BAMTOBED } from '../../modules/nf-core/software/bedtools/bamtobed/main' addParams( options: params.bamtobed_options ) -include { AWK } from '../../modules/local/awk' addParams( options: params.awk_options ) -include { CUT } from '../../modules/local/cut' addParams( options: params.cut_options ) +include { SAMTOOLS_VIEW_SORT_STATS } from "./samtools_view_sort_stats" addParams( samtools_options: params.samtools_options, samtools_view_options: params.samtools_view_options ) +include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/software/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) +include { AWK } from "../../modules/local/awk" addParams( options: params.awk_options ) +include { CUT } from "../../modules/local/cut" addParams( options: params.cut_options ) workflow CALCULATE_FRAGMENTS { take: diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index bd7ddbea..a832b067 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -6,7 +6,7 @@ params.options = [:] include { SAMPLESHEET_CHECK; - get_samplesheet_paths } from '../../modules/local/samplesheet_check' addParams( options: params.options ) + get_samplesheet_paths } from "../../modules/local/samplesheet_check" addParams( options: params.options ) workflow INPUT_CHECK { take: @@ -14,7 +14,7 @@ workflow INPUT_CHECK { main: SAMPLESHEET_CHECK ( samplesheet ) - .splitCsv ( header:true, sep:',' ) + .splitCsv ( header:true, sep:"," ) .map { get_samplesheet_paths(it) } .set { reads } diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index eee2ee7d..470d4dd7 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -7,16 +7,16 @@ params.spikein_genome_options = [:] params.bt2_index_options = [:] params.bt2_spikein_index_options = [:] -include { GUNZIP as GUNZIP_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) -include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.spikein_genome_options ) -include { GUNZIP as GUNZIP_GTF } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) -include { GUNZIP as GUNZIP_BED } from '../../modules/nf-core/software/gunzip/main.nf' addParams( options: params.genome_options ) -include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.genome_options ) -include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' addParams( options: params.spikein_genome_options ) -include { UNTAR as UNTAR_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_index_options ) -include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from '../../modules/nf-core/software/untar/main.nf' addParams( options: params.bt2_spikein_index_options ) -include { BOWTIE2_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_index_options ) -include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from '../../modules/nf-core/software/bowtie2/build/main' addParams( options: params.bt2_spikein_index_options ) +include { GUNZIP as GUNZIP_FASTA } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.spikein_genome_options ) +include { GUNZIP as GUNZIP_GTF } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_BED } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.genome_options ) +include { GET_CHROM_SIZES } from "../../modules/local/get_chrom_sizes" addParams( options: params.genome_options ) +include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from "../../modules/local/get_chrom_sizes" addParams( options: params.spikein_genome_options ) +include { UNTAR as UNTAR_BT2_INDEX } from "../../modules/nf-core/software/untar/main.nf" addParams( options: params.bt2_index_options ) +include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from "../../modules/nf-core/software/untar/main.nf" addParams( options: params.bt2_spikein_index_options ) +include { BOWTIE2_BUILD } from "../../modules/nf-core/software/bowtie2/build/main" addParams( options: params.bt2_index_options ) +include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from "../../modules/nf-core/software/bowtie2/build/main" addParams( options: params.bt2_spikein_index_options ) workflow PREPARE_GENOME { take: @@ -26,7 +26,7 @@ workflow PREPARE_GENOME { /* * Uncompress genome fasta file if required */ - if (params.fasta.endsWith('.gz')) { + if (params.fasta.endsWith(".gz")) { ch_fasta = GUNZIP_FASTA ( params.fasta ).gunzip } else { ch_fasta = file(params.fasta) @@ -35,7 +35,7 @@ workflow PREPARE_GENOME { /* * Uncompress spike-in genome fasta file if required */ - if (params.spikein_fasta.endsWith('.gz')) { + if (params.spikein_fasta.endsWith(".gz")) { ch_spikein_fasta = GUNZIP_SPIKEIN_FASTA ( params.spikein_fasta ).gunzip } else { ch_spikein_fasta = file(params.spikein_fasta) @@ -45,7 +45,7 @@ workflow PREPARE_GENOME { * Uncompress GTF annotation file */ ch_gtf = Channel.empty() - if (params.gtf.endsWith('.gz')) { + if (params.gtf.endsWith(".gz")) { ch_gtf = GUNZIP_GTF ( params.gtf ).gunzip } else { ch_gtf = file(params.gtf) @@ -56,7 +56,7 @@ workflow PREPARE_GENOME { */ ch_gene_bed = Channel.empty() if (params.gene_bed){ - if (params.gene_bed.endsWith('.gz')) { + if (params.gene_bed.endsWith(".gz")) { ch_gene_bed = GUNZIP_BED ( params.gene_bed ).gunzip } else { ch_gene_bed = file(params.gene_bed) @@ -79,9 +79,9 @@ workflow PREPARE_GENOME { ch_bt2_index = Channel.empty() ch_bt2_spikein_index = Channel.empty() ch_bt2_version = Channel.empty() - if ('bowtie2' in prepare_tool_indices) { + if ("bowtie2" in prepare_tool_indices) { if (params.bowtie2) { - if (params.bowtie2.endsWith('.tar.gz')) { + if (params.bowtie2.endsWith(".tar.gz")) { ch_bt2_index = UNTAR_BT2_INDEX ( params.bowtie2 ).untar } else { ch_bt2_index = file(params.bowtie2) @@ -92,7 +92,7 @@ workflow PREPARE_GENOME { } if (params.spikein_bowtie2) { - if (params.spikein_bowtie2.endsWith('.tar.gz')) { + if (params.spikein_bowtie2.endsWith(".tar.gz")) { ch_bt2_spikein_index = UNTAR_SPIKEIN_BT2_INDEX ( params.spikein_bowtie2 ).untar } else { ch_bt2_spikein_index = file(params.spikein_bowtie2) diff --git a/subworkflows/local/samtools_view_sort_stats.nf b/subworkflows/local/samtools_view_sort_stats.nf index dc3a1f8f..4f290239 100644 --- a/subworkflows/local/samtools_view_sort_stats.nf +++ b/subworkflows/local/samtools_view_sort_stats.nf @@ -5,9 +5,9 @@ params.samtools_view_options = [:] params.samtools_options = [:] -include { SAMTOOLS_VIEW } from '../../modules/nf-core/software/samtools/view/main' addParams( options: params.samtools_view_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) -include { BAM_STATS_SAMTOOLS } from '../nf-core/bam_stats_samtools' addParams( options: params.samtools_options ) +include { SAMTOOLS_VIEW } from "../../modules/nf-core/software/samtools/view/main" addParams( options: params.samtools_view_options ) +include { SAMTOOLS_INDEX } from "../../modules/nf-core/software/samtools/index/main" addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from "../nf-core/bam_stats_samtools" addParams( options: params.samtools_options ) workflow SAMTOOLS_VIEW_SORT_STATS { take: diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 9ce43c7d..d91669da 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -827,8 +827,6 @@ workflow CUTANDRUN { //////////////////////////////////////////////////// workflow.onComplete { - // NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report, fail_percent_mapped) - // NfcoreTemplate.summary(workflow, params, log, fail_percent_mapped, pass_percent_mapped) NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) NfcoreTemplate.summary(workflow, params, log) } From 612aa47cae8620fcc2d96b1d791c70039619ec45 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 18:42:51 +0100 Subject: [PATCH 227/675] all text in output docs --- docs/output.md | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index de9fc422..d82ef86c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -26,6 +26,7 @@ and processes data using the following steps: * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files * [Peak calling](#peak-calling) * [SEACR](#seacr) - Peak calling for high signal-noise data + * [Deeptools](#deeptools) - Analysis of peaks * [Summary and quality control](#summary-and-quality-control) * [DESeq2](#deseq2) - PCA plot and differential peak analysis * [Python report](#python-report) @@ -188,6 +189,21 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i [SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. +### Deeptools + +
+Output files + +* `deeptools/heatmaps/` + * `.plotHeatmap.pdf`: heatmap PDF. + * `.computeMatrix.mat.gz`: heatmap matrix. + * `*.mat.tab`: matrix and heatmap configs. + + +
+ +[Deeptools](https://github.com/deeptools/deepTools/) subtools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. + ## Summary and quality control ### DESeq2 @@ -212,9 +228,10 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i The script included in the pipeline uses DESeq2 to normalise read counts across all of the provided samples in order to create a PCA plot and a clustered heatmap showing pairwise Euclidean distances between the samples in the experiment. These help to show the similarity between groups of samples and can reveal batch effects and other potential issues with the experiment. -## Python report +### Python report -**Output files:** +
+Output files * `reports/` * `report.pdf`: PDF report of all plots. @@ -225,7 +242,7 @@ The script included in the pipeline uses DESeq2 to normalise read counts across Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data are reported in this module. This report was adapted in python from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). -## MultiQC +### MultiQC [MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarizing all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. @@ -233,13 +250,30 @@ The pipeline has special steps which also allow the software versions to be repo For more information about how to use MultiQC reports, see [https://multiqc.info](https://multiqc.info). -**Output files:** +
+Output files * `multiqc/` * `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. * `multiqc_plots/`: directory containing static images from the report in various formats. +### IGV + +
+Output files + +* `igv/` + * `igv_session.xml`: IGV session. + * `*.txt`: IGV input file configurations. + + +
+ +An IGV session file will be created at the end of the pipeline containing the normalised bigWig tracks, per-sample peaks, target genome fasta and annotation GTF. Once installed, open IGV, go to File > Open Session and select the igv_session.xml file for loading. + +> **NB:** If you are not using an in-built genome provided by IGV you will need to load the annotation yourself e.g. in .gtf and/or .bed format. + ## Workflow reporting and genomes ### Reference genome files From 8c957f082493b6917591e41215a264f20d0b245b Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 18:58:57 +0100 Subject: [PATCH 228/675] line formatting --- subworkflows/local/annotate_meta_awk.nf | 2 +- workflows/cutandrun.nf | 43 +++++-------------------- 2 files changed, 9 insertions(+), 36 deletions(-) diff --git a/subworkflows/local/annotate_meta_awk.nf b/subworkflows/local/annotate_meta_awk.nf index 25e265c7..4eaa85fa 100644 --- a/subworkflows/local/annotate_meta_awk.nf +++ b/subworkflows/local/annotate_meta_awk.nf @@ -9,7 +9,7 @@ params.meta_prefix = "" params.script_mode = false include { AWK_SCRIPT } from "../../modules/local/awk_script" addParams( options: params.options ) -include { AWK } from "../../modules/local/awk" addParams( options: params.options ) +include { AWK } from "../../modules/local/awk" addParams( options: params.options ) workflow ANNOTATE_META_AWK { take: passthrough diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index d91669da..2f09021d 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -170,41 +170,14 @@ include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, - spikein_genome_options: spikein_genome_options, - bt2_index_options: bowtie2_index_options, - bt2_spikein_index_options: bowtie2_spikein_index_options ) - -include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, - spikein_align_options: bowtie2_spikein_align_options, - samtools_options: samtools_sort_options, - samtools_spikein_options: samtools_spikein_sort_options ) - -include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, - samtools_view_options: samtools_view_options ) - -include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], - samtools_view_options: modules["calc_frag_samtools_view"], - bamtobed_options: modules["calc_frag_bamtobed"], - awk_options: modules["calc_frag_awk"], - cut_options: modules["calc_frag_cut"] ) - -include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, - meta_suffix: "_target", - script_mode: true) - -include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, - meta_suffix: "_spikein", - script_mode: true) - -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", - meta_prefix: "dedup_", - script_mode: false ) - -include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, - meta_suffix: "", - meta_prefix: "", - script_mode: true) +include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) +include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options ) +include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) +include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "",meta_prefix: "dedup_", script_mode: false ) +include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, meta_suffix: "", meta_prefix: "", script_mode: true ) /* ======================================================================================== From a697a6704c86928c37605869579949c73bc59595 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Sun, 23 May 2021 19:51:54 +0100 Subject: [PATCH 229/675] update output docs --- docs/output.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/output.md b/docs/output.md index d82ef86c..cab61e62 100644 --- a/docs/output.md +++ b/docs/output.md @@ -84,7 +84,9 @@ If multiple libraries/runs have been provided for the same sample in the input s [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). - +![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) + +![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) ### TrimGalore @@ -104,7 +106,7 @@ If multiple libraries/runs have been provided for the same sample in the input s > **NB:** TrimGalore! will only run using multiple cores if you are able to use more than > 5 and > 6 CPUs for single- and paired-end data, respectively. The total cores available to TrimGalore! will also be capped at 4 (7 and 8 CPUs in total for single- and paired-end data, respectively) because there is no longer a run-time benefit. See [release notes](https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019) and [discussion whilst adding this logic to the nf-core/atacseq pipeline](https://github.com/nf-core/atacseq/pull/65). - +![MultiQC - cutadapt trimmed sequence length plot](images/mqc_cutadapt_trimmed.png) ## Alignment @@ -128,6 +130,8 @@ If multiple libraries/runs have been provided for the same sample in the input s Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowtie 2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml). A genome index is required to run Bowtie2 which is created automatically from the genome fasta input. By default, the only alignment files output are the quality filtered, marked and/or deduplicated alignment files. To output all alignment files inlcuding those directly from the aligner, set `--publish_align_intermed true`. +![MultiQC - Bowtie2 paired-end mapping stats](images/mqc_bowtie2_pe.png) + ## Alignment post-processing ### SAMtools @@ -159,7 +163,9 @@ BAM files are filtered for a minimum quality score of 0 using [SAMtools](http://
-By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to guage the overall level of duplication in your samples. If your data includes IgG controls, these will additionally be deduplicated. You can skip this step via the `--skip_markduplicates` parameter. By default, this is the final processing step for the target BAM files and will appear in `aligner/bowtie2/`. However, if `--skip_markduplicates true` is set, this step will be skipped. +By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to guage the overall level of duplication in your samples. If your data includes IgG controls, these will additionally be deduplicated. You can skip this step via the `--skip_markduplicates` parameter. By default, this is the final processing step for the target BAM files and will appear in `aligner/bowtie2/`. However, if `--skip_markduplicates true` is set, this step will be skipped. + +![MultiQC - Picard MarkDuplicates metrics plot](images/mqc_picard_markduplicates.png) ## Other steps @@ -189,6 +195,9 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i [SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. +![Python report - peaks reproduced](images/py_reproduced_peaks.png) +![Python report - aligned fragments within peaks](images/py_frags_in_peaks.png) + ### Deeptools
@@ -202,7 +211,8 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i
-[Deeptools](https://github.com/deeptools/deepTools/) subtools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. +[Deeptools](https://github.com/deeptools/deepTools/) subtools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. + ## Summary and quality control @@ -242,6 +252,8 @@ The script included in the pipeline uses DESeq2 to normalise read counts across Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data are reported in this module. This report was adapted in python from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). +![Python report - fragment length distribution](images/py_frag_hist.png) + ### MultiQC [MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarizing all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. From bcecfc4081393fa331fc3a8a5952360fcaa33263 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 08:50:24 +0100 Subject: [PATCH 230/675] removed required attribute from input param so sra workflow works --- nextflow_schema.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 95fc5b36..27480f04 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,9 +10,6 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": [ - "input" - ], "properties": { "input": { "type": "string", From 5be2bf655cdac58623d4fcaacacd7458333258bb Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 09:23:39 +0100 Subject: [PATCH 231/675] documentation images --- docs/images/mqc_bowtie2_pe.png | Bin 0 -> 88205 bytes docs/images/mqc_cutadapt_trimmed.png | Bin 0 -> 86570 bytes docs/images/mqc_fastqc_counts.png | Bin 0 -> 91985 bytes docs/images/mqc_fastqc_quality.png | Bin 0 -> 66980 bytes docs/images/mqc_picard_markduplicates.png | Bin 0 -> 69358 bytes docs/images/py_frag_hist.png | Bin 0 -> 63476 bytes docs/images/py_frags_in_peaks.png | Bin 0 -> 14365 bytes docs/images/py_reproduced_peaks.png | Bin 0 -> 13245 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/mqc_bowtie2_pe.png create mode 100644 docs/images/mqc_cutadapt_trimmed.png create mode 100644 docs/images/mqc_fastqc_counts.png create mode 100644 docs/images/mqc_fastqc_quality.png create mode 100644 docs/images/mqc_picard_markduplicates.png create mode 100755 docs/images/py_frag_hist.png create mode 100755 docs/images/py_frags_in_peaks.png create mode 100755 docs/images/py_reproduced_peaks.png diff --git a/docs/images/mqc_bowtie2_pe.png b/docs/images/mqc_bowtie2_pe.png new file mode 100644 index 0000000000000000000000000000000000000000..e41c54f82ea6d91cc5f7f95f1300730dd4f7dbc6 GIT binary patch literal 88205 zcmeFZbyU>d_b(0zN{F;5h)B1nlynZ=9Redtmr6+upyVLZEzQuK0>YpIf`IhUAR!G( zH~h|^&+~lav+nn<-~HpRyVmDF9cJF|ea_iu$7{d#4pCQ?BgCh|$H2fKRFId^#K6EV z!@#(72lq1ggy(xQ76!&03IOG;qlVIk$!V;DOmV#@p>1`-Cu`Y)p1?ITmqkV(iX4^N8%&jL%K z2^V9}k4;*}Gh(@(xoP|Fv<6g?`R$W3Br&jveKD}_U|`}({D*(0XJh9`H?!xP>tFwG ze?xywLJ9+uK<;1s5d4vq4->mcGdZaBUqAZ}bmr2(dL;%Hg4x$s$7Z|i;eQh4Z>g|3 zz5f39fBHuHAU1KCqW$gbSN`)N{(RflH-P9ruI-E?HTp8c=O|NRx>vS0u5 zff#<8WD?En)$aPY{^jOiU|kpcFZ=oDo$5ANxcUfwqR`j>eapdDB$_{6`PZT-s$gIi z4lX=?{;ziqSO4H&KG0VpAMXw{c1(ox+P^$zaEP@3n}>MM3QH?jmG39=99Hp$gh4jJ zeKEzYSIG?a_fhmd1d9vf5u^@8%i;$ketEoJ+wDA{Vrh|R9tTtYatnu4-(^V0D65C3 zM`WR(u!Q{?e_)`5BlgZ(xtXma!*jmh+nN3doaa|_BHc@vxY{wzo=W`;8LIXzQJea_r?Z|X%S*Mg(Z zakBeb`Ijhh$EHJz2k^C1@$+qQv_SWTH{NF@+LqKkczYXpYaxbEmI5Ld|YII!l}4(_r$=t z57G_iD6!Jje~eSPR?(R>YLU#<`D-WO_i4ri0{ygB{wM{ulb!74G9tb!klNwKhXDK9 zNtD-yQ<{=Lp`nnUdLK06WXgNr*s1IOmjv;%&2Y)i-q5+G;|*J}7)n?GKmwW}F-Xy{+hy-I*jL3p_iHEilLS=6vmpBP{E<+kUI z)0^6z91rcmmM-*46VcSHeVDUO&&1|z9HDjYmHdqI_$Ii>sKIJrn8!^IHP29-Ho;q( zio6qxpacJdm|nb^l^R%|3IqRLaOGneBbcGyvt()a96xLZy3Yhq24>$sq}FZ;JVMp6 zwL;$PSWdiuZm~8}Zd^;vPUTFK*L8wnlXk$*7N0V(Ofio$g&j)TaV2VT zZ&b)NxXy(MSdey0;c$lFkaF4&G>V>|Y!kh?L`L*hVrtQ33BDUjw11d!q??=SVKXkx zpiRBn<8$UjUq+<(kZ6+n_o6Yd)^UL&p+=iSdg3K!=qMXlD9!e6sn4YHyNA!)i`e-^ zPj?37^c4;RdzA)ik*DjZPf|EVTkF}i6q7#Zrxu_5@uV*w9#5Y;SiF1QHg);ibC+OW z^B^6X-0AbPeQArs$)7OG>xNbtsGhIPQ1rs@S*E&M7(Ea__(;@s-N=qa`L1>|{_Tjj z)hy~ePHHYicG|H}6OUzt1yHmSQ9XX#3-8elyxNf6aiu4r#UbxfrJg(`JA$68}x zCO)$1MaE6kK8C|0SI1>N-YtD566Y-}t{IEaaDFi|8_GR3*FMVKLl12{m<|1mA9=oJ zDbAC2GS8yK24x%5V0-JJVT+Kf_Ze33w@mYPz4s8i2&(OTVu}S3+jm}B9j_-Yk?fsN-`%wH6BfaMZ}xPN59>FkJb&_qi);lainv$w zO~?O`H52&m?M|NWIN{!Du$LpRFEadIeC$bDlW*->?2 z@OF#BF?li~&X8R}`quoi4{Xq16XvDSIhn0_%-Eh6M#cBlu6jt<_@=*eJ3Z9;gA2;Q zvfUa6&l|W=6U&CRiZ=3s-+eC`+G=ITuK5gV$Pr3r4dA-4Kb9w;D4TbK=TzA@?xI$y zD1Z;)W!RKtOFlnY6emLtc^4nctey?#ip9z-*X_U7)EQ4<%=PRJ>l%Ijg{C{0gdvK_ z`dUiD;rG`>N#OLE^W}0q6wC&>epC)j?RaU#q_*jt@=lg|T(@>OZ;BJQ4J+u(wjAx` zM!qYO^l_bZ(aRE2%}|*wNVTo+VNpqn8FUP0RY`bFahxbOnn(@_P z{U>2`#@tN@v)OwlMa*%EuYG{qA{A!C(O{b-xceSDo3`C8V5+&O))OeW_^xujs$TZ| z`jW?ChcuDsQ?Y~ZuUo`-dPYIuSf1I@}wOqZ@E!j_~0E?5O25zzCnjEcS1IP+49!$ zl|7OXm~@UFbwr*TifgjRHDT1+9#xc%8Hk@B_B2FIna3M<0re3rx(1g?afEFr7q9Br zd7Yo`I|`@T=;jB8+E1=H=PyLI+!*IglewnHyIOTn3fnDQ0H$aw;%-K!U!y#Il4{C; zl4?WF5w{$zxAWGk$)C&_Qriv1<4U=m65L@01lP07Ny_@^zrcUT{GiYg?}`ANRGtZ!$8gU z>`dpg-CMzhd*UZEL_re+XVncqn;J%)dPK)d80;NMm*xo+O>Kvp_Nq&ncBcnZy|y~$ z>v+t+#td$d-e=@J>VsIPFqN$e76>`7k9`yV`EKNWv=vQqytoN!(Ii;BAe=j}wBjqf ztV=mM;OM2(JYI$kBjvX0BA6fRWIi^GPS`p9=_5|UFU%)8{`TQ)uuR$dV8568?g#R| zwc{9>wG`Je>yc;WC$g6~UhRDmKYOmH4E$t~fzRn~!(P^Z|CszA46Zd1u>U^2EIR(n+c>b*5eUE}t%Hmwxa--y{WZ=ZfX? zL-BJk3Gu}Gp8%<+dox=F_rdHUP{m>khRz zq-sEnq^#m4rZ*jWD}mV#2twx#!4h|5n)@AVCcr?}z;D%MPsCcnPkfwFD=eCPD-=Btn5>L~Zd$&(KX3BP)GXF) zLGCc1Nk8z&EYBBV>F3oOuB;L11LDa_fSK#Vf?;>OF=3QcP{+c~51bKbr zxjme1#R>V$iclm;JbUlawj3inzSE`uG!haOtbib^SJ5zpld9Ol?S>?Y9kiVD-?I&A z_DF{aZ)`W0jxLz2ia+uEF|_K$z2hFe=lHf!H!{!TvW4gknOnOjZpkfLr>`JvBirAE zOZ&EUd%PeImc!51H?=4St`+qn6+BdzkVkF`Yys9-d8hjfVbTJ$G5Tz2{m9T{5Wq*6 zjrn|N|5AauSW`&o87Vf-}M=o~c~#GrhmM{6|T z3}x@En@e#YdL#}w2IW>c$)`vGO>#;u`b6nMt`C#<*4Jz;Gu1x_CS(G8g>|h3)zx9=C z^6v(fa>h?KW7@{<7Pp(^j>+FY{Bm3 ziMo5Fz}FZP7%PC)`7I;w79^w2Q$vMwlG5RL)$}}x>U2<5r1!nYU9QHR{^G|mpGNPB zYSDkr2)b?4_U7imN+~a=Xquf?vB3JMqxGjWe~%$d=VTe%{ZUlDl}|%(zKJ{9Gfg0C z!c(i)H9sAfJNIeroGUri#6d+9yhdey*63NlIHbdtMmG> z8in8D{?OvOmpYQX?_gc^@tbu4n07&!&^I&TBPnz;EFlKMki+-SDS!?0qr(q3FSG|~S z=oXdsDl@e4*C&FG&djvT?4_9LlLY~VNVD3*xqvmL%%IF0W_;7<119VPHYnC&b)0YjkUCXA9MYWd^*UCO$%fG!io@X2*r|cHnoI`nEfL%Uc zSJAjLX^PCrxam71QeEZ^+|IV!p&(wkv_BxG;79EPTzwA(y{agCYg-+eY?GzQ>-5Zl z2bpbGNy@Z)zWE3ai}tH_)!4cWM?ji2O(Co`WcRdbJ5^?EVZ5X_4s7eGL0{Y##MjZ z@t8#|)>?1qiU^YQ*7WXVeZY$I2|xaDy3^=Nk3b5nOY-@Q@r5{V%#gufS?fJI0ZXKr zHCo5!H1*ZPH*PrcBb_tOC`*Z$4W%xB2@J@OM%o>(XvbykcGo_A(tKz3?CJS)*jI~O zXpzF(t$ds0_Uka-s)H0u@;mXg@T>VV0DE-h6+sd zb1&i67svLX{j)?m4<fa~lN~gS9yDTtQFf$)|7k1xd*nBSj)0y;1-1GjU zl@>_|{XxKwSc?bk?Hmm#V0mZXs^ScEz*01QFB`WQLq0Q!jG)*=d5aUAatHQ#ErPiV zOoM%y`gZh?M>@8}TaOXSF1GGCoCwD-YJrmVUuV{?8CY>GZUQ!6)0&Y2rF9EQgXFTt zl=RSQVVY`cf#W*=Yk0R|+c-t~AGXByrS=C(()3r#h{aEb_tdrp&M9fv`&%1|RhG*O zo-gntnavvRpTrDQ4NgTIchVwRktC+#IMd&X2Xzr)wS|tOVGL=~7uMDjt(aGSE2fkx z-5_s4Q1*0xy@nuZIip=&zB?=?*q^8trqjT5+!{?WGuy;@j1+WLquE|n$d3zY@@?SG zgr}=B28?a@h^LWv*AyGWRWG#hPVqO@>rRSY!IREgF)PV+Dp&zB?aMjIclVs@+O~06 zAO!5K%CBNqB$vbS1(fDj86S;yTw#MM+|i{fG(zTTb<;u$4sZqsY-;PE(q0;;(k5j( zrSh#m?6--GtSozT2=ujbloeFVJI9?dKH;&vySKJgkEieYx`554g+%VE@Umta#|vF+ zj~ay$C$)yFf^>Y{*I=7or{m0+9NC91AXAu;+Tivn$vlzmAxY^?id(T6zC)*k#8`^E zed|+@*o8^_b&duT@P2~{xD;i)u}$i$G0Xx&U&8ISR)bmByNdaS96Dgm3Wi)Hh=>W- zarBOgN8F5x7ML}84ESv5gnZu_dz96 z5?-}!WQ@bPuEmnTJ~UALJSXj#ZMjKpp_piCxPL{vu)Fp(tQ_Pk`&F=auI+5&THUJ3B^Z1iLig+); zGtGPNet}kI&X}f97-umB8}txatv8v4L;2|5D@Y|##-~NNu2X=*P}U(j&Gs&PRhk#= zi!dA5DmO98t@;dB@8cLmUWb}Wx(fwJq^Kkgwe)p3A9^RhbHN6ifJAEdBW?E57zFt&3El(SG-y#(V{AW?(tH zrKo6`2yHR)0aBJ^C@M#ntmJlg3qJK9ch(*K9;k(ixq`}lb4Yj ze@9VJYga{UN>k9x!u70K9>}`X-@aTJ>iZ+NoZYVdLh0*r{b1ET_E{9nycKd%HnL*BJa7X6TmN zE^8ZVJ&<#greKC2!ru)-0%=&BTr>Mu$FajiY~i7xZ6Zev!);aJ^_U^ii`8Rb-3A8p z5!P>mX#lj65`W*kOD(iNBmfN_4aXi;D~};q4s#!{LHbhPETHNt$m(4@8A+Eq-y3n7 zM4GOvrfl!mFQ$4jyENBV6ZbXyWZ;Pwmyb^vh{ZSOE03s>i`MK5?zh<>eOzgyn#=6yT zU{{|UdlIN1*PLmuw{rY+Dh;-jHMFVhZ(q00i)L0)wAras37FIa0cuxgU!|HxLye2@ zkjCkWkk0yva3RqcANhdEZ$_E|)g^7bXIzpq3$>FAj6D|;ExQ0bB{u&A5x`m5_2Bbe4Z{pgyn&?t ztr*oG{O8Wn`;`vM%y3SptS@6JmlsNzWO(I0H=}x4K9-tx7t`bjQgmeD)#bFwc4vtlC|p4_dQk3z|<<8K5_m|D+K&InAd%@fR% zwlPHv{05T+fTL*KoU=h=>3DveSaGH&kA{zPaaJtPHun_g1}INKHR16M7XPF}$<(A~~}Hn4{8kD&4($a6wRZHKP{NZIM6aiIr>>k#W-v#m47FVpd;3EI3<= zT6UHchYRgc3efH45}_R}GpG^TRP2rl14|nQV0lFQE$`$wmcOX;oQkpo6wgfN95VIGM0&s3Ih&GWmJsR6smD41m7R6 z6cUkbl6MqJUpkS#)}QG1K4@*T>~C~0ThPY3~sFCYJXP!QrK|yB>Hnj*W5mrVe{9D8dWpp zhUX{8Dm5R#e!TD~fc?bYC6_fcK2+t1^fX3zexWFvI3xXa z-PCK7@xf9DOPaF32Qr_301aUZg`IIl{+h*CbdZ}Y{fE+kbYW{G<(E-_`5*=Nr}Lp;WJpicWOxhY|HJ4a)~C z)LY>Vt37}hztwoC2vJXZR7+`GENz;-OKp#Y=_VzfjH#?-jp-}uDBA+mSxYkkWnW;A zAR}$yOF77y)~>ZBO*`q4hFk(i*0l5B2a>lsnGDlbkwB&P$YyeFmB4KBs3C2Uq%7vu zO3s(S+gBrMN~$hV+yylV8QgNNLCVS|sFE-0)MMIvA3?7blPwm1XGS*Oh4d{@Q!k_S>>Kl5?j2j*k?V#i>Y)v4bap1 z>1Z?@I9?Ie^J5hbyTxOnJbq^2ea}Aq25gQ%KZQTf#}ZU9Z}CifZR0#oCj(aEzu=5q z#x1nEvr#4}N`0u`eC@oVrxv-6eDq5Mc|P)Nw=|#Ij>;(iw$NmemQb2-yyo)Bn2w^O zog3BIYAMnIW$ZRd*V+BzO`|4j?AcPPy7?7=aRk6`9d#pZUM_132zYVE4Mh^9sXH=7g8;9^6T>g0Gb{Y zSPD2yyl3Ru6NI(K$ z(C9O3Yn^c;^Z6(#)o8wllE+#FJ+&2^XOS1|<{{YSmYsjOM1mug?k&&GWddfkwQ6Ni>y5)D-Qoj+L*z(;2YFaCWI8ns}b zu+q_t5l1mUn&m40Q^^O3LPR2K0b) zF&}}z`T_{Sz-E^P1thb}PwM`9ymp%JO6f%<54ceUdqKoNy-Gf`Kn0QH;9#rw=EIT9 z2>o+cC>Q&|hYsfCr(^l5iXxy+$nFG{>$0+=M^m7i>Vi!S|J+ z{7d>f#G%c{Kaq~WAc{DFLR#XuBeHS5OsLNeRP^tWF)QD*Ep2oyTE2PZ??-4yflXrS zZp*v?Cx9Gzm;CmpJbOey*?$3`BzzY|xAj8zg~Tsi;^!v{VVu89Z5LuTpEH1R1Iu3` zqmSeFPNP@#Z<^BoK27OA@7%w+X8%ue&Hi6ML>#h&hlc@qJVh0Q33+q(Z~Sf7F3gQz z1)4qB5TH+seMj9LC|2E+Ur2)@3cX*!2WnC7Ljt zR=ml8+Ok#>`&alK<*;>sA70cBjlf&e@02OH-)RrzaQ#MLuY4(_QZC>vMG0Vvv1M5| zNzHsDSvPeJ46k7w$X&A{tj9jLiYVu?qd>M}6#5x&hF_)<{Sx=&7!OPL8pAU@Ahn+) zFpN~#yDMEcj|rq)T)!zwgBQ@nB#mD=w<=i|UcZHG=Ke+Gm9B?Xp2h$&M??QrwEf!& z0md**LeDvA#FUsF?q^<0=j-#G>O=7CB?G))6YYvc2B(|h7Nf#H9WGvHqV$Xg{W>wQ zGb=p5;3|~hb*(i$FB*uO#h;M?=I0#_%v5TF5WYh3vp!DG#YuZRamnVdws<9ICS@<0 z)8c*EqTxyVvdd58 zEYSSCKVC7c{>~nyzwAfbW(%-^H|m18X8-56>NbyUlx?q;)45{)ZRu?kp);Mgg85^nzG5`87Eg0J3ZMOj|O=EN>KddVY<_N~M~F*q76kn{k;8 zv9PXV>4r>1BG3xSnhH*H^Gzb=-_EY(j;}ApYcuaQiDs$hf^dOKGPG2fKtilLeK>!A zEyfr85buq8Ces}#9W=I`#sL4{;$hLBQoI1dI$hj%_BKxMOhjWJ0{fF2Es?e`7Y!+ix))r{;D&Uxu9=TFg!?25F6O+3y zitFHRt3L)eo`T;5Qwe~=<-WUske2}Rr2F@e(J-KF7!}1D79jp6B?`F|xX*^Lbb&zH zY9Yz?E;>0)L=&o&LE4=^cMDMdI`|4p>I+7__a|R3dI0w38`KdXeI^4CZRib+Fp9IH zo!(-zmC{kT4HORTrU2?%;?yOyS`?D5o3l3)M0>%Ud(7ddAp)>the|*Xf{>g&Z9tQ< z+T)l^;GY4!O8Q1>7LF2d-+Eg4mAz2L!06XJ-%r*W&-H4(icXN&4i$mgVC;1H#*;}T znn^@%+Ohp;iBbl;2o`B^`yZQ#X8%qd46WN>7g6EsqZ!I|OPQgX-Y%)`3-{51dni}U zNLkM|u72*j7w|-0Yt5BMNl!olMVTV~f`Nsxf+BZ!{q^yR+bU|fXMfVobQ^#ah;MZ> zfz(NWnfbNr;oO_LVdssy#UvxgM!sDS$dO%n>vfAsmthqOdL{{UbtokL;MZp&>JWPy zkVPO304vt1G=w0CG%w571#o&30Dt9f2($3n!JOv<_o+oGwP=g?H!wLaan}EJei(k3 zq`>vwIU!XI^VN~YTm?uZpAR4pQ~xTE=C_!YrjtES`0pV!EY3OJ$b05-BXIoPylrO;ER*Fm$m&~>955Y>F|WhK)G zfCz7~F+NFA#`usuR{M$3eZ@~szk!867VqJJHlCjyFU0DZC}=8C z0)Fg-C;MCgX~r3#(lYyyr#u``=E32vgk!~>$VZ05Z@hDxat~VP%kc%!E3uvLZDD%o zE^b8UUulxBL>h29yLir!9N_FSe3?iTxaWAf?tLZ}_y9<+-Mho4X(ww}#1AC5`ZsDs zuuy<37|;0Q830o3goiP&+=7Z7^@U$MeDo@~C9*1KFzfR*Va`MOKILSGdh2`#mJo$A zSnCNOK+0BpGmkT9^EzEM?P;{&fOZ6;d5h7{857Wi;oyfZW7fHZg`s0dC~u?A>t59PBpZpn!sX;dJjuL-tr0*LJ6cwwfm3n))AE@vxo zmir6-YQ7Y-t|Nu$4~xyIZ^k0Pu9RO**stpy$i8`3w)rbYXvtrhrv%g&c+JbWNPjH` zsE&Gb)WJ4D{h3_i$A&5ux2pjM`s>NBAaP}}u_xi8QMg>SKS;{P4y#Q3neg+x_bSu) z6pIP$0TnL}%`ERuxc`LIFT-fl0}>akU>J4}afGJ0C>WPGSbLK)r2-Zoqm(@$JmMNV z6izF!q&z(XTz6(yK>(%mm^yOHla;MmDiZ3z^9+-4msJZIz0QxP)nJ1}m`b0rG7}j$ z4zWxHZWtCO^ze_{eXdv3k4!6kYh*=GZcc&~*C-%OB>56t7_vV3QytHOc9cppeu~ka zy0+!g?aAk!?sxr5xU*@oba9!E&{4(jSokA|_^3V*eyzg7F2cvt2fYT!E(*Ozk5j$( zMq7f&GZ^R;14gCC0LOK(z}^YX?DfR7XMtLa;XQyS7y{I_>u$qZzl)IGtr5_W(haQ6 zz%G@`!9Mcb9tLg;i+8NYQckf#%)!`jQ=C^0uP7cBpn^LZRaY@W*Q*9pEdnTX?+IyW zNcCogi;X3@MXT`N2iJPH%tanUc=4T67q~X#iUZNX)u3~MDN;G3I|l-qQNAjymwqUY z_66-MdWmTEXh&~_o*{ceO06E|s_^uoDhI{jQ8LZAY#^KWmYUCzR#fIn&cg!N#Fw4d z9ioZGU*o+M*=nC3Gjgb7Qiz_gNVe|+T^aA3)VMJKCB|x!P|#ju`sEVt+R+642I&;ohl=d?$fUM$Kpg5qgZu0cYha!Zj?xePj{pz7!<3?&_2V!<1bd9N5U{Do z7eG~vTC=u0M`Mp<3Ib5VIG<4qx#j{;^of@_u2>O@G@)mbbrH@`w{|4Gs(nc=^AjLR3_Wg2V1_OW zL5^7KWz9PF0sS*wo!4!xDzm1lZ5L(Kvj!ykY?4`Qm990dZQDtqGH4)z z?q9eGNgkoJcOxEJ=(F~#u{MP(YRyNK=yc!36Nf+3(lUew2P0zg3AjJptCQ7GYs`ka zkd`@9At-+IYvN8ewp}l?V|?d-n*%ypuaKm-ThI7n?8x#ck-MUf#g=_no3Fvn35Sz{ zB>sB=^Nivd*Yo!3S|3A;>qdZKe6G}dAVW19Jmy3H%vmsaPa)%ed3zKBQ7#CjC9--qxQ*jM$*hNx5aZ;4P!wRMkO!Q|k$ ze{{j|xJVK{qVu(@`xW2dzB(kBO4qV+2_fn7z8cs;qSoqC;n=jb%jPC5qimCM+-G|~ zv`Dn!h6+l0TR5DJ+3W@KB>Hf9&6uDSb{AXHd)GvFdKqUKl!Q{~MYO$4UIoz0p77OY z`k~TUNg)a$LH@*u+x05PF}~@iO7mLLzp8;#tEo4B_7P_RsIu~2E?@X9!3PTAQ5ZRy z`{;`LmJ<@)cp7R3fOPUHZ3qS3D?OG#YhYY$$Y&TbIJJ3~bej7`CT*Y!?;}T8 zzL7o|d=&Xrjn+k6%XH|8CV4nE!>ArsSepnM#4UeBr!||fX0B$ngHu#g^Cng*&xM^z zJu(Cy6UEK?wF}?9-cftURHaWF-AS@_4lwejQ4pL&<8rMVlNf+z1(mHte?yu#zd$s@ zG8>)5k+aeywv_(b&|!Yq7&K17EN*-KlB_&jNM^~^EpSnyvtxlS`@S+gnWgNw;UFpu zu``Ap{s{SXJdk$A%Xd1kyZxajKy_bnst06hQFB87L?x!^Ozns9-YBR&(?b;oH5g;U zs`@)mK-qr4gXC;tQB0s^I7c-_h?7wM$x`dV6WU|_0@He|IDfjvUn@-d+mQN8m5dd*S#nO4Qm=h~Pi$&Kl6^M94mVA>FieVZ2? z3HmC&dI3aVxg@eZcZr-&{8g)pxd`anB759vPs+;J_Fg65l$5b3V!*yJ(#B&~y4j}o3PpK5w^gx2QW^)8ElSRHbN{gxB@-@t%3$d>vuRA;3ckL( z-A$$DeucEHTF@O>^^CPugCyKWktxPBZ#0h$&t!|k$IWzbZhr)<|Gnp>5`~}c* z_8^+C75Laia6lX^9}2A)UkkN2tWPny5&H^3X&NF8H`I6p5`NLsUeO}}1sH*#mT#45jPcBcez(kW|oBibTwFwsdLN8kCu zFWe-;u^M!(poS+FFEk;t1v0AZ+^kDG$sQIVe;!L;K0Sjm+z2 zj4?Zrs;*k|s`AvJAez^Rj+I%5G@2IWKGXrakAU&QSab_-gzRyX3^@8I>6ZjUM3=9sx9v7sExYr9-+#_U%!8we(z*^4vaZjlg1@h^WzG7l{nM zzx;QOzLN%W^z+1cciG>2NwT~8NI_p?J%<;Qqk9>)-!NUR856UTQ^j3tfZ2IEnv?91 zL>{++az09;S0!i5mggSIzz_M*|DHXyB;KW3l`nT9ewnwg8DBr`Y$rDwm#G$kr>{t( zJ!VjwW5qipxH8E2R6#%T*%ChCWSi>o1in5gCX<&u#=%f2EH+qp3p1t5D)gBf719(7 zm8}pRWvHT9w__UxtaiWGm`dVy*6fgPnKxVO)A*Pas3_Mjsi!l!S zHK=RX?iz>i!;>_%-?VTvz7Ha|ANEz0jv~%&XG6qTm$-7(__~1Bon%ni;!aduHZb%w zjP9kRZ>yVqEfY}w+ zi{+@#HyJex<%(MwfUEDQy<7WH7qQyb@r(pZ_p-k8pH5Q{kX>Q~tCculdPjv>_!uir zv{lvYwW^0xatP9txO_E4qRwOH{a)V6gJ^PTP8o7h>8b+YM0XrR( zHR@z5^!<@ToP&4;f8D0r0$!Q$B@RNMUvn)%(>Qizaie&$!y9lzf^O#3c_>&sy z=uhVKv2UqB28RISxsbj*y=ga_)`I`M|4d%C1SlT2cNW&eDo4w0w zt{zE6rN=#@m~1<2MxgIdZcE+W-`TjFQ;rzw#-|ZhY3{Fv2SyUw^*P`LrKkqHx#@>E zbg7sGj33lkplE=qc*MvuimQ_YYRySq$0(`Im$vqRBH&B z#`IdLH94go+K))nV+ul&@h7fbWPUV`o>!&Cc>*?#a!BGB;;LEsR zkuRS`SAwpeyW5#-F7epnt2SMY(+FvN4-k8grN_enK-)WK_>Wr>N4upb#sP`MWj3r( zHY!CnFL*_T3ikxNVhQDAJ_@dBkJaL!gFJ5NvNT1Eu24b}esp0?tSFzV#y$31#gtab zLJ12yhH_&{KS6d9Cqt1RFu1wGO!c(b58-Z1BCCvU1&RyK@m828?i5@|U@*vq$Ap$@ z=0ExSnw~`U-$^h01YES(em48$ zhtD$)e{lOGo(z==FXRx7EeYNq=qc{utY6Ap08JVWVT;$Fs}=eo-fp}jwE|V&ZpK#a z>i!+mag_cO!VA9Qbmf@lZlax}kKR=$KlUHGY+j^&k0d*GA%|xmA$}YOx;N)F@#Nvb zQNf5FM&41+1;A2}r_UbLPB#fyv2OqX$(xnI{QT4yO^AK8kHQEz+@T7eVJ~<~g^D*i z8K!I61kD%qF85xy@QHK1Px1XBJGM-Wy*}h!!^)@WS{oVPC`LIZd zp?(J-7g#g8&#W$x3p6^R@z{Q-rH>Ymo%9-`RbGDk`%G~!KPHuC&2w}(OQJd$W09-1 z$2i3r){%45b?X$}GZBKjnVfugDF0*J+pYUP{vjC20Hu(Oz5fpe z;RSBOW}>b;z>`P`^ohg{piwo5977er54$yMyBB~eRdE7HTQWMG%7?Mtm(<|*FxXF) z;R@jwdalOuvrYw)^|OApWL}Qna0T5ijt)8X&i7XtMhVEh5v-hijrwlF20avn{W6)L zH})QzSX!KzIph+gL!Q$qxlQM5bY^$al9}lslf2bkJU<)I*y}S#dQJQ3I3;I2)|SwS z{LRg0I9JBI!=Cl^OuX6zX+^CdXmA!*T_%9Xo5I{lLvrGn`4uD72P4eq;DR8eNbd6} zZbtAaVQbBJLQD+k1-&Yp~Ha;=Emk*Bp#s2Xr;B%;9Q&L;U>&mf*a`6ohsEOOF zf~KbIoH%sFAAb$o zsC>QBqKwEd7$w7Bx75{l`PswE@=T3>XtAdG!`V5Sv1=u(jQ_Jf{aUmY{dLdq|Z&(hoPKwRZts>^g7 zY|d#BlvD&v6bAb^^h;nOJ2jiNrI*-_*P1bdJhhQ@2jQ#QOuw_P$4z zn(%#^IMPpvYv@b#Ny~8)&{RXrd!3xR z2LfcE(eW zv!ds0+<#Ok#Evd|>3GMxpfl?Be~b6;-TS|$dmw=-2D~swEH&{{=ZcS;b8}vj zc>=`?>(|b$QoAeHZk)GE6$*N9hAxZ<^{8%!iwq{Yso04pI)LKPKvGa74O)%!0PVkM zWwa=b<1Hw1r`cMT%;J5gZRIK1x_TfNTdX%Rwi!A*f_nV)B6IK%>OBn1Dpd7{?$eJ6CcT?#j(V~mwsxyo z**5VNXzT1gF}j)$uf55GHeSJCpcMyx+t@Wyz&x;*o``-S9fmr)<{R|}` z&&#&;S=yU^d{v%kX>IZt%IyK8*aPfPfn_DEhp#JIaw&-`faqdR4ej!)c;3E+WQPk_a!{waV(;(g$n-MMh4AZpvrj6 z(RSnHlE9J-#(A@NKkj$R1Dqbh|3>R@rUN9k(4E&3;9ySmd7O5_G0ytLQ9AGN&hs*d z;HEsVe|G!S=wh2z($*930N5a*hAmIGhG)9Yjn=}wW~v&=ldQ*=d)^zLFffz_I)CA& zGFy5#-Xi|umF5N*5ZmjRZs^jC|N%$-$I{ixy8Z~E#^sr-~IpBT8Ya%KIt8Y0_D#WEeo_KKDSEv$m2kH z-i}*DH@O)actdEBe>42ucPdwd3uQ{URBjBEsUEFNwhgc%5wtQDB?=zNVVp0~uCjmg z_tEaNX)V2pWKDe@YuPMbVApt7EQ;o`?Dn{Jfzdw_=`6sliOv+BwxaLqZT-*u!9M@o zl!%Q3i1gJIr{n`U)n|kaoEI#ZF29kxpj2!OemGQZEUtSS=)O3r>((iQug^}n3x(w; z@dB&r+2J>)|0wi1>OvEbEQKx5e!G_plLKn+HgYH$_PO=%qE@;UR&;HG{to#YaSSX5 zS3&MXzM6aYeT(mz)8by-0I?fkY-peVn+ieyM!D@CM$Ke<{w`iouD z3X7HNJcD}E2K;azMP9+G^ zT#)~G6g>vd&jI|Yo@CbPuK?pKFdBuNalsAOu#4V{tcp=#=}vNWouL<2g}y4be=SR$ z0xV0XT)V~v%&nRm+L^-DSJ}td15IhXaX`{1Dm`s~0{NdQ^8P_)=hm-2F2c&o2jL6E^i%%6xtworDW`fX)|P16{apY`}HzkUxX>{)a^vf+Ki# z8T|-C01XbQf35@`0A0$Iz(JdfUMox`*$W==pHYPp1K?x6$x9>R7kej>E(9J>@T8EF z1Je9eDzr)F&nU$IVG&&52p(Rz<3O-Fo4lD({y)!q1)j%lRpraX0L78WB=|FTFnt+( zoV0wb#3`aeHxzjX&g!=fSF0A{fO z{6p?R|5sa}F)k^RK`sfPpOiwBucgyhu)%COvmBLVi?%RoOAF8xTHu(gu`1VW6H_Q@q=sBp|Ky}qfqU%p{_sC*SuxW_5OR9LQgh0=QAFZ2;`B>@gc%DK3UtN)`) z$v{uX7IPJh^}9!D?5x3ljOK?cC*1qUSuoFb*WbuEwFCS5{$ z-2r~G|8xVCw^EtApWXjY$T2h>oa$vbvaExo3}4!))6bR*Y7BTg3t%8zmVtS!PLzBe z092YMfQSo#4W#;JbOVPk+}FJIU97Gl8%Zmj@`gFrBD1=Mr zdKtPuh_S%>e??iL2F*;rDJvXXoi$)kU6&o0A1J+WfF5vn7mza;HP!w<_TD=j>;L`# zkC2hdWrfPfyj&+^np zj?Z{~kK^`_zJ(mWhQer=bx-Z=1Bs>t_uZXN}k zrB#d8!ng9--u8Ta=I*B>(#qze6A-Ame>FSd)q$Ls*^yJ%1Ghk|O6-dp2@6W8KUF8@ znD|1)m$M22&Y-}NcSH05WigwKP3>Q6f^47}^J?mfE3bf8nRz3MQfJqAcoji(hU*S8 zUkrY)QIEZ^&mt7&e%Gft?TxYGont9QRqaMQo$iY8Y89$3ML(YZ!U1dE6CMK zeK5!Sw8Spa_TTd?oTm?X7O%U1n`bGaNyv_?&s$STxCI2(ed4ExTiN|tnLmJBiE!OXmUtoJ(D@dXV-04>-#t?{qaxn~HLj!Izoh zDVkAPC*$Bi>~eQ6z0NWycCyeHH9KfhkAUnzmRskUh`FN^IpQvSJt4hoA**sNq*?Ne zf87UU;4nIB5Y|jYP`ar;FJa9_SQ-Gl5h96ru19Le$(ljon{t?r)q3nY2wXmO7(3-L zsQt=ZW{kurRWm4xB_HurS9kI@xTn9RKH>?IhMz{&K#j1u8)oj*6<>(B+dHDz4g|?E zxh`o2wIi^G0S^y}QSr|wFG;yi(i#0hvY5=Xr#V^IeDI#Pa!fwt3AEG$*dA&V9XKcu zwa3l`7rOx#B!xP6-SES(N=yA*aY+{lK;FG_b%dLT8sq#Sb9cc`QK*XQ^4Tn&T)!Fd zkM?;%CIQv&MqZ!G)7%3kN>v@b2`Z%_Udn4DFP(o_`J8(Zr*tO8%m;`uR{Q&q>Kr|S zNQy00Jzd|Lk>0}j+7KiN>$heTSd39oT+JzM0^}!c>YliZ@`P|2Z_yo^Cl*4IrdN)WRQ%wn zeRC#NbN0>fnbDknBkW9X5@2d#{#T{{DHv$ki)?bvw?R+~{BVw!mC7FeiM7xx@Wr8W z>eICfpNNnU72iIq{kgaibx934@YD*lO|;)?GCOq`MuC?)Ggv=~lHCulQ}LzBw@Un^vb5Z1`j6FE3d#cV zGq+gMe5&$?Zy+L}NsFXLXcpcV`j=iN{xY46b-Wh9XY7;$YMLR+o3rjg`P`qSl!yR$ts)41ch}c8=kux@NyH?3X7yh2s6%me{`8sGk6wOrq00KD{;o)+PTwkE z%>CNc7}V4Cj{*B%nmk5~P0>%^ks75tSf+!Ho(hkUP~I8t8|rb<4h+suv{?p2o=EhB z#JX0m1J|z_wfDz;4v+X~#3B6QN3Utc`S1-YedmR}zY<{RWGLt(Wa19x5FhjDe-wO% zM9O8L^SMTqZhegTuf@&+mO`qh_t|B)@RQ7SsP%J+F$%0)xT&*@TgrwOv4O7NvhK1| zFdFyIQhm;v{E5O)ou7Q%M@{~OSRsy6RaJsDm~*Yyd9;9lV9|mlGd1`zz>iOd76GR` z2U1@)Rnlc%UtY(lcqb5?qi)O$*xQQF+*#b)Sr!3qD*#ogm>nfAGNNRyki;@;e{O&P zqcF(%Qc2d>ps(eUxZafqEUmJpwN$bsBB-5KW9z6?Zk?^!oF%)t5^wd0$v8{a9o0vD z4-lnM{v_@zs;A-`7f7O;0uzUlDs_mTYA75=^J~ZH{2)|FF=p1>h>qAR;Yyu@=*y)& z1WOQsL^VHDR$e1F%Y3S1xr$W0R>>WT4CtgmH@~4e=v~&^)@*sab84M{D_q7ylcHgs zkc#xcyu+mK^?9kLJsK3INHl@v7X-zZwjN7_A}YGaph%cfkQ6G(bjwxy(SZa(uOTMtT79d z%dZsuRZi%M6*g-WY`4{eE z+C&5QFEopKTr95|!%BgVxI&BbVaDnY*K}=m^Hl<#}+2Eytwkx9ALJXh`Z6=lJ%-+yZ(o&!xUg zsP=EtF1CN0c6r*+>N4^Ih~T6KTLmv5vmNA;N}o~N&nkLv`OJNNc4BhIYn#dPYgW6^ z?-zSC2${5nw9*_%KFhqI98B8Aux*cW*3v>x-PFKD+fwB2Sw_W{SI@QB>1@z)BcKMv zjMzi+Anm*?Dk+L!f+W!8Uo%SB67ilx2LeJ^7PW z2)V+N@7~YM9(U`!(<1UMseq^Jl&Eke`(LWkz&A+Md^WW&|CK`n^dV2Vsp2zsJgB>>Hlor&w9sX8FD`x($oGhy}JhZfBCn3Z!9DO7!_-B%l1jTRsjT5&cN|Xf!K)7 zvXA-?%lXjl+X#ivx%ZMC&i$j#JV#tgfzqgqfBz`{!}xUm3A7~eyu)PG@`rcdU5luT zyOsCkq5@%&`8^Hpqs~Zz1GhdO54!6#M@?WJ6(-NRXf`ik1e;8L+0&s}>5Nxy;^a^n zyH-JXKLKX(a-RtL)Z=_zR=*cA(uQB6C7I9hB=XM_iIe<0Os34@lwb|ZhjFTxe>}HG zOTt{Sp7hOYi@^$~tslKQIykP&K0z!?Qid*d8MsQlmCrKgV6lZWynj`4qC{A7cvK=L zknO_{p)yIHs>*a}Bm_HGV7znI63eFer-$Sa0TG119JRhgrqkk;7&Un?G{(Vks;IxO z5_jIdPh*cO*hM~0Cq*xIf=|mIxo;IreWkelX&SHEwerD^=$7h`F*Yrg!W+lW_4={WxO~1PewVre5x_*BTYmd-iAr|ItoJ>- znDK`4MYz*zF|76+&7-X_(&8-xr)d;PPK zC}Y-h${1p=KFz5i4NySz*?zcZ;V6pGs&enGKW^WS$V8-uUxgZe_8e9jUf* z@|Dqfx}(Cblkz{o9_HUFvAEfFiSbFFn{|GsY34!w0mOws-@`MRVQ^UO^uz_W-csfy?CHd(Wu1>K*I{NYFa+5%AAGX=Ys*v7L7qX?B!SupY^8 zA_JY96XFQ??{d0}$+cUP%!R}9S)8XB!9^dBOdi$fgbC*_*vCB~RvM-)K+TW_;$nYq z=v0UU_C)DnMk+kVPwa(*_+WA){u0HIr}~si0j!0}qP<044ybcfyPwH0urF_0-1;06 zemy&1P&~bgV@1(kUAVgsbgeB10-am9HBC&K%uJ9&YI1 zQvad4M=EV_6D6LG%fCv~*b*7y+?adZAxZ;3NvhWV(RKidz5zjHoLah5Rv~+u_0^qc z93N+|NTkQwr8#7A6?f9u(J~CJk3!Z>H^?LlvEtOSL$i0Bf*-U>2!+duFF$u@11%Wem_Pc)tzcE8qBrYVmBCG)8!nHiQ0w?g@%Z5)h$8OC8BGgEmn3i~q#5_M zH5IDG_L`yahsLvq_uAP`6~3V;!zRDZ*Lu6Ur)ii-N1A5+CYz3ce3y_B(-J8 zXBXv#N26G&gszO#S-%BUU)v|<+}G`W!!6Oik6&|hf8q4dpzxjW9lhK@Kuc1IGG}{$ z0a>o_Pu6D_`{$Igm3hW^E>QH&-v$!=BO3L-c)a#`qgf;qaGL^4Fz=Jj2wp=q+g zi;=JURF1BhX_@5sdV5t>e=?|qNX{G6IQ_B9K6oXe z!X;mlSR**gcym>V)x>Ade;KV`i>sI-3qwUx;pKjlB~dKq`ATZi1(#f%L?=H)W{fe~(H`KXf2EOVk>?QnY^_qv`D$LG0l%t}qqlCBXC4Xqh9kHR z)mXBr*3RB5ZpceYVjp#PS&)7R*Ktv9@89grZ;)qjf!IhPu56|ba>$=J&U)sJDi@Pb z^&_=ha_TiMU8}#~k!{nE&+-#J?V`EvD8{#*`S-$7`L+a3m(dDlvpq-w0&g`j!t;xV zf>NC`7pXuOpv1D}D57R~upR}$m)xh7~2I*no6JKjL<^g5EU8*W~sY>1g~TsVc@}V*5P&Y z5P0vbUdmy%9GZB!aG(~>0I#y{ugB6y!eP{ESW_?+gv~E4NB@pm$=DzDuy2GFU3|1m@uJ9Nvsk!&)PF2v#@6G0;_@ngH?f*J7r4|Ws%(sX+@!!NT zgZ?bmbyW<0Cg11K&Ywf4cNeCphf^XpkJ!lgYF{$(AH~4_n}^7QJ1m(U@^t@A9P{Gu z03fnL2P6Y`{|ufMgIa2dSPia9hoBVm7iLVuM#)h{85{CHiT&DFu54i`Kr}sG@B3I4GxeGHqOcV9!XDE9a#2>kx-`WbL;_35vuVr2{r|9Bs^Mh z*=7+9fPvAx^}`z=uz|C>TUCy~&sl;cYT*54UGb|^N_Cj1nf<~n?XxZ<`(eb@igKT6h4^jpOkYTo2AaHLKG5|bPY>pSb-0Ga zf;Ai3NA&@ws2pw+{mK*=knrjl_A=p~wn67n&&!)_mRrewp1*PyXwV(o);l0Ua$y07 zMwYuf5^AN^&JhPlruXUtp>c^lZMhu9anv3Kg>7``OFoAyUHCOY0aS;chRU_C171Tf zMq&zV!kh|>U501$(-Htjtji)@aTgEmb3)osJ?XEU(j>Zt`tOl1e(>!qY$}cL=-pdu zL)zYWpQw*a^KVF8nLAtYCZY_|ch0fS>sL;wVsstbud^&&^yDEHgRdVDIuY)39&#YR z8@0$mY$W84ssRpTFdk-*t{2)y_BObZm~`p8O5 zm1*Ir`ADSg*9z_un57QtEu@;2HFYqttjXI%g^-CQ8{Jz$ZF6+*HiJ70Xs9sS6MQH8 z6*NO6)ysYReGdgesX5QfHDm$TLnQsB!uCZ3==r}#M{-ZB{|l2L82*0_lR0s>**NktW4fHw{SOgDr3#5g-!;2b*Du*}A2WD@m*W zN>qcGB7-2_FPmPP!uDSW>zv-xE)n_QZ&rg1xlQrksd!jOVBLI6@$#uV6sW8%};x^JJmmpOP6G9y6zg)nekmKez zso;d1$F>y1l<`P|2aYzSFOUY;?x0KmXz*gLlmZ$A!Uj!(>;?(Zu)IbvFTJf%VY`!b zZq89cKo)jn6t z3X#rtPA|qD zk#dJ28-jj?m?J_Y$&fPtap1TkZ`KY)LluX-s4z8~LKN)Ws+Pf|80LdF+wu)_@S=#d z4wFg4m@sMa!omHu>PShr8q<2D-T2V?(MJG&-l>rhnvOw!W2i#B1o;gBhYspva?-(( zd!H`&t2`UhskzCMPM@Gtx6>Y>$PPM{cuqX>pi{q3!M{6thq!_d>QmnC2V4l9u41Gm zk6&paah5ka3&g4RId4;-D}oOWIJ}%{dE|g&ks-(YfO8W z9aq5}8E|wIf9Qeq!GphAD*dM^^|$BX@0&{%(y25BBTaRrQ#R$%l|-6{_D?=1FRlnW z=oDc|wIb4~+!K=rl}l9-xYeEA>LSI#aMuZjqVWJpBv34DK^+V?Vbog`GTdQ@getxt zMw)&FJWHR~ry{iuSxW7fPv?-Q!cw|Qrf0Kv@Eha})vCw`e*;VRkxr#tG}6#RI+eqF z?*)+tbgGU7#9R&40nG@FrmW19GvVwSxf-KjXIfyuXZrp)aS(1kl|*+A8dK~zp*e>iU>*} z1l@+{eAp%#+ny)GRLFcLqCiNWfv8g#`lHTB)_>o6a0nmEbPkK7LW;KuxQvSmfTUuw zl}agd>>&!H+mF5>X3HZ@SRmU3srE#&FxzKjgkR)_P_#$`kWzBnW(WDD-!#h`wKZ^Z zWWKrnkMcJt3MY`TFDMyi%3iwy&fvjE$%Ln&%XZC!bZ1u#Jvg5YLUc$&huASibi69C+lCV_1DeW(TZ zPbxRx#yyrf{!qE;{x_AI9}L%?TbcW<=_9m}(h7C-1|r`BX}?l*H=$UiZJYwldC=?G zY%ylGBp)ZhAPc4C1k4>#`E+FTO9e{Um&o_8W)D>_U#Q6(lx?X8^_ngP+RF*5ZvQNV zV?$yD`YZ((kc9db#A{a#$N;w1iLw0sUr5owKO;qN{tYQ&Q+4@E`i6>)>OlJD`uG1# z`erEd`{GUqSHVMTb|{56C+r=%0ACf(BwiRAD8%`rYbRhtobua5{*RbtoqCcuZYtUM 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�BfrK)Y3tJ3#5OfQ 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 literal 0 HcmV?d00001 diff --git a/docs/images/mqc_cutadapt_trimmed.png b/docs/images/mqc_cutadapt_trimmed.png new file mode 100644 index 0000000000000000000000000000000000000000..af961653f902267be9908f3c14f4194f0b924296 GIT binary patch literal 86570 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
  • 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 literal 0 HcmV?d00001 diff --git a/docs/images/mqc_fastqc_counts.png b/docs/images/mqc_fastqc_counts.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6db52fd10591b4c23a00779c8442f8fd7bd4f8 GIT binary patch literal 91985 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 Toth&%0{_WKD2nHc89w@dpP+Z- literal 0 HcmV?d00001 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png new file mode 100644 index 0000000000000000000000000000000000000000..bcba22cbc9d96de4570345ab5baf1972d01438d2 GIT binary patch literal 66980 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
  • 5)|viqGLSizDOv`Q&$(0PP`t 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
    V*HGAsiD=_o#G>UXLJeF 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 U&)_|wz5)Ko%P311NgBWXe+s9pIsgCw literal 0 HcmV?d00001 diff --git a/docs/images/py_frag_hist.png b/docs/images/py_frag_hist.png new file mode 100755 index 0000000000000000000000000000000000000000..a72571b54d8974747329a29b40bc0de7e37a034b GIT binary patch literal 63476 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 literal 0 HcmV?d00001 diff --git a/docs/images/py_frags_in_peaks.png b/docs/images/py_frags_in_peaks.png new file mode 100755 index 0000000000000000000000000000000000000000..3d2f6338558e40653b9ad7803d4ae3e5379a8dc4 GIT binary patch literal 14365 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 literal 0 HcmV?d00001 diff --git a/docs/images/py_reproduced_peaks.png b/docs/images/py_reproduced_peaks.png new file mode 100755 index 0000000000000000000000000000000000000000..c9517b316964bdb321462e83bda220c2187b1642 GIT binary patch literal 13245 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 QfoMiB3aXd$E}7l?FTxU()&Kwi literal 0 HcmV?d00001 From 442a16d246f18760f1d935821023e42571b71286 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 09:34:04 +0100 Subject: [PATCH 232/675] sra python scripts --- bin/sra_ids_to_runinfo.py | 178 ++++++++++++++++++++++++++++++++++++++ bin/sra_runinfo_to_ftp.py | 114 ++++++++++++++++++++++++ 2 files changed, 292 insertions(+) create mode 100644 bin/sra_ids_to_runinfo.py create mode 100644 bin/sra_runinfo_to_ftp.py diff --git a/bin/sra_ids_to_runinfo.py b/bin/sra_ids_to_runinfo.py new file mode 100644 index 00000000..002a859a --- /dev/null +++ b/bin/sra_ids_to_runinfo.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python + +import os +import re +import sys +import csv +import errno +import requests +import argparse + + +## Example ids supported by this script +SRA_IDS = ['PRJNA63463', 'SAMN00765663', 'SRA023522', 'SRP003255', 'SRR390278', 'SRS282569', 'SRX111814'] +ENA_IDS = ['ERA2421642', 'ERP120836', 'ERR674736', 'ERS4399631', 'ERX629702', 'PRJEB7743', 'SAMEA3121481'] +GEO_IDS = ['GSE18729', 'GSM465244'] +ID_REGEX = r'^[A-Z]+' +PREFIX_LIST = sorted(list(set([re.search(ID_REGEX,x).group() for x in SRA_IDS + ENA_IDS + GEO_IDS]))) + + +def parse_args(args=None): + Description = 'Download and create a run information metadata file from SRA/ENA/GEO identifiers.' + Epilog = 'Example usage: python fetch_sra_runinfo.py ' + + parser = argparse.ArgumentParser(description=Description, epilog=Epilog) + parser.add_argument('FILE_IN', help="File containing database identifiers, one per line.") + parser.add_argument('FILE_OUT', help="Output file in tab-delimited format.") + parser.add_argument('-pl', '--platform', type=str, dest="PLATFORM", default='', help="Comma-separated list of platforms to use for filtering. Accepted values = 'ILLUMINA', 'OXFORD_NANOPORE' (default: '').") + parser.add_argument('-ll', '--library_layout', type=str, dest="LIBRARY_LAYOUT", default='', help="Comma-separated list of library layouts to use for filtering. Accepted values = 'SINGLE', 'PAIRED' (default: '').") + return parser.parse_args(args) + + +def validate_csv_param(param,valid_vals,param_desc): + valid_list = [] + if param: + user_vals = param.split(',') + intersect = list(set(user_vals) & set(valid_vals)) + if len(intersect) == len(user_vals): + valid_list = intersect + else: + print("ERROR: Please provide a valid {} parameter!\nProvided values = {}\nAccepted values = {}".format(param_desc,param,','.join(validVals))) + sys.exit(1) + return valid_list + + +def make_dir(path): + if not len(path) == 0: + try: + os.makedirs(path) + except OSError as exception: + if exception.errno != errno.EEXIST: + raise + + +def fetch_url(url,encoding='utf-8'): + try: + r = requests.get(url) + except requests.exceptions.RequestException as e: + raise SystemExit(e) + if r.status_code != 200: + print("ERROR: Connection failed\nError code '{}'".format(r.status_code)) + sys.exit(1) + return r.content.decode(encoding).splitlines() + + +def id_to_srx(db_id): + ids = [] + url = 'https://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?save=efetch&db=sra&rettype=runinfo&term={}'.format(db_id) + for row in csv.DictReader(fetch_url(url), delimiter=','): + ids.append(row['Experiment']) + return ids + + +def id_to_erx(db_id): + ids = [] + fields = ['run_accession', 'experiment_accession'] + url = 'http://www.ebi.ac.uk/ena/data/warehouse/filereport?accession={}&result=read_run&fields={}'.format(db_id,','.join(fields)) + for row in csv.DictReader(fetch_url(url), delimiter='\t'): + ids.append(row['experiment_accession']) + return ids + + +def gse_to_srx(db_id): + ids = [] + url = 'https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc={}&targ=gsm&view=data&form=text'.format(db_id) + gsm_ids = [x.split('=')[1].strip() for x in fetch_url(url) if x.find('GSM') != -1] + for gsm_id in gsm_ids: + ids += id_to_srx(gsm_id) + return ids + + +def get_ena_fields(): + fields = [] + url = 'https://www.ebi.ac.uk/ena/portal/api/returnFields?dataPortal=ena&format=tsv&result=read_run' + for row in csv.DictReader(fetch_url(url), delimiter='\t'): + fields.append(row['columnId']) + return fields + + +def fetch_sra_runinfo(file_in,file_out,platform_list=[],library_layout_list=[]): + total_out = 0 + seen_ids = []; run_ids = [] + header = [] + make_dir(os.path.dirname(file_out)) + ena_fields = get_ena_fields() + with open(file_in,"r") as fin, open(file_out,"w") as fout: + for line in fin: + db_id = line.strip() + match = re.search(ID_REGEX, db_id) + if match: + prefix = match.group() + if prefix in PREFIX_LIST: + if not db_id in seen_ids: + + ids = [db_id] + ## Resolve/expand these ids against GEO URL + if prefix in ['GSE']: + ids = gse_to_srx(db_id) + + ## Resolve/expand these ids against SRA URL + elif prefix in ['GSM', 'PRJNA', 'SAMN', 'SRR']: + ids = id_to_srx(db_id) + + ## Resolve/expand these ids against ENA URL + elif prefix in ['ERR']: + ids = id_to_erx(db_id) + + ## Resolve/expand to get run identifier from ENA and write to file + for id in ids: + url = 'http://www.ebi.ac.uk/ena/data/warehouse/filereport?accession={}&result=read_run&fields={}'.format(id,','.join(ena_fields)) + csv_dict = csv.DictReader(fetch_url(url), delimiter='\t') + for row in csv_dict: + run_id = row['run_accession'] + if not run_id in run_ids: + + write_id = True + if platform_list: + if row['instrument_platform'] not in platform_list: + write_id = False + if library_layout_list: + if row['library_layout'] not in library_layout_list: + write_id = False + + if write_id: + if total_out == 0: + header = sorted(row.keys()) + fout.write('{}\n'.format('\t'.join(sorted(header)))) + else: + if header != sorted(row.keys()): + print("ERROR: Metadata columns do not match for id {}!\nLine: '{}'".format(run_id,line.strip())) + sys.exit(1) + fout.write('{}\n'.format('\t'.join([row[x] for x in header]))) + total_out += 1 + run_ids.append(run_id) + seen_ids.append(db_id) + + if not ids: + print("ERROR: No matches found for database id {}!\nLine: '{}'".format(db_id,line.strip())) + sys.exit(1) + + else: + id_str = ', '.join([x + "*" for x in PREFIX_LIST]) + print("ERROR: Please provide a valid database id starting with {}!\nLine: '{}'".format(id_str,line.strip())) + sys.exit(1) + else: + id_str = ', '.join([x + "*" for x in PREFIX_LIST]) + print("ERROR: Please provide a valid database id starting with {}!\nLine: '{}'".format(id_str,line.strip())) + sys.exit(1) + + +def main(args=None): + args = parse_args(args) + platform_list = validate_csv_param(args.PLATFORM,valid_vals=['ILLUMINA'],param_desc='--platform') + library_layout_list = validate_csv_param(args.LIBRARY_LAYOUT,valid_vals=['SINGLE', 'PAIRED'],param_desc='--library_layout') + fetch_sra_runinfo(args.FILE_IN,args.FILE_OUT,platform_list,library_layout_list) + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/bin/sra_runinfo_to_ftp.py b/bin/sra_runinfo_to_ftp.py new file mode 100644 index 00000000..a4dc0266 --- /dev/null +++ b/bin/sra_runinfo_to_ftp.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python + +import os +import sys +import errno +import argparse +import collections + + +def parse_args(args=None): + Description = "Create samplesheet with FTP download links and md5ums from sample information obtained via 'sra_ids_to_runinfo.py' script." + Epilog = 'Example usage: python sra_runinfo_to_ftp.py ' + + parser = argparse.ArgumentParser(description=Description, epilog=Epilog) + parser.add_argument('FILES_IN', help="Comma-separated list of metadata file created from 'sra_ids_to_runinfo.py' script.") + parser.add_argument('FILE_OUT', help="Output file containing paths to download FastQ files along with their associated md5sums.") + return parser.parse_args(args) + + +def make_dir(path): + if not len(path) == 0: + try: + os.makedirs(path) + except OSError as exception: + if exception.errno != errno.EEXIST: + raise + + +def parse_sra_runinfo(file_in): + runinfo_dict = {} + with open(file_in, "r") as fin: + header = fin.readline().strip().split('\t') + for line in fin: + line_dict = dict(zip(header,line.strip().split('\t'))) + line_dict = collections.OrderedDict(sorted(list(line_dict.items()))) + run_id = line_dict['run_accession'] + exp_id = line_dict['experiment_accession'] + library = line_dict['library_layout'] + fastq_files = line_dict['fastq_ftp'] + fastq_md5 = line_dict['fastq_md5'] + print(line_dict) + + db_id = exp_id + sample_dict = collections.OrderedDict() + if library == 'SINGLE': + sample_dict = collections.OrderedDict([('fastq_1',''), ('fastq_2',''), ('md5_1',''), ('md5_2',''), ('single_end','true')]) + if fastq_files: + sample_dict['fastq_1'] = fastq_files + sample_dict['md5_1'] = fastq_md5 + else: + ## In some instances FTP links don't exist for FastQ files + ## These have to be downloaded via fastq-dump / fasterq-dump / parallel-fastq-dump via the run id + db_id = run_id + + elif library == 'PAIRED': + sample_dict = collections.OrderedDict([('fastq_1',''), ('fastq_2',''), ('md5_1',''), ('md5_2',''), ('single_end','false')]) + if fastq_files: + fq_files = fastq_files.split(';')[-2:] + fq_md5 = fastq_md5.split(';')[-2:] + if len(fq_files) == 2: + if fq_files[0].find('_1.fastq.gz') != -1 and fq_files[1].find('_2.fastq.gz') != -1: + sample_dict['fastq_1'] = fq_files[0] + sample_dict['fastq_2'] = fq_files[1] + sample_dict['md5_1'] = fq_md5[0] + sample_dict['md5_2'] = fq_md5[1] + else: + print("Invalid FastQ files found for database id:'{}'!.".format(run_id)) + else: + print("Invalid number of FastQ files ({}) found for paired-end database id:'{}'!.".format(len(fq_files), run_id)) + else: + db_id = run_id + + if sample_dict: + sample_dict.update(line_dict) + if db_id not in runinfo_dict: + runinfo_dict[db_id] = [sample_dict] + else: + if sample_dict in runinfo_dict[db_id]: + print("Input run info file contains duplicate rows!\nLine: '{}'".format(line)) + else: + runinfo_dict[db_id].append(sample_dict) + + return runinfo_dict + + +def sra_runinfo_to_ftp(files_in,file_out): + samplesheet_dict = {} + for file_in in files_in: + runinfo_dict = parse_sra_runinfo(file_in) + for db_id in runinfo_dict.keys(): + if db_id not in samplesheet_dict: + samplesheet_dict[db_id] = runinfo_dict[db_id] + else: + print("Duplicate sample identifier found!\nID: '{}'".format(db_id)) + + ## Write samplesheet with paths to FastQ files and md5 sums + if samplesheet_dict: + out_dir = os.path.dirname(file_out) + make_dir(out_dir) + with open(file_out, "w") as fout: + header = ['id'] + list(samplesheet_dict[list(samplesheet_dict.keys())[0]][0].keys()) + fout.write("\t".join(header) + "\n") + for db_id in sorted(samplesheet_dict.keys()): + for idx,val in enumerate(samplesheet_dict[db_id]): + fout.write('\t'.join(["{}_T{}".format(db_id,idx+1)] + [val[x] for x in header[1:]]) + '\n') + + +def main(args=None): + args = parse_args(args) + sra_runinfo_to_ftp([x.strip() for x in args.FILES_IN.split(',')], args.FILE_OUT) + + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file From 24b3e743234f451c2780a19b885cc7130b4f9fef Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 09:38:11 +0100 Subject: [PATCH 233/675] change report to reporting --- docs/output.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/output.md b/docs/output.md index cab61e62..fcafffef 100644 --- a/docs/output.md +++ b/docs/output.md @@ -29,7 +29,7 @@ and processes data using the following steps: * [Deeptools](#deeptools) - Analysis of peaks * [Summary and quality control](#summary-and-quality-control) * [DESeq2](#deseq2) - PCA plot and differential peak analysis - * [Python report](#python-report) + * [Python reporting](#python-reporting) * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similiarity * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes * [Workflow reporting and genomes](#workflow-reporting-and-genomes) @@ -195,8 +195,8 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i [SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. -![Python report - peaks reproduced](images/py_reproduced_peaks.png) -![Python report - aligned fragments within peaks](images/py_frags_in_peaks.png) +![Python reporting - peaks reproduced](images/py_reproduced_peaks.png) +![Python reporting - aligned fragments within peaks](images/py_frags_in_peaks.png) ### Deeptools @@ -238,7 +238,7 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i The script included in the pipeline uses DESeq2 to normalise read counts across all of the provided samples in order to create a PCA plot and a clustered heatmap showing pairwise Euclidean distances between the samples in the experiment. These help to show the similarity between groups of samples and can reveal batch effects and other potential issues with the experiment. -### Python report +### Python reporting
    Output files @@ -252,7 +252,7 @@ The script included in the pipeline uses DESeq2 to normalise read counts across Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data are reported in this module. This report was adapted in python from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). -![Python report - fragment length distribution](images/py_frag_hist.png) +![Python reporting - fragment length distribution](images/py_frag_hist.png) ### MultiQC From d42e3beff0cdede9ba8965d2ebc3f219b252d050 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 10:13:36 +0100 Subject: [PATCH 234/675] add executability --- bin/sra_ids_to_runinfo.py | 0 bin/sra_runinfo_to_ftp.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bin/sra_ids_to_runinfo.py mode change 100644 => 100755 bin/sra_runinfo_to_ftp.py diff --git a/bin/sra_ids_to_runinfo.py b/bin/sra_ids_to_runinfo.py old mode 100644 new mode 100755 diff --git a/bin/sra_runinfo_to_ftp.py b/bin/sra_runinfo_to_ftp.py old mode 100644 new mode 100755 From 3c356531bf09b70ffc2331a77d325ed31ff93cf3 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 11:06:53 +0100 Subject: [PATCH 235/675] add citations.md file --- CITATIONS.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 17 ++---------- 2 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 CITATIONS.md diff --git a/CITATIONS.md b/CITATIONS.md new file mode 100644 index 00000000..59c227e0 --- /dev/null +++ b/CITATIONS.md @@ -0,0 +1,74 @@ +# nf-core/cutandrun: Citations + +## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) + +> Ewels PA, Peltzer A, Fillinger S, Patel H, Alneberg J, Wilm A, Garcia MU, Di Tommaso P, Nahnsen S. The nf-core framework for community-curated bioinformatics pipelines. Nat Biotechnol. 2020 Mar;38(3):276-278. doi: 10.1038/s41587-020-0439-x. PubMed PMID: 32055031. + +## [Nextflow](https://pubmed.ncbi.nlm.nih.gov/28398311/) + +> Di Tommaso P, Chatzou M, Floden EW, Barja PP, Palumbo E, Notredame C. Nextflow enables reproducible computational workflows. Nat Biotechnol. 2017 Apr 11;35(4):316-319. doi: 10.1038/nbt.3820. PubMed PMID: 28398311. + +## Pipeline tools + +* [BEDTools](https://pubmed.ncbi.nlm.nih.gov/20110278/) + > Quinlan AR, Hall IM. BEDTools: a flexible suite of utilities for comparing genomic features. Bioinformatics. 2010 Mar 15;26(6):841-2. doi: 10.1093/bioinformatics/btq033. Epub 2010 Jan 28. PubMed PMID: 20110278; PubMed Central PMCID: PMC2832824. + +* [Bowtie2](https://pubmed.ncbi.nlm.nih.gov/22388286/) + > Langmead B, Salzberg SL. Fast gapped-read alignment with Bowtie 2. Nat Methods. 2012 Mar 4;9(4):357-9. doi: 10.1038/nmeth.1923. PMID: 22388286; PMCID: PMC3322381. + +* [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + +* [`IGV`](https://software.broadinstitute.org/software/igv/) + > Thorvaldsdóttir H, Robinson JT, Mesirov JP. Integrative Genomics Viewer (IGV): high-performance genomics data visualization and exploration. Brief Bioinform. 2013 Mar;14(2):178-92. doi: 10.1093/bib/bbs017. Epub 2012 Apr 19. PMID: 22517427; PMCID: PMC3603213. + +* [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) + > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. + +* [picard-tools](http://broadinstitute.github.io/picard) + +* [SAMtools](https://pubmed.ncbi.nlm.nih.gov/19505943/) + > Li H, Handsaker B, Wysoker A, Fennell T, Ruan J, Homer N, Marth G, Abecasis G, Durbin R; 1000 Genome Project Data Processing Subgroup. The Sequence Alignment/Map format and SAMtools. Bioinformatics. 2009 Aug 15;25(16):2078-9. doi: 10.1093/bioinformatics/btp352. Epub 2009 Jun 8. PubMed PMID: 19505943; PubMed Central PMCID: PMC2723002. + +* [`SEACR`](https://github.com/FredHutch/SEACR) + > Meers MP, Tenenbaum D, Henikoff S. Peak calling by Sparse Enrichment Analysis for CUT&RUN chromatin profiling. Epigenetics Chromatin. 2019 Jul 12;12(1):42. doi: 10.1186/s13072-019-0287-4. PMID: 31300027; PMCID: PMC6624997. + +* [Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) + +* [UCSC tools](https://pubmed.ncbi.nlm.nih.gov/20639541/) + > Kent WJ, Zweig AS, Barber G, Hinrichs AS, Karolchik D. BigWig and BigBed: enabling browsing of large distributed datasets. Bioinformatics. 2010 Sep 1;26(17):2204-7. doi: 10.1093/bioinformatics/btq351. Epub 2010 Jul 17. PubMed PMID: 20639541; PubMed Central PMCID: PMC2922891. + +## R packages + +* [R](https://www.R-project.org/) + > R Core Team (2017). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. + +* [DESeq2](https://pubmed.ncbi.nlm.nih.gov/25516281/) + > Love MI, Huber W, Anders S. Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biol. 2014;15(12):550. PubMed PMID: 25516281; PubMed Central PMCID: PMC4302049. + +* [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html) + > H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016. + +* [optparse](https://CRAN.R-project.org/package=optparse) + > Trevor L Davis (2018). optparse: Command Line Option Parser. + +* [pheatmap](https://CRAN.R-project.org/package=pheatmap) + > Raivo Kolde (2018). pheatmap: Pretty Heatmaps. + +* [RColorBrewer](https://CRAN.R-project.org/package=RColorBrewer) + > Erich Neuwirth (2014). RColorBrewer: ColorBrewer Palettes. + +## Software packaging/containerisation tools + +* [Anaconda](https://anaconda.com) + > Anaconda Software Distribution. Computer software. Vers. 2-2.4.0. Anaconda, Nov. 2016. Web. + +* [Bioconda](https://pubmed.ncbi.nlm.nih.gov/29967506/) + > Grüning B, Dale R, Sjödin A, Chapman BA, Rowe J, Tomkins-Tinch CH, Valieris R, Köster J; Bioconda Team. Bioconda: sustainable and comprehensive software distribution for the life sciences. Nat Methods. 2018 Jul;15(7):475-476. doi: 10.1038/s41592-018-0046-7. PubMed PMID: 29967506. + +* [BioContainers](https://pubmed.ncbi.nlm.nih.gov/28379341/) + > da Veiga Leprevost F, Grüning B, Aflitos SA, Röst HL, Uszkoreit J, Barsnes H, Vaudel M, Moreno P, Gatto L, Weber J, Bai M, Jimenez RC, Sachsenberg T, Pfeuffer J, Alvarez RV, Griss J, Nesvizhskii AI, Perez-Riverol Y. BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics. 2017 Aug 15;33(16):2580-2582. doi: 10.1093/bioinformatics/btx192. PubMed PMID: 28379341; PubMed Central PMCID: PMC5870671. + +* [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) + +* [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) + > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. diff --git a/README.md b/README.md index eff7e95f..1f7ff68a 100644 --- a/README.md +++ b/README.md @@ -75,21 +75,10 @@ On release, automated continuous integration tests run the pipeline on a full-si See [usage docs](https://nf-co.re/cutandrun/usage) for all of the available options when running the pipeline. -## Pipeline Summary - -By default, the pipeline currently performs the following: - - - -* Sequencing quality control (`FastQC`) -* Overall pipeline run summaries (`MultiQC`) - ## Documentation The nf-core/cutandrun pipeline comes with documentation about the pipeline: [usage](https://nf-co.re/cutandrun/usage) and [output](https://nf-co.re/cutandrun/output). - - ## Credits nf-core/cutandrun was originally written by Chris Cheshire ([@chris-cheshire](https://github.com/chris-cheshire)) and Charlotte West ([@charlotte-west](https://github.com/charlotte-west)) from [Luscombe Lab](https://www.crick.ac.uk/research/labs/nicholas-luscombe) at [The Francis Crick Institute](https://www.crick.ac.uk/), London, UK. @@ -112,6 +101,8 @@ For further information or help, don't hesitate to get in touch on the [Slack `# +An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. + You can cite the `nf-core` publication as follows: > **The nf-core framework for community-curated bioinformatics pipelines.** @@ -119,7 +110,3 @@ You can cite the `nf-core` publication as follows: > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > > _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). - -In addition, references of tools and data used in this pipeline are as follows: - - From b9f36ff48c013ff882d5f2b3d53acc9648545876 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 11:25:30 +0100 Subject: [PATCH 236/675] remove TODOs --- bin/check_samplesheet.py | 3 --- conf/base.config | 2 -- 2 files changed, 5 deletions(-) diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index debe4df2..d2a523d3 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -1,6 +1,5 @@ #!/usr/bin/env python -# TODO nf-core: Update the script to check the samplesheet # This script is based on the example at: https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/design.csv @@ -40,7 +39,6 @@ def print_error(error, context="Line", context_str=""): sys.exit(1) -# TODO nf-core: Update the check_samplesheet function def check_samplesheet(file_in, file_out, igg_control): """ This function checks that the samplesheet follows the following structure: @@ -59,7 +57,6 @@ def check_samplesheet(file_in, file_out, igg_control): ## Check header MIN_COLS = 3 - # TODO nf-core: Update the column names for the input samplesheet HEADER = ["group", "replicate", "fastq_1", "fastq_2"] header = [x.strip('"') for x in fin.readline().strip().split(",")] if header[: len(HEADER)] != HEADER: diff --git a/conf/base.config b/conf/base.config index 4e374600..e4084638 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,7 +11,6 @@ process { - // TODO nf-core: Check the defaults for all processes cpus = { check_max( 1 * task.attempt, 'cpus' ) } memory = { check_max( 7.GB * task.attempt, 'memory' ) } time = { check_max( 4.h * task.attempt, 'time' ) } @@ -24,7 +23,6 @@ process { // NOTE - Only one of the labels below are used in the fastqc process in the main script. // If possible, it would be nice to keep the same label naming convention when // adding in your processes. - // TODO nf-core: Customise requirements for specific processes. // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors withLabel:process_low { cpus = { check_max( 2 * task.attempt, 'cpus' ) } From ea78212b555d6c76fb2ef321150ec8b02fea3e60 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 11:34:07 +0100 Subject: [PATCH 237/675] update to new version of scrape_software_versions.py. software_versions.csv now working --- bin/scrape_software_versions.py | 60 +++++++++++---------------------- workflows/cutandrun.nf | 9 +++++ 2 files changed, 29 insertions(+), 40 deletions(-) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 521eccfe..fd688b54 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -1,54 +1,34 @@ #!/usr/bin/env python from __future__ import print_function -from collections import OrderedDict -import re +import os -# TODO nf-core: Add additional regexes for new tools in process get_software_versions -regexes = { - "nf-core/cutandrun": ["v_pipeline.txt", r"(\S+)"], - "Nextflow": ["v_nextflow.txt", r"(\S+)"], - "FastQC": ["v_fastqc.txt", r"FastQC v(\S+)"], - "MultiQC": ["v_multiqc.txt", r"multiqc, version (\S+)"], -} -results = OrderedDict() -results["nf-core/cutandrun"] = 'N/A' -results["Nextflow"] = 'N/A' -results["FastQC"] = 'N/A' -results["MultiQC"] = 'N/A' +results = {} +version_files = [x for x in os.listdir('.') if x.endswith('.version.txt')] +for version_file in version_files: -# Search each file using its regex -for k, v in regexes.items(): - try: - with open(v[0]) as x: - versions = x.read() - match = re.search(v[1], versions) - if match: - results[k] = "v{}".format(match.group(1)) - except IOError: - results[k] = False + software = version_file.replace('.version.txt','') + if software == 'pipeline': + software = 'nf-core/rnaseq' -# Remove software set to false in results -for k in list(results): - if not results[k]: - del results[k] + with open(version_file) as fin: + version = fin.read().strip() + results[software] = version # Dump to YAML -print( - """ +print (''' id: 'software_versions' -section_name: 'nf-core/cutandrun Software Versions' -section_href: 'https://github.com/nf-core/cutandrun' +section_name: 'nf-core/rnaseq Software Versions' +section_href: 'https://github.com/nf-core/rnaseq' plot_type: 'html' description: 'are collected at run time from the software output.' data: |
    -""" -) -for k, v in results.items(): - print("
    {}
    {}
    ".format(k, v)) -print("
    ") +''') +for k,v in sorted(results.items()): + print("
    {}
    {}
    ".format(k,v)) +print (" ") # Write out regexes as csv file: -with open("software_versions.csv", "w") as f: - for k, v in results.items(): - f.write("{}\t{}\n".format(k, v)) +with open('software_versions.csv', 'w') as f: + for k,v in sorted(results.items()): + f.write("{}\t{}\n".format(k,v)) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 2f09021d..5284e5d9 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -765,6 +765,15 @@ workflow CUTANDRUN { /* * MODULE: Collect software versions used in pipeline */ + + ch_software_versions + .map { it -> if (it) [ it.baseName, it ] } + .groupTuple() + .map { it[1][0] } + .flatten() + .collect() + .set { ch_software_versions } + GET_SOFTWARE_VERSIONS ( ch_software_versions.map { it }.collect() ) From 4069feebeeca6ee09e85c075fbd9f7057bb0ad8e Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 12:05:55 +0100 Subject: [PATCH 238/675] credit contributors --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 1f7ff68a..7d646be9 100644 --- a/README.md +++ b/README.md @@ -85,10 +85,7 @@ nf-core/cutandrun was originally written by Chris Cheshire ([@chris-cheshire](ht The pipeline structure and parts of the downstream analysis were adapted from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). -We thank the following people for their extensive assistance in the development -of this pipeline: - - +We thank Harshil Patel ([@drpatelh](https://github.com/drpatelh)) and everyone in the Luscombe Lab ([@luslab](https://github.com/luslab)) for their extensive assistance in the development of this pipeline. ## Contributions and Support From 05b797e9491a7121c8e258c5d895e6d2c78eb1fa Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 12:08:48 +0100 Subject: [PATCH 239/675] cleanup --- workflows/cutandrun.nf | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 5284e5d9..f305aa3f 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -607,14 +607,12 @@ workflow CUTANDRUN { ) } - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // scale_factor:10000], MATRIX] //DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix | view - /* * MODULE: Extract max signal from peak beds */ @@ -736,30 +734,6 @@ workflow CUTANDRUN { SAMTOOLS_SORT.out.bam.collect{it[1]} // bam files sorted by mate pair ids ) ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) - - // ch_samtools_bam - // .map { row -> [row[0].id, row[0], row[1] ] } - // .set { ch_samtools_bam_id } - - // ch_samtools_bai - // .map { row -> [row[0].id, row[0], row[1] ] } - // .set { ch_samtools_bai_id } - - // ch_samtools_bam_id - // .join( ch_samtools_bai_id ) - // .map { row -> [row[1], row[2], row[4] ] } - // .set { ch_samtools_bam_bai } - // ch_samtools_bam_bai | view - - // DEEPTOOLS_BAMPEFRAGMENTSIZE(ch_samtools_bam_bai, ch_blacklist) - // //DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv | view - // ANNOTATE_DT_FRAG_META( ANNOTATE_DEDUP_META.out.output, DEEPTOOLS_BAMPEFRAGMENTSIZE.out.summary_csv, ch_dt_frag_to_csv_awk) - //ANNOTATE_DT_FRAG_META.out.output | view - - // // Filter bam bai channels for non-igg only - // ch_samtools_bam_bai - // .filter { it[0].group != "igg" } - // .set { ch_no_igg_bam_bai } } /* From 99263a969532313225364c91e2fda75d0fc03fbd Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 12:23:08 +0100 Subject: [PATCH 240/675] fix spelling mistakes --- docs/output.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/output.md b/docs/output.md index fcafffef..46b87518 100644 --- a/docs/output.md +++ b/docs/output.md @@ -30,7 +30,7 @@ and processes data using the following steps: * [Summary and quality control](#summary-and-quality-control) * [DESeq2](#deseq2) - PCA plot and differential peak analysis * [Python reporting](#python-reporting) - * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similiarity + * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similarity * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes * [Workflow reporting and genomes](#workflow-reporting-and-genomes) * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files @@ -102,7 +102,7 @@ If multiple libraries/runs have been provided for the same sample in the input s
    -[Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) is a wrapper tool around Cutadapt and FastQC to peform quality and adapter trimming on FastQ files. By default, Trim Galore! will automatically detect and trim the appropriate adapter sequence. +[Trim Galore!](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/) is a wrapper tool around Cutadapt and FastQC to perform quality and adapter trimming on FastQ files. By default, Trim Galore! will automatically detect and trim the appropriate adapter sequence. > **NB:** TrimGalore! will only run using multiple cores if you are able to use more than > 5 and > 6 CPUs for single- and paired-end data, respectively. The total cores available to TrimGalore! will also be capped at 4 (7 and 8 CPUs in total for single- and paired-end data, respectively) because there is no longer a run-time benefit. See [release notes](https://github.com/FelixKrueger/TrimGalore/blob/master/Changelog.md#version-060-release-on-1-mar-2019) and [discussion whilst adding this logic to the nf-core/atacseq pipeline](https://github.com/nf-core/atacseq/pull/65). @@ -128,7 +128,7 @@ If multiple libraries/runs have been provided for the same sample in the input s
  • -Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowtie 2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml). A genome index is required to run Bowtie2 which is created automatically from the genome fasta input. By default, the only alignment files output are the quality filtered, marked and/or deduplicated alignment files. To output all alignment files inlcuding those directly from the aligner, set `--publish_align_intermed true`. +Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowtie 2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml). A genome index is required to run Bowtie2 which is created automatically from the genome fasta input. By default, the only alignment files output are the quality filtered, marked and/or deduplicated alignment files. To output all alignment files including those directly from the aligner, set `--publish_align_intermed true`. ![MultiQC - Bowtie2 paired-end mapping stats](images/mqc_bowtie2_pe.png) @@ -163,7 +163,7 @@ BAM files are filtered for a minimum quality score of 0 using [SAMtools](http:// -By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to guage the overall level of duplication in your samples. If your data includes IgG controls, these will additionally be deduplicated. You can skip this step via the `--skip_markduplicates` parameter. By default, this is the final processing step for the target BAM files and will appear in `aligner/bowtie2/`. However, if `--skip_markduplicates true` is set, this step will be skipped. +By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to gauge the overall level of duplication in your samples. If your data includes IgG controls, these will additionally be deduplicated. You can skip this step via the `--skip_markduplicates` parameter. By default, this is the final processing step for the target BAM files and will appear in `aligner/bowtie2/`. However, if `--skip_markduplicates true` is set, this step will be skipped. ![MultiQC - Picard MarkDuplicates metrics plot](images/mqc_picard_markduplicates.png) @@ -208,10 +208,9 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i * `.computeMatrix.mat.gz`: heatmap matrix. * `*.mat.tab`: matrix and heatmap configs. - -[Deeptools](https://github.com/deeptools/deepTools/) subtools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. +[Deeptools](https://github.com/deeptools/deepTools/) sub-tools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. ## Summary and quality control From 80e312494215cc96a3e3f24e8f0c28b5a0f0e14a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 13:47:17 +0100 Subject: [PATCH 241/675] remove unused parameter --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index f3dc0925..5b01b109 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,7 +25,6 @@ params { // Sample handling save_merged_fastq = false - save_intermediate_bams = false // Trimming clip_r1 = 0 From 85f1287237436784a7c82057cc0758c49efe1fcd Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 13:50:04 +0100 Subject: [PATCH 242/675] syntax fix --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 27480f04..9550411a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -347,7 +347,7 @@ }, "igg_control": { "type": "boolean", - "default": "true" + "default": true }, "peak_threshold": { "type": "number", From 48281b22add54537f7c70fdb53638d9f554c0a84 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 13:50:40 +0100 Subject: [PATCH 243/675] remove unneeded param --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 5b01b109..e3b7a7aa 100644 --- a/nextflow.config +++ b/nextflow.config @@ -44,7 +44,6 @@ params { skip_removeduplicates = false dedup_target_reads = false minimum_alignment_q_score = 0 - min_mapped_reads = 5 // Coverage normalisation_c = 10000 From 7191c27ff8309a1dafc613d6f0b2b6ea17b8ca96 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 13:53:05 +0100 Subject: [PATCH 244/675] fix Jinja template linting error --- workflows/cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index f305aa3f..8d239e15 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -720,7 +720,7 @@ workflow CUTANDRUN { * MODULE: Export meta-data to csv file */ EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty(["{{NO-DATA}}"]) + ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) ) /* From dabfe74055ebfa4be440632b46afa4c588dbbfd4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 14:15:51 +0100 Subject: [PATCH 245/675] Updated schema --- nextflow_schema.json | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 9550411a..410196d7 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -82,7 +82,6 @@ "publish_dir_mode": { "type": "string", "default": "copy", - "hidden": true, "description": "Method used to save pipeline results to output directory.", "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", "fa_icon": "fas fa-copy", @@ -107,14 +106,12 @@ "description": "Email address for completion summary, only when pipeline fails.", "fa_icon": "fas fa-exclamation-triangle", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", - "hidden": true, "help_text": "This works exactly as with `--email`, except emails are only sent if the workflow is not successful." }, "plaintext_email": { "type": "boolean", "description": "Send plain-text email instead of HTML.", "fa_icon": "fas fa-remove-format", - "hidden": true, "help_text": "Set to receive plain-text e-mails instead of HTML formatted." }, "max_multiqc_email_size": { @@ -122,14 +119,12 @@ "description": "File size limit when attaching MultiQC reports to summary emails.", "default": "25.MB", "fa_icon": "fas fa-file-upload", - "hidden": true, "help_text": "If file generated by pipeline exceeds the threshold, it will not be attached." }, "monochrome_logs": { "type": "boolean", "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", - "hidden": true, "help_text": "Set to disable colourful command line output and live life in monochrome." }, "multiqc_config": { @@ -166,7 +161,6 @@ "description": "Maximum number of CPUs that can be requested for any single job.", "default": 16, "fa_icon": "fas fa-microchip", - "hidden": true, "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" }, "max_memory": { @@ -175,7 +169,6 @@ "default": "128.GB", "fa_icon": "fas fa-memory", "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "hidden": true, "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, "max_time": { @@ -184,7 +177,6 @@ "default": "240.h", "fa_icon": "far fa-clock", "pattern": "^(\\d+\\.?\\s*(s|m|h|day)\\s*)+$", - "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } } @@ -221,25 +213,21 @@ "config_profile_name": { "type": "string", "description": "Institutional config name.", - "hidden": true, "fa_icon": "fas fa-users-cog" }, "config_profile_description": { "type": "string", "description": "Institutional config description.", - "hidden": true, "fa_icon": "fas fa-users-cog" }, "config_profile_contact": { "type": "string", "description": "Institutional config contact information.", - "hidden": true, "fa_icon": "fas fa-users-cog" }, "config_profile_url": { "type": "string", "description": "Institutional config URL link.", - "hidden": true, "fa_icon": "fas fa-users-cog" } } @@ -290,24 +278,19 @@ "type": "string" }, "clip_r1": { - "type": "integer", - "default": 0 + "type": "integer" }, "clip_r2": { - "type": "integer", - "default": 0 + "type": "integer" }, "three_prime_clip_r1": { - "type": "integer", - "default": 0 + "type": "integer" }, "three_prime_clip_r2": { - "type": "integer", - "default": 0 + "type": "integer" }, "trim_nextseq": { - "type": "integer", - "default": 0 + "type": "integer" }, "save_trimmed": { "type": "string" @@ -338,12 +321,12 @@ "type": "string" }, "minimum_alignment_q_score": { - "type": "integer", - "default": 0 + "type": "integer" }, "normalisation_c": { "type": "integer", - "default": 10000 + "default": 10000, + "hidden": true }, "igg_control": { "type": "boolean", From 3a681d6cae282152e745965c25494094c90d4b74 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 14:21:22 +0100 Subject: [PATCH 246/675] Updated aws testing config --- .github/workflows/awsfulltest.yml | 6 +----- .github/workflows/awstest.yml | 3 --- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index 6ae69a18..e19f52cc 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -33,14 +33,10 @@ jobs: - name: Install awscli run: conda install -c conda-forge awscli - name: Start AWS batch job - # TODO nf-core: You can customise AWS full pipeline tests as required - # Add full size test data (but still relatively small datasets for few samples) - # on the `test_full.config` test runs with only one set of parameters - # Then specify `-profile test_full` instead of `-profile test` on the AWS batch command run: | aws batch submit-job \ --region eu-west-1 \ --job-name nf-core-cutandrun \ --job-queue $AWS_JOB_QUEUE \ --job-definition $AWS_JOB_DEFINITION \ - --container-overrides '{"command": ["nf-core/cutandrun", "-r '"${GITHUB_SHA}"' -profile test --outdir s3://'"${AWS_S3_BUCKET}"'/cutandrun/results-'"${GITHUB_SHA}"' -w s3://'"${AWS_S3_BUCKET}"'/cutandrun/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' + --container-overrides '{"command": ["nf-core/cutandrun", "-r '"${GITHUB_SHA}"' -profile test_full --outdir s3://'"${AWS_S3_BUCKET}"'/cutandrun/results-'"${GITHUB_SHA}"' -w s3://'"${AWS_S3_BUCKET}"'/cutandrun/work-'"${GITHUB_SHA}"' -with-tower"], "environment": [{"name": "TOWER_ACCESS_TOKEN", "value": "'"$TOWER_ACCESS_TOKEN"'"}]}' diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 8e28af14..4942b0f7 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -30,9 +30,6 @@ jobs: - name: Install awscli run: conda install -c conda-forge awscli - name: Start AWS batch job - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix run: | aws batch submit-job \ --region eu-west-1 \ From e11a9e2478c8097fc9647d68974f18c08e5bc67a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 14:23:37 +0100 Subject: [PATCH 247/675] Remove unused email template sections --- .gitignore | 1 + lib/NfcoreTemplate.groovy | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 815cd078..92a7aec6 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ dev/docker/static_reports/test_data/* dev/docker/static_reports/test_output/* !dev/docker/static_reports/test_data/_dummy.txt !dev/docker/static_reports/test_output/_dummy.txt + \ No newline at end of file diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 26f3dd46..85068c93 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -82,8 +82,8 @@ class NfcoreTemplate { email_fields['commandLine'] = workflow.commandLine email_fields['projectDir'] = workflow.projectDir email_fields['summary'] = summary << misc_fields - email_fields['fail_percent_mapped'] = fail_percent_mapped.keySet() - email_fields['min_mapped_reads'] = params.min_mapped_reads + // email_fields['fail_percent_mapped'] = fail_percent_mapped.keySet() + // email_fields['min_mapped_reads'] = params.min_mapped_reads // On success try attach the multiqc report def mqc_report = null From 6cb557105354a01e24f56351161b679a3b5f1391 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 14:31:54 +0100 Subject: [PATCH 248/675] Updated CI strategy for DSL2 --- .github/workflows/ci.yml | 45 ++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c274726..3b377612 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,9 +8,6 @@ on: release: types: [published] -# Uncomment if we need an edge release of Nextflow again -# env: NXF_EDGE: 1 - jobs: test: name: Run workflow tests @@ -23,38 +20,36 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['21.04.0', ''] + nxf_ver: ["21.04.0", ""] steps: - name: Check out pipeline code uses: actions/checkout@v2 - - name: Check if Dockerfile or Conda environment changed - uses: technote-space/get-diff-action@v4 - with: - FILES: | - Dockerfile - environment.yml - - - name: Build new docker image - if: env.MATCHED_FILES - run: docker build --no-cache . -t nfcore/cutandrun:dev + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ - - name: Pull docker image - if: ${{ !env.MATCHED_FILES }} + - name: Run pipeline with test data run: | - docker pull nfcore/cutandrun:dev - docker tag nfcore/cutandrun:dev nfcore/cutandrun:dev + nextflow run ${GITHUB_WORKSPACE} -profile test,docker + + sra_download: + name: Test downloading of public data + if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/rnaseq') }} + runs-on: ubuntu-latest + env: + NXF_VER: ${{ matrix.nxf_ver }} + NXF_ANSI_LOG: false + steps: + - name: Check out pipeline code + uses: actions/checkout@v2 - name: Install Nextflow - env: - CAPSULE_LOG: none run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - - name: Run pipeline with test data - # TODO nf-core: You can customise CI pipeline run tests as required - # For example: adding multiple test runs with different parameters - # Remember that you can parallelise this by using strategy.matrix + - name: Run pipeline to download public data run: | - nextflow run ${GITHUB_WORKSPACE} -profile test,docker + nextflow run ${GITHUB_WORKSPACE} -profile test_sra,docker From db159fe9524e7b0a13cf8de084a1ecaa023662b7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 14:39:08 +0100 Subject: [PATCH 249/675] added editor config --- .editorconfig | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..303847eb --- /dev/null +++ b/.editorconfig @@ -0,0 +1,24 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_size = 4 +indent_style = space + +[*.{yml,yaml}] +indent_size = 2 + +# These files are edited and tested upstream in nf-core/modules +[/modules/nf-core/**] +charset = unset +end_of_line = unset +insert_final_newline = unset +trim_trailing_whitespace = unset +indent_style = unset +indent_size = unset + +[/assets/email*] +indent_size = unset \ No newline at end of file From e2b5d962690335cac475b6eca85c5f9dab51fcaf Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 14:42:58 +0100 Subject: [PATCH 250/675] Updated linting for DSL2 --- .github/workflows/linting.yml | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index fcde400c..46f42cb8 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,11 +14,11 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: '10' + node-version: "10" - name: Install markdownlint run: npm install -g markdownlint-cli - name: Run Markdownlint - run: markdownlint ${GITHUB_WORKSPACE} -c ${GITHUB_WORKSPACE}/.github/markdownlint.yml + run: markdownlint . # If the above check failed, post a comment on the PR explaining the failure - name: Post PR comment @@ -36,7 +36,7 @@ jobs: * Everything else: [Install `npm`](https://www.npmjs.com/get-npm) then [install `markdownlint-cli`](https://www.npmjs.com/package/markdownlint-cli) (`npm install -g markdownlint-cli`) * Fix the markdown errors * Automatically: `markdownlint . --config .github/markdownlint.yml --fix` - * Manually resolve anything left from `markdownlint . --config .github/markdownlint.yml` + * Manually resolve anything left from `markdownlint .` Once you push these changes the test should pass, and you can hide this comment :+1: @@ -46,6 +46,20 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} allow-repeats: false + EditorConfig: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v1 + with: + node-version: "10" + + - name: Install editorconfig-checker + run: npm install -g editorconfig-checker + + - name: Run ECLint check + run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) YAML: runs-on: ubuntu-latest @@ -53,7 +67,7 @@ jobs: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: - node-version: '10' + node-version: "10" - name: Install yaml-lint run: npm install -g yaml-lint - name: Run yaml-lint @@ -84,11 +98,9 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} allow-repeats: false - nf-core: runs-on: ubuntu-latest steps: - - name: Check out pipeline code uses: actions/checkout@v2 @@ -101,8 +113,8 @@ jobs: - uses: actions/setup-python@v1 with: - python-version: '3.6' - architecture: 'x64' + python-version: "3.6" + architecture: "x64" - name: Install dependencies run: | @@ -129,4 +141,3 @@ jobs: lint_log.txt lint_results.md PR_number.txt - From 2291093ab6475c40c4ab6fc119e5c96d6ed10300 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 14:46:01 +0100 Subject: [PATCH 251/675] some markdown fixes --- docs/output.md | 12 ++++-------- docs/usage.md | 1 + 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/docs/output.md b/docs/output.md index 46b87518..3f4e5da3 100644 --- a/docs/output.md +++ b/docs/output.md @@ -15,7 +15,7 @@ and processes data using the following steps: * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids * [cat](#cat) - Merge re-sequenced FastQ files * [FastQC](#fastqc) - Raw read QC - * [TrimGalore](#trimgalore) - Adapter and quality trimming + * [TrimGalore](#trimgalore) - Adapter and quality trimming * [Alignment](#alignment) * [Bowtie 2](#bowtie-2) - Align reads to target and spike-in genomes * [Alignment post-processing](#alignment-post-processing) @@ -36,7 +36,6 @@ and processes data using the following steps: * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution - ## Preprocessing ### ENA FTP @@ -110,7 +109,7 @@ If multiple libraries/runs have been provided for the same sample in the input s ## Alignment -### Bowtie 2 +### Bowtie 2
    Output files @@ -160,7 +159,6 @@ BAM files are filtered for a minimum quality score of 0 using [SAMtools](http:// * `aligner/bowtie2/picard_metrics` * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. -
    By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to gauge the overall level of duplication in your samples. If your data includes IgG controls, these will additionally be deduplicated. You can skip this step via the `--skip_markduplicates` parameter. By default, this is the final processing step for the target BAM files and will appear in `aligner/bowtie2/`. However, if `--skip_markduplicates true` is set, this step will be skipped. @@ -196,6 +194,7 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i [SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. ![Python reporting - peaks reproduced](images/py_reproduced_peaks.png) + ![Python reporting - aligned fragments within peaks](images/py_frags_in_peaks.png) ### Deeptools @@ -269,7 +268,7 @@ For more information about how to use MultiQC reports, see [https://multiqc.info * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. * `multiqc_plots/`: directory containing static images from the report in various formats. -### IGV +### IGV
    Output files @@ -278,7 +277,6 @@ For more information about how to use MultiQC reports, see [https://multiqc.info * `igv_session.xml`: IGV session. * `*.txt`: IGV input file configurations. -
    An IGV session file will be created at the end of the pipeline containing the normalised bigWig tracks, per-sample peaks, target genome fasta and annotation GTF. Once installed, open IGV, go to File > Open Session and select the igv_session.xml file for loading. @@ -316,5 +314,3 @@ A number of genome-specific files are generated by the pipeline because they are [Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. - - diff --git a/docs/usage.md b/docs/usage.md index a4211c25..861e8b82 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -13,6 +13,7 @@ You will need to create a samplesheet file with information about the samples in ``` ### Multiple replicates + The `group` identifier is the same when you have multiple biological replicates from the same experimental group, just increment the `replicate` identifier appropriately. A special case for `group` is if you have non-specific IgG antibody control data that can be used for normalising your experimental CUT&Run (OR CUT&Tag) data. In this case, the `group` name for the IgG control data _must_ be set to `igg`. Below is an example for a single target group in triplicate, complemented by an IgG control duplicate: ```bash From 454f4c593655fc76abc3c283d05c6b87e3b43834 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 14:50:43 +0100 Subject: [PATCH 252/675] automatic markdown lint fix --- README.md | 2 +- docs/output.md | 135 ++++++++++++++++++++++++------------------------- 2 files changed, 68 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 7d646be9..96dcc311 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ On release, automated continuous integration tests run the pipeline on a full-si -profile ``` - > **NB:** The commands to obtain public data and to run the main arm of the pipeline are completely independent. This is intentional because it allows you to download all of the raw data in an initial pipeline run (`results/public_data/`) and then to curate the auto-created samplesheet based on the available sample metadata before you run the pipeline again properly. + > **NB:** The commands to obtain public data and to run the main arm of the pipeline are completely independent. This is intentional because it allows you to download all of the raw data in an initial pipeline run (`results/public_data/`) and then to curate the auto-created samplesheet based on the available sample metadata before you run the pipeline again properly. See [usage docs](https://nf-co.re/cutandrun/usage) for all of the available options when running the pipeline. diff --git a/docs/output.md b/docs/output.md index 3f4e5da3..0a728905 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,29 +12,29 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: * [Preprocessing](#preprocessing) - * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids - * [cat](#cat) - Merge re-sequenced FastQ files - * [FastQC](#fastqc) - Raw read QC - * [TrimGalore](#trimgalore) - Adapter and quality trimming + * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids + * [cat](#cat) - Merge re-sequenced FastQ files + * [FastQC](#fastqc) - Raw read QC + * [TrimGalore](#trimgalore) - Adapter and quality trimming * [Alignment](#alignment) - * [Bowtie 2](#bowtie-2) - Align reads to target and spike-in genomes + * [Bowtie 2](#bowtie-2) - Align reads to target and spike-in genomes * [Alignment post-processing](#alignment-post-processing) - * [SAMtools](#samtools) - Quality filter, sort and index alignments - * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking + * [SAMtools](#samtools) - Quality filter, sort and index alignments + * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking * [Other steps](#other-steps) - * [Calculate scale factor](#scale-factor) - Normalise between samples - * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files + * [Calculate scale factor](#scale-factor) - Normalise between samples + * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files * [Peak calling](#peak-calling) - * [SEACR](#seacr) - Peak calling for high signal-noise data - * [Deeptools](#deeptools) - Analysis of peaks + * [SEACR](#seacr) - Peak calling for high signal-noise data + * [Deeptools](#deeptools) - Analysis of peaks * [Summary and quality control](#summary-and-quality-control) - * [DESeq2](#deseq2) - PCA plot and differential peak analysis - * [Python reporting](#python-reporting) - * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similarity - * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes + * [DESeq2](#deseq2) - PCA plot and differential peak analysis + * [Python reporting](#python-reporting) + * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similarity + * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes * [Workflow reporting and genomes](#workflow-reporting-and-genomes) - * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files - * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution + * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files + * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ## Preprocessing @@ -44,13 +44,13 @@ and processes data using the following steps: Output files * `public_data/` - * `samplesheet.csv`: Auto-created samplesheet that can be used to run the pipeline. - * `*.fastq.gz`: Paired-end/single-end reads downloaded from the ENA / SRA. + * `samplesheet.csv`: Auto-created samplesheet that can be used to run the pipeline. + * `*.fastq.gz`: Paired-end/single-end reads downloaded from the ENA / SRA. * `public_data/md5/` - * `*.md5`: Files containing `md5` sum for FastQ files downloaded from the ENA / SRA. + * `*.md5`: Files containing `md5` sum for FastQ files downloaded from the ENA / SRA. * `public_data/runinfo/` - * `*.runinfo.tsv`: Original metadata file downloaded from the ENA - * `*.runinfo_ftp.tsv`: Re-formatted metadata file downloaded from the ENA + * `*.runinfo.tsv`: Original metadata file downloaded from the ENA + * `*.runinfo_ftp.tsv`: Re-formatted metadata file downloaded from the ENA @@ -62,7 +62,7 @@ Please see the [usage documentation](https://nf-co.re/cutandrun/usage#direct-dow Output files * `fastq/` - * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory. + * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory. @@ -74,8 +74,8 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + * `*_fastqc.html`: FastQC report containing quality metrics. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. > **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `trimgalore/fastqc/` directory. @@ -93,11 +93,11 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `trimgalore/` - * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. - * `*_trimming_report.txt`: Log file generated by Trim Galore!. + * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. + * `*_trimming_report.txt`: Log file generated by Trim Galore!. * `trimgalore/fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. @@ -115,15 +115,15 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `aligner/bowtie2/intermediate/` - * `.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. - * `.bam.bai`: BAI file for BAM. + * `.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. + * `.bam.bai`: BAI file for BAM. * `aligner/bowtie2/intermediate/samtools_stats` - * `.bam.*stats`: various statistics regarding the BAM files. + * `.bam.*stats`: various statistics regarding the BAM files. * `aligner/bowtie2/spikein/` - * `.bam`: BAM file of reads aligned to the spike-in genome - * `.bam.bai`: BAI file for spike-in BAM. + * `.bam`: BAM file of reads aligned to the spike-in genome + * `.bam.bai`: BAI file for spike-in BAM. * `aligner/bowtie2/spikein/samtools_stats` - * `.bam.*stats`: various statistics regarding the spike-in BAM files. + * `.bam.*stats`: various statistics regarding the spike-in BAM files. @@ -133,16 +133,16 @@ Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowti ## Alignment post-processing -### SAMtools +###  SAMtools
    Output files * `aligner/bowtie2/intermediate/` - * `.filtered.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. - * `.filtered.bam.bai`: BAI file for BAM. + * `.filtered.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. + * `.filtered.bam.bai`: BAI file for BAM. * `aligner/bowtie2/intermediate/samtools_stats` - * `.filtered.bam.*stats`: various statistics regarding the BAM files. + * `.filtered.bam.*stats`: various statistics regarding the BAM files.
    @@ -154,10 +154,10 @@ BAM files are filtered for a minimum quality score of 0 using [SAMtools](http:// Output files * `aligner/bowtie2/` - * `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. - * `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. + * `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. + * `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. * `aligner/bowtie2/picard_metrics` - * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. + * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. @@ -173,7 +173,7 @@ By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.git Output files * `ucsc/` - * `*.bigWig`: bigWig coverage file. + * `*.bigWig`: bigWig coverage file. @@ -187,11 +187,11 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i Output files * `seacr/` - * `.peaks*.bed`: BED file containing peak coordinates and peak signal. + * `.peaks*.bed`: BED file containing peak coordinates and peak signal. -[SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. +[SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. ![Python reporting - peaks reproduced](images/py_reproduced_peaks.png) @@ -203,32 +203,31 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i Output files * `deeptools/heatmaps/` - * `.plotHeatmap.pdf`: heatmap PDF. - * `.computeMatrix.mat.gz`: heatmap matrix. - * `*.mat.tab`: matrix and heatmap configs. + * `.plotHeatmap.pdf`: heatmap PDF. + * `.computeMatrix.mat.gz`: heatmap matrix. + * `*.mat.tab`: matrix and heatmap configs. [Deeptools](https://github.com/deeptools/deepTools/) sub-tools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. +##  Summary and quality control -## Summary and quality control - -### DESeq2 +###  DESeq2
    Output files * `deseq2_qc/` - * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. - * `*.dds.RData`: File containing R `DESeqDataSet` object generated + * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. + * `*.dds.RData`: File containing R `DESeqDataSet` object generated by DESeq2, with either an rlog or vst `assay` storing the variance-stabilised data. - * `*pca.vals.txt`: Matrix of values for the first 2 principal components. - * `*sample.dists.txt`: Sample distance matrix. - * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. + * `*pca.vals.txt`: Matrix of values for the first 2 principal components. + * `*sample.dists.txt`: Sample distance matrix. + * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. * `deseq2_qc/size_factors/` - * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample. + * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample.
    @@ -242,9 +241,9 @@ The script included in the pipeline uses DESeq2 to normalise read counts across Output files * `reports/` - * `report.pdf`: PDF report of all plots. - * `*.png`: individual plots featured in the PDF report. - * `*.csv`: corresponding data used to produce the plot. + * `report.pdf`: PDF report of all plots. + * `*.png`: individual plots featured in the PDF report. + * `*.csv`: corresponding data used to produce the plot. @@ -274,8 +273,8 @@ For more information about how to use MultiQC reports, see [https://multiqc.info Output files * `igv/` - * `igv_session.xml`: IGV session. - * `*.txt`: IGV input file configurations. + * `igv_session.xml`: IGV session. + * `*.txt`: IGV input file configurations. @@ -291,11 +290,11 @@ An IGV session file will be created at the end of the pipeline containing the no Output files * `genome/` - * `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. + * `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. * `genome/index/` - * `bowtie2`: Directory containing target Bowtie2 indices. + * `bowtie2`: Directory containing target Bowtie2 indices. * `genome/spikein_index/` - * `bowtie2`: Directory containing spike-in Bowtie2 indices. + * `bowtie2`: Directory containing spike-in Bowtie2 indices. @@ -307,9 +306,9 @@ A number of genome-specific files are generated by the pipeline because they are Output files * `pipeline_info/` - * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. + * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. + * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. From ff7d2030f58482a9ca09ee90ec86c81e4294a56b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 14:59:01 +0100 Subject: [PATCH 253/675] Updated markdownlint.yml --- .github/markdownlint.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/markdownlint.yml b/.github/markdownlint.yml index 8d7eb53b..9da392f1 100644 --- a/.github/markdownlint.yml +++ b/.github/markdownlint.yml @@ -1,6 +1,8 @@ # Markdownlint configuration file default: true line-length: false +ul-indent: + indent: 4 no-duplicate-header: siblings_only: true no-inline-html: @@ -10,3 +12,5 @@ no-inline-html: - kbd - details - summary +single-title: + level: 2 \ No newline at end of file From ef4fdeaea979e71b8aceca17da67ba2297393c53 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 24 May 2021 15:01:10 +0100 Subject: [PATCH 254/675] Moved markdown lint and updated for dsl2 --- .github/workflows/linting.yml | 2 +- .github/markdownlint.yml => markdownlint.yml | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename .github/markdownlint.yml => markdownlint.yml (100%) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 46f42cb8..01ee4c23 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -35,7 +35,7 @@ jobs: * On Mac: `brew install markdownlint-cli` * Everything else: [Install `npm`](https://www.npmjs.com/get-npm) then [install `markdownlint-cli`](https://www.npmjs.com/package/markdownlint-cli) (`npm install -g markdownlint-cli`) * Fix the markdown errors - * Automatically: `markdownlint . --config .github/markdownlint.yml --fix` + * Automatically: `markdownlint . --config markdownlint.yml --fix` * Manually resolve anything left from `markdownlint .` Once you push these changes the test should pass, and you can hide this comment :+1: diff --git a/.github/markdownlint.yml b/markdownlint.yml similarity index 100% rename from .github/markdownlint.yml rename to markdownlint.yml From 11dd7eb4443509f29b9188f8bdc836c9a922eb19 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 15:45:51 +0100 Subject: [PATCH 255/675] new markdownlint.yml fix --- docs/README.md | 4 +- docs/output.md | 132 ++++++++++++++++++++++++------------------------- docs/usage.md | 30 +++++------ 3 files changed, 83 insertions(+), 83 deletions(-) diff --git a/docs/README.md b/docs/README.md index a0c1cc8a..b2b2a244 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,8 +3,8 @@ The nf-core/cutandrun documentation is split into the following pages: * [Usage](usage.md) - * An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. + * An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. * [Output](output.md) - * An overview of the different results produced by the pipeline and how to interpret them. + * An overview of the different results produced by the pipeline and how to interpret them. You can find a lot more documentation about installing, configuring and running nf-core pipelines on the website: [https://nf-co.re](https://nf-co.re) diff --git a/docs/output.md b/docs/output.md index 0a728905..9776adc9 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,29 +12,29 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: * [Preprocessing](#preprocessing) - * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids - * [cat](#cat) - Merge re-sequenced FastQ files - * [FastQC](#fastqc) - Raw read QC - * [TrimGalore](#trimgalore) - Adapter and quality trimming + * [ENA FTP](#ena-ftp) - Download FastQ files via SRA / ENA / GEO ids + * [cat](#cat) - Merge re-sequenced FastQ files + * [FastQC](#fastqc) - Raw read QC + * [TrimGalore](#trimgalore) - Adapter and quality trimming * [Alignment](#alignment) - * [Bowtie 2](#bowtie-2) - Align reads to target and spike-in genomes + * [Bowtie 2](#bowtie-2) - Align reads to target and spike-in genomes * [Alignment post-processing](#alignment-post-processing) - * [SAMtools](#samtools) - Quality filter, sort and index alignments - * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking + * [SAMtools](#samtools) - Quality filter, sort and index alignments + * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking * [Other steps](#other-steps) - * [Calculate scale factor](#scale-factor) - Normalise between samples - * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files + * [Calculate scale factor](#scale-factor) - Normalise between samples + * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files * [Peak calling](#peak-calling) - * [SEACR](#seacr) - Peak calling for high signal-noise data - * [Deeptools](#deeptools) - Analysis of peaks + * [SEACR](#seacr) - Peak calling for high signal-noise data + * [Deeptools](#deeptools) - Analysis of peaks * [Summary and quality control](#summary-and-quality-control) - * [DESeq2](#deseq2) - PCA plot and differential peak analysis - * [Python reporting](#python-reporting) - * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similarity - * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes + * [DESeq2](#deseq2) - PCA plot and differential peak analysis + * [Python reporting](#python-reporting) + * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similarity + * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes * [Workflow reporting and genomes](#workflow-reporting-and-genomes) - * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files - * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution + * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files + * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution ## Preprocessing @@ -44,13 +44,13 @@ and processes data using the following steps: Output files * `public_data/` - * `samplesheet.csv`: Auto-created samplesheet that can be used to run the pipeline. - * `*.fastq.gz`: Paired-end/single-end reads downloaded from the ENA / SRA. + * `samplesheet.csv`: Auto-created samplesheet that can be used to run the pipeline. + * `*.fastq.gz`: Paired-end/single-end reads downloaded from the ENA / SRA. * `public_data/md5/` - * `*.md5`: Files containing `md5` sum for FastQ files downloaded from the ENA / SRA. + * `*.md5`: Files containing `md5` sum for FastQ files downloaded from the ENA / SRA. * `public_data/runinfo/` - * `*.runinfo.tsv`: Original metadata file downloaded from the ENA - * `*.runinfo_ftp.tsv`: Re-formatted metadata file downloaded from the ENA + * `*.runinfo.tsv`: Original metadata file downloaded from the ENA + * `*.runinfo_ftp.tsv`: Re-formatted metadata file downloaded from the ENA @@ -62,7 +62,7 @@ Please see the [usage documentation](https://nf-co.re/cutandrun/usage#direct-dow Output files * `fastq/` - * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory. + * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory. @@ -74,8 +74,8 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + * `*_fastqc.html`: FastQC report containing quality metrics. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. > **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `trimgalore/fastqc/` directory. @@ -93,11 +93,11 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `trimgalore/` - * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. - * `*_trimming_report.txt`: Log file generated by Trim Galore!. + * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. + * `*_trimming_report.txt`: Log file generated by Trim Galore!. * `trimgalore/fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. @@ -115,15 +115,15 @@ If multiple libraries/runs have been provided for the same sample in the input s Output files * `aligner/bowtie2/intermediate/` - * `.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. - * `.bam.bai`: BAI file for BAM. + * `.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. + * `.bam.bai`: BAI file for BAM. * `aligner/bowtie2/intermediate/samtools_stats` - * `.bam.*stats`: various statistics regarding the BAM files. + * `.bam.*stats`: various statistics regarding the BAM files. * `aligner/bowtie2/spikein/` - * `.bam`: BAM file of reads aligned to the spike-in genome - * `.bam.bai`: BAI file for spike-in BAM. + * `.bam`: BAM file of reads aligned to the spike-in genome + * `.bam.bai`: BAI file for spike-in BAM. * `aligner/bowtie2/spikein/samtools_stats` - * `.bam.*stats`: various statistics regarding the spike-in BAM files. + * `.bam.*stats`: various statistics regarding the spike-in BAM files. @@ -139,10 +139,10 @@ Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowti Output files * `aligner/bowtie2/intermediate/` - * `.filtered.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. - * `.filtered.bam.bai`: BAI file for BAM. + * `.filtered.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. + * `.filtered.bam.bai`: BAI file for BAM. * `aligner/bowtie2/intermediate/samtools_stats` - * `.filtered.bam.*stats`: various statistics regarding the BAM files. + * `.filtered.bam.*stats`: various statistics regarding the BAM files. @@ -154,10 +154,10 @@ BAM files are filtered for a minimum quality score of 0 using [SAMtools](http:// Output files * `aligner/bowtie2/` - * `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. - * `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. + * `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. + * `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. * `aligner/bowtie2/picard_metrics` - * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. + * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. @@ -173,7 +173,7 @@ By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.git Output files * `ucsc/` - * `*.bigWig`: bigWig coverage file. + * `*.bigWig`: bigWig coverage file. @@ -187,7 +187,7 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i Output files * `seacr/` - * `.peaks*.bed`: BED file containing peak coordinates and peak signal. + * `.peaks*.bed`: BED file containing peak coordinates and peak signal. @@ -203,9 +203,9 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i Output files * `deeptools/heatmaps/` - * `.plotHeatmap.pdf`: heatmap PDF. - * `.computeMatrix.mat.gz`: heatmap matrix. - * `*.mat.tab`: matrix and heatmap configs. + * `.plotHeatmap.pdf`: heatmap PDF. + * `.computeMatrix.mat.gz`: heatmap matrix. + * `*.mat.tab`: matrix and heatmap configs. @@ -219,15 +219,15 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i Output files * `deseq2_qc/` - * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. - * `*.dds.RData`: File containing R `DESeqDataSet` object generated + * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. + * `*.dds.RData`: File containing R `DESeqDataSet` object generated by DESeq2, with either an rlog or vst `assay` storing the variance-stabilised data. - * `*pca.vals.txt`: Matrix of values for the first 2 principal components. - * `*sample.dists.txt`: Sample distance matrix. - * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. + * `*pca.vals.txt`: Matrix of values for the first 2 principal components. + * `*sample.dists.txt`: Sample distance matrix. + * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. * `deseq2_qc/size_factors/` - * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample. + * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample. @@ -241,9 +241,9 @@ The script included in the pipeline uses DESeq2 to normalise read counts across Output files * `reports/` - * `report.pdf`: PDF report of all plots. - * `*.png`: individual plots featured in the PDF report. - * `*.csv`: corresponding data used to produce the plot. + * `report.pdf`: PDF report of all plots. + * `*.png`: individual plots featured in the PDF report. + * `*.csv`: corresponding data used to produce the plot. @@ -263,9 +263,9 @@ For more information about how to use MultiQC reports, see [https://multiqc.info Output files * `multiqc/` - * `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - * `multiqc_plots/`: directory containing static images from the report in various formats. + * `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + * `multiqc_plots/`: directory containing static images from the report in various formats. ### IGV @@ -273,8 +273,8 @@ For more information about how to use MultiQC reports, see [https://multiqc.info Output files * `igv/` - * `igv_session.xml`: IGV session. - * `*.txt`: IGV input file configurations. + * `igv_session.xml`: IGV session. + * `*.txt`: IGV input file configurations. @@ -290,11 +290,11 @@ An IGV session file will be created at the end of the pipeline containing the no Output files * `genome/` - * `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. + * `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. * `genome/index/` - * `bowtie2`: Directory containing target Bowtie2 indices. + * `bowtie2`: Directory containing target Bowtie2 indices. * `genome/spikein_index/` - * `bowtie2`: Directory containing spike-in Bowtie2 indices. + * `bowtie2`: Directory containing spike-in Bowtie2 indices. @@ -306,9 +306,9 @@ A number of genome-specific files are generated by the pipeline because they are Output files * `pipeline_info/` - * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. + * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. + * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. diff --git a/docs/usage.md b/docs/usage.md index 861e8b82..6a04e558 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -149,27 +149,27 @@ They are loaded in sequence, so later profiles can overwrite earlier profiles. If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended. * `docker` - * A generic configuration profile to be used with [Docker](https://docker.com/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Docker](https://docker.com/) + * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) * `singularity` - * A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) + * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) * `podman` - * A generic configuration profile to be used with [Podman](https://podman.io/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Podman](https://podman.io/) + * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) * `shifter` - * A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) + * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) * `charliecloud` - * A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) * `conda` - * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. - * A generic configuration profile to be used with [Conda](https://conda.io/docs/) - * Pulls most software from [Bioconda](https://bioconda.github.io/) + * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. + * A generic configuration profile to be used with [Conda](https://conda.io/docs/) + * Pulls most software from [Bioconda](https://bioconda.github.io/) * `test` - * A profile with a complete configuration for automated testing - * Includes links to test data so needs no other parameters + * A profile with a complete configuration for automated testing + * Includes links to test data so needs no other parameters ### `-resume` From 07c32cb1cb1ffaacdc0773c820a63db89657679d Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 15:47:50 +0100 Subject: [PATCH 256/675] header correction --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 6a04e558..bdd21282 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -64,7 +64,7 @@ igg,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. -# Direct download of public repository data +## Direct download of public repository data > **NB:** This is an experimental feature but should work beautifully when it does! :) From f7eba4657d7da336bfad921e6fdfa2ce68f5878a Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Mon, 24 May 2021 15:51:31 +0100 Subject: [PATCH 257/675] trailing line in editor config --- .editorconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 303847eb..afb20bb1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -21,4 +21,4 @@ indent_style = unset indent_size = unset [/assets/email*] -indent_size = unset \ No newline at end of file +indent_size = unset From afb637cc03d61ed14b88e20065abb13ee04f8afb Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 08:14:50 +0100 Subject: [PATCH 258/675] Updated linting workflow --- .github/workflows/linting.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 01ee4c23..8e6415b5 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -18,7 +18,7 @@ jobs: - name: Install markdownlint run: npm install -g markdownlint-cli - name: Run Markdownlint - run: markdownlint . + run: markdownlint ${GITHUB_WORKSPACE} -c ${GITHUB_WORKSPACE}/.markdownlint.yml # If the above check failed, post a comment on the PR explaining the failure - name: Post PR comment @@ -36,7 +36,7 @@ jobs: * Everything else: [Install `npm`](https://www.npmjs.com/get-npm) then [install `markdownlint-cli`](https://www.npmjs.com/package/markdownlint-cli) (`npm install -g markdownlint-cli`) * Fix the markdown errors * Automatically: `markdownlint . --config markdownlint.yml --fix` - * Manually resolve anything left from `markdownlint .` + * Manually resolve anything left from `markdownlint . --config .github/markdownlint.yml` Once you push these changes the test should pass, and you can hide this comment :+1: From a664a014d95e80723128b0fd4faf24d446b0fb15 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 08:16:30 +0100 Subject: [PATCH 259/675] Changed markdown lint config file name --- markdownlint.yml => .markdownlint.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename markdownlint.yml => .markdownlint.yml (100%) diff --git a/markdownlint.yml b/.markdownlint.yml similarity index 100% rename from markdownlint.yml rename to .markdownlint.yml From e0fa1bd168e6ae105fe03c0552f826e1b1ea0990 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 08:23:37 +0100 Subject: [PATCH 260/675] gitignore formatting --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 92a7aec6..694edcdc 100644 --- a/.gitignore +++ b/.gitignore @@ -17,5 +17,4 @@ R_sessionInfo.log dev/docker/static_reports/test_data/* dev/docker/static_reports/test_output/* !dev/docker/static_reports/test_data/_dummy.txt -!dev/docker/static_reports/test_output/_dummy.txt - \ No newline at end of file +!dev/docker/static_reports/test_output/_dummy.txt \ No newline at end of file From a1573aced0fd4423943e7ae1fbd7e7c1b043a146 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 08:31:08 +0100 Subject: [PATCH 261/675] gitignore formatting --- .vscode/settings.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 2e8758b3..9cb758f3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,7 @@ "python.pythonPath": "/usr/local/Caskroom/miniconda/base/envs/cutrun/bin/python", "editor.tabSize": 4, "editor.insertSpaces": true, - "editor.detectIndentation": false + "editor.detectIndentation": false, + "editor.renderWhitespace": "all", + "editor.renderFinalNewline": true } \ No newline at end of file From 78c1928dba2c7276bb8f593a65878f918163e129 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:05:50 +0100 Subject: [PATCH 262/675] Cleanup --- CITATIONS.md | 2 +- assets/awk/bt2_report_to_csv.awk | 36 ++++++++++++++-------------- assets/awk/dt_frag_report_to_csv.awk | 12 +++++----- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 59c227e0..8cc3882e 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -14,7 +14,7 @@ > Quinlan AR, Hall IM. BEDTools: a flexible suite of utilities for comparing genomic features. Bioinformatics. 2010 Mar 15;26(6):841-2. doi: 10.1093/bioinformatics/btq033. Epub 2010 Jan 28. PubMed PMID: 20110278; PubMed Central PMCID: PMC2832824. * [Bowtie2](https://pubmed.ncbi.nlm.nih.gov/22388286/) - > Langmead B, Salzberg SL. Fast gapped-read alignment with Bowtie 2. Nat Methods. 2012 Mar 4;9(4):357-9. doi: 10.1038/nmeth.1923. PMID: 22388286; PMCID: PMC3322381. + > Langmead B, Salzberg SL. Fast gapped-read alignment with Bowtie 2. Nat Methods. 2012 Mar 4;9(4):357-9. doi: 10.1038/nmeth.1923. PMID: 22388286; PMCID: PMC3322381. * [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) diff --git a/assets/awk/bt2_report_to_csv.awk b/assets/awk/bt2_report_to_csv.awk index 196b70d2..16065a01 100644 --- a/assets/awk/bt2_report_to_csv.awk +++ b/assets/awk/bt2_report_to_csv.awk @@ -10,26 +10,26 @@ BEGIN { for(i=1; i<=col_count; i++) printf col_arr[i] ((i==col_count) ? "\n" : ","); } { - for (i=1; i<=NF; i++) { - if(index($i,"reads; of these:") != 0) { - split($i, line_split, " "); - data["bt2_total_reads"]=line_split[1]; - } - if(index($i,"aligned concordantly exactly 1 time") != 0) { - split($i, line_split, " "); - data["bt2_align1"]=line_split[1]; - } - if(index($i,"aligned concordantly >1 times") != 0) { - split($i, line_split, " "); - data["bt2_align_gt1"]=line_split[1]; - } - if(index($i,"aligned concordantly 0 times") != 0) { - split($i, line_split, " "); - data["bt2_non_aligned"]=line_split[1]; - } + for (i=1; i<=NF; i++) { + if(index($i,"reads; of these:") != 0) { + split($i, line_split, " "); + data["bt2_total_reads"]=line_split[1]; + } + if(index($i,"aligned concordantly exactly 1 time") != 0) { + split($i, line_split, " "); + data["bt2_align1"]=line_split[1]; + } + if(index($i,"aligned concordantly >1 times") != 0) { + split($i, line_split, " "); + data["bt2_align_gt1"]=line_split[1]; + } + if(index($i,"aligned concordantly 0 times") != 0) { + split($i, line_split, " "); + data["bt2_non_aligned"]=line_split[1]; + } } } END { data["bt2_total_aligned"] = data["bt2_align1"] + data["bt2_align_gt1"] for (i=1; i<=col_count; i++) printf data[col_arr[i]] ((i==col_count) ? "\n" : ","); -} +} \ No newline at end of file diff --git a/assets/awk/dt_frag_report_to_csv.awk b/assets/awk/dt_frag_report_to_csv.awk index e80d9ccc..2a89099d 100644 --- a/assets/awk/dt_frag_report_to_csv.awk +++ b/assets/awk/dt_frag_report_to_csv.awk @@ -10,19 +10,19 @@ BEGIN { { for (i=1; i<=NF; i++) { if(index($i,"Frag. Sampled") !=0) { - data["dt_frag_sampled"]=i; + data["dt_frag_sampled"]=i; } if(index($i,"Frag. Len. Mean") !=0) { - data["dt_frag_mean_len"]=i; + data["dt_frag_mean_len"]=i; } if(index($i,"Frag. Len. Min") !=0) { - data["dt_frag_min_len"]=i; + data["dt_frag_min_len"]=i; } if(index($i,"Frag. Len. Max") !=0) { - data["dt_frag_max_len"]=i; - } + data["dt_frag_max_len"]=i; + } } } END { - for (j=1; j<=col_count; j++) printf $(data[col_arr[j]]) ((j==col_count) ? "\n" : ","); + for (j=1; j<=col_count; j++) printf $(data[col_arr[j]]) ((j==col_count) ? "\n" : ","); } \ No newline at end of file From 7861be23ddff7bd12e41507feedb7e8cbe9de35e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:06:00 +0100 Subject: [PATCH 263/675] Added config for editorconfig checker --- .ecrc | 19 +++++++++++++++++++ .github/workflows/linting.yml | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .ecrc diff --git a/.ecrc b/.ecrc new file mode 100644 index 00000000..29667cde --- /dev/null +++ b/.ecrc @@ -0,0 +1,19 @@ +{ + "Verbose": true, + "Debug": false, + "IgnoreDefaults": false, + "SpacesAftertabs": false, + "NoColor": false, + "Exclude": [], + "AllowedContentTypes": [], + "PassedFiles": [], + "Disable": { + // set these options to true to disable specific checks + "EndOfLine": false, + "Indentation": false, + "InsertFinalNewline": false, + "TrimTrailingWhitespace": false, + "IndentSize": false, + "MaxLineLength": false + } +} \ No newline at end of file diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 8e6415b5..12739a70 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -59,7 +59,7 @@ jobs: run: npm install -g editorconfig-checker - name: Run ECLint check - run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) + run: editorconfig-checker --config ${GITHUB_WORKSPACE}/.ecrc -exclude README.md $(git ls-files | grep -v test) YAML: runs-on: ubuntu-latest From 9df68ac3401abb9ee20bfe99409c9606e8817ad2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:10:00 +0100 Subject: [PATCH 264/675] Updated config --- .ecrc | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/.ecrc b/.ecrc index 29667cde..914a08e4 100644 --- a/.ecrc +++ b/.ecrc @@ -1,19 +1,4 @@ { "Verbose": true, - "Debug": false, - "IgnoreDefaults": false, - "SpacesAftertabs": false, - "NoColor": false, - "Exclude": [], - "AllowedContentTypes": [], - "PassedFiles": [], - "Disable": { - // set these options to true to disable specific checks - "EndOfLine": false, - "Indentation": false, - "InsertFinalNewline": false, - "TrimTrailingWhitespace": false, - "IndentSize": false, - "MaxLineLength": false - } + "Exclude": ["README.md", "\\.bed$"] } \ No newline at end of file From 4b2dc3d8e81cf512140ccaeb760a4f2e64f11f4f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:11:54 +0100 Subject: [PATCH 265/675] Updated config --- .ecrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ecrc b/.ecrc index 914a08e4..1807211a 100644 --- a/.ecrc +++ b/.ecrc @@ -1,4 +1,4 @@ +//https://github.com/editorconfig-checker/editorconfig-checker#configuration { - "Verbose": true, "Exclude": ["README.md", "\\.bed$"] } \ No newline at end of file From 34b6d47564b1bb94ef836cb8951da3c781e2732a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:13:24 +0100 Subject: [PATCH 266/675] Updated config --- .ecrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.ecrc b/.ecrc index 1807211a..cf1959f6 100644 --- a/.ecrc +++ b/.ecrc @@ -1,4 +1,3 @@ -//https://github.com/editorconfig-checker/editorconfig-checker#configuration { "Exclude": ["README.md", "\\.bed$"] } \ No newline at end of file From 353a2648809e39b201d3ae254d1c1fe0c4e2d82c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:14:44 +0100 Subject: [PATCH 267/675] Deleted run dash --- assets/run_dash.sh | 3 --- 1 file changed, 3 deletions(-) delete mode 100755 assets/run_dash.sh diff --git a/assets/run_dash.sh b/assets/run_dash.sh deleted file mode 100755 index 173bc89c..00000000 --- a/assets/run_dash.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -docker run -it -p 8050:8050 -v "$PWD":/app/data --rm luslab/dash:latest \ No newline at end of file From e1299e161716e9377d41b2a75a4dcf6b1373cb52 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:23:58 +0100 Subject: [PATCH 268/675] Formatting updates --- assets/sendmail_template.txt | 36 +++--- bin/deseq2_diff.r | 207 +++++++++++++++++------------------ bin/lib/reports.py | 12 +- conf/base.config | 58 +++++----- conf/igenomes.config | 52 ++++----- main.nf | 4 +- 6 files changed, 182 insertions(+), 187 deletions(-) diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index cf377e8f..64034571 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -15,15 +15,15 @@ Content-ID: Content-Disposition: inline; filename="nf-core-cutandrun_logo.png" <% out << new File("$projectDir/assets/nf-core-cutandrun_logo.png"). - bytes. - encodeBase64(). - toString(). - tokenize( '\n' )*. - toList()*. - collate( 76 )*. - collect { it.join() }. - flatten(). - join( '\n' ) %> + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' ) %> <% if (mqcFile){ @@ -37,15 +37,15 @@ Content-ID: Content-Disposition: attachment; filename=\"${mqcFileObj.getName()}\" ${mqcFileObj. - bytes. - encodeBase64(). - toString(). - tokenize( '\n' )*. - toList()*. - collate( 76 )*. - collect { it.join() }. - flatten(). - join( '\n' )} + bytes. + encodeBase64(). + toString(). + tokenize( '\n' )*. + toList()*. + collate( 76 )*. + collect { it.join() }. + flatten(). + join( '\n' )} """ }} %> diff --git a/bin/deseq2_diff.r b/bin/deseq2_diff.r index 0da3ce45..eae65f52 100755 --- a/bin/deseq2_diff.r +++ b/bin/deseq2_diff.r @@ -116,7 +116,7 @@ for(group in groups){ stop(paste("group", group, "was not found amongst bed files")) } file_list <- bed_list[search_res] %>% append(file_list, .) -} +} for(file in file_list) { peakRes = read.table(file, header = FALSE, fill = TRUE) mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = "*") %>% append(mPeak, .) @@ -143,7 +143,7 @@ for(i in seq_along(groups)){ stop(paste("group", i, "was not found amongst bam files")) } file_list <- bam_list[search_res] - + for(j in seq_along(file_list)) { rep_search <- str_detect(file_list, expected_rep_str[j]) file_now <- file_list[rep_search] @@ -164,7 +164,7 @@ if (file.exists(opt$outdir) == FALSE) { setwd(opt$outdir) #if (FALSE) { ## Create index list for peak count filter -selectR = which(rowSums(countMat) > opt$count_thresh) +selectR = which(rowSums(countMat) > opt$count_thresh) dataS = countMat[selectR,] ## Select data from filter condition = factor(rep(groups, each = length(reps))) @@ -216,7 +216,7 @@ if (FALSE) { PlotFile <- paste(opt$outprefix,".plots.pdf",sep="") if (file.exists(PlotFile) == FALSE) { pdf(file=PlotFile,onefile=TRUE,width=7,height=7) - + ## PCA pca.data <- DESeq2::plotPCA(rld,intgroup=c("condition"),returnData=TRUE) percentVar <- round(100 * attr(pca.data, "percentVar")) @@ -225,11 +225,11 @@ if (file.exists(PlotFile) == FALSE) { xlab(paste0("PC1: ",percentVar[1],"% variance")) + ylab(paste0("PC2: ",percentVar[2],"% variance")) + theme(panel.grid.major = element_blank(), - panel.grid.minor = element_blank(), - panel.background = element_blank(), - panel.border = element_rect(colour = "black", fill=NA, size=1)) + panel.grid.minor = element_blank(), + panel.background = element_blank(), + panel.border = element_rect(colour = "black", fill=NA, size=1)) print(plot) - + ## WRITE PC1 vs PC2 VALUES TO FILE pca.vals <- pca.data[,1:2] colnames(pca.vals) <- paste(colnames(pca.vals),paste(percentVar,'% variance',sep=""), sep=": ") @@ -244,7 +244,7 @@ if (file.exists(PlotFile) == FALSE) { ## WRITE SAMPLE DISTANCES TO FILE write.table(cbind(sample = rownames(sampleDistMatrix), sampleDistMatrix),file=paste(opt$outprefix,".sample.dists.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=FALSE) - + dev.off() } } @@ -311,10 +311,10 @@ if (file.exists(PlotFile) == FALSE) { ylab(paste0("PC2: ",percentVar[2],"% variance")) + labs(title = paste0("First PCs on ", vst_name, "-transformed data"), subtitle = plot_subtitle) + theme(legend.position="top", - panel.grid.major = element_blank(), - panel.grid.minor = element_blank(), - panel.background = element_blank(), - panel.border = element_rect(colour = "black", fill=NA, size=1)) + panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + panel.background = element_blank(), + panel.border = element_rect(colour = "black", fill=NA, size=1)) print(pl) pl <- ggplot(attr(pca.data, "percentVar"), aes(x=PC, y=percentVar)) + @@ -325,7 +325,7 @@ if (file.exists(PlotFile) == FALSE) { theme_bw() + theme(legend.position="top") print(pl) - + pc_r <- order(attr(pca.data, "percentVar")$groupR, decreasing=TRUE) pl <- ggplot(pca.data, aes_string(paste0("PC", pc_r[1]), paste0("PC", pc_r[2]), color="condition")) + geom_point(size=3) + @@ -339,10 +339,10 @@ if (file.exists(PlotFile) == FALSE) { panel.border = element_rect(colour = "black", fill=NA, size=1)) print(pl) } # at end of loop, we'll be using the user-defined ntop if any, else all peaks - + ## VOLCANO PLOT plotMA(dds) - + ## WRITE PC1 vs PC2 VALUES TO FILE pca.vals <- pca.data[,1:2] colnames(pca.vals) <- paste0(colnames(pca.vals), ": ", percentVar[1:2], '% variance') @@ -360,10 +360,10 @@ if (file.exists(PlotFile) == FALSE) { col=colors, main=paste("Euclidean distance between", vst_name, "of samples") ) - + ## WRITE SAMPLE DISTANCES TO FILE write.table(cbind(sample = rownames(sampleDistMatrix), sampleDistMatrix),file=paste(opt$outprefix,".sample.dists.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=FALSE) - + dev.off() } @@ -374,105 +374,100 @@ if (file.exists(PlotFile) == FALSE) { ################################################ if (FALSE) { - -ResultsFile <- paste(opt$outprefix,".results.txt",sep="") -if (file.exists(ResultsFile) == FALSE) { - - raw.counts <- counts(dds,normalized=FALSE) - colnames(raw.counts) <- paste(colnames(raw.counts),'raw',sep='.') - pseudo.counts <- counts(dds,normalized=TRUE) - colnames(pseudo.counts) <- paste(colnames(pseudo.counts),'pseudo',sep='.') - - deseq2_results_list <- list() - comparisons <- combn(unique(groups),2) - for (idx in 1:ncol(comparisons)) { - - control.group <- comparisons[1,idx] - treat.group <- comparisons[2,idx] - CompPrefix <- paste(control.group,treat.group,sep="vs") - cat("Saving results for ",CompPrefix," ...\n",sep="") + ResultsFile <- paste(opt$outprefix,".results.txt",sep="") + if (file.exists(ResultsFile) == FALSE) { + raw.counts <- counts(dds,normalized=FALSE) + colnames(raw.counts) <- paste(colnames(raw.counts),'raw',sep='.') + pseudo.counts <- counts(dds,normalized=TRUE) + colnames(pseudo.counts) <- paste(colnames(pseudo.counts),'pseudo',sep='.') + + deseq2_results_list <- list() + comparisons <- combn(unique(groups),2) + for (idx in 1:ncol(comparisons)) { + control.group <- comparisons[1,idx] + treat.group <- comparisons[2,idx] + CompPrefix <- paste(control.group,treat.group,sep="vs") + cat("Saving results for ",CompPrefix," ...\n",sep="") - CompOutDir <- paste(CompPrefix,'/',sep="") - if (file.exists(CompOutDir) == FALSE) { - dir.create(CompOutDir,recursive=TRUE) - } - - control.samples <- samples.vec[which(groups == control.group)] - treat.samples <- samples.vec[which(groups == treat.group)] - comp.samples <- c(control.samples,treat.samples) - - comp.results <- results(dds,contrast=c("condition",c(control.group,treat.group))) - comp.df <- as.data.frame(comp.results) - #comp.table <- cbind(interval.table, as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) - comp.table <- cbind(as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) - - ## WRITE RESULTS FILE - CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.results.txt",sep="") - write.table(comp.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) - - ## FILTER RESULTS BY FDR & LOGFC AND WRITE RESULTS FILE - pdf(file=paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.plots.pdf",sep=""),width=10,height=8) - if (length(comp.samples) > 2) { - for (MIN_FDR in c(0.01,0.05)) { - - ## SUBSET RESULTS BY FDR - #pass.fdr.table <- subset(comp.table, padj < MIN_FDR) - #pass.fdr.up.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange > 0) - #pass.fdr.down.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange < 0) - - ## SUBSET RESULTS BY FDR AND LOGFC - #pass.fdr.logFC.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1) - #pass.fdr.logFC.up.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange > 0) - #pass.fdr.logFC.down.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange < 0) - - ## WRITE RESULTS FILE - #CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.txt",sep="") - #CompBEDFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.bed",sep="") - #write.table(pass.fdr.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) - #write.table(pass.fdr.table[,c("Chr","Start","End","Geneid","log2FoldChange","Strand")], file=CompBEDFile, col.names=FALSE, row.names=FALSE, sep='\t', quote=FALSE) - - ## MA PLOT & VOLCANO PLOT - DESeq2::plotMA(comp.results, main=paste("MA plot FDR <= ",MIN_FDR,sep=""), ylim=c(-2,2),alpha=MIN_FDR) - #plot(comp.table$log2FoldChange, -1*log10(comp.table$padj), col=ifelse(comp.table$padj<=MIN_FDR, "red", "black"), xlab="logFC", ylab="-1*log10(FDR)", main=paste("Volcano plot FDR <=",MIN_FDR,sep=" "), pch=20) + CompOutDir <- paste(CompPrefix,'/',sep="") + if (file.exists(CompOutDir) == FALSE) { + dir.create(CompOutDir,recursive=TRUE) + } + + control.samples <- samples.vec[which(groups == control.group)] + treat.samples <- samples.vec[which(groups == treat.group)] + comp.samples <- c(control.samples,treat.samples) + + comp.results <- results(dds,contrast=c("condition",c(control.group,treat.group))) + comp.df <- as.data.frame(comp.results) + #comp.table <- cbind(interval.table, as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) + comp.table <- cbind(as.data.frame(comp.df), raw.counts[,paste(comp.samples,'raw',sep='.')], pseudo.counts[,paste(comp.samples,'pseudo',sep='.')]) + + ## WRITE RESULTS FILE + CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.results.txt",sep="") + write.table(comp.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + + ## FILTER RESULTS BY FDR & LOGFC AND WRITE RESULTS FILE + pdf(file=paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.plots.pdf",sep=""),width=10,height=8) + if (length(comp.samples) > 2) { + for (MIN_FDR in c(0.01,0.05)) { + + ## SUBSET RESULTS BY FDR + #pass.fdr.table <- subset(comp.table, padj < MIN_FDR) + #pass.fdr.up.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange > 0) + #pass.fdr.down.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange < 0) - ## ADD COUNTS TO LOGFILE - #cat(CompPrefix," genes with FDR <= ",MIN_FDR,": ",nrow(pass.fdr.table)," (up=",nrow(pass.fdr.up.table),", down=",nrow(pass.fdr.down.table),")","\n",file=LogFile,append=TRUE,sep="") - #cat(CompPrefix," genes with FDR <= ",MIN_FDR," & FC > 2: ",nrow(pass.fdr.logFC.table)," (up=",nrow(pass.fdr.logFC.up.table),", down=",nrow(pass.fdr.logFC.down.table),")","\n",file=LogFile,append=TRUE,sep="") + ## SUBSET RESULTS BY FDR AND LOGFC + #pass.fdr.logFC.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1) + #pass.fdr.logFC.up.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange > 0) + #pass.fdr.logFC.down.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange < 0) + + ## WRITE RESULTS FILE + #CompResultsFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.txt",sep="") + #CompBEDFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.bed",sep="") + #write.table(pass.fdr.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) + #write.table(pass.fdr.table[,c("Chr","Start","End","Geneid","log2FoldChange","Strand")], file=CompBEDFile, col.names=FALSE, row.names=FALSE, sep='\t', quote=FALSE) + ## MA PLOT & VOLCANO PLOT + DESeq2::plotMA(comp.results, main=paste("MA plot FDR <= ",MIN_FDR,sep=""), ylim=c(-2,2),alpha=MIN_FDR) + #plot(comp.table$log2FoldChange, -1*log10(comp.table$padj), col=ifelse(comp.table$padj<=MIN_FDR, "red", "black"), xlab="logFC", ylab="-1*log10(FDR)", main=paste("Volcano plot FDR <=",MIN_FDR,sep=" "), pch=20) + + ## ADD COUNTS TO LOGFILE + #cat(CompPrefix," genes with FDR <= ",MIN_FDR,": ",nrow(pass.fdr.table)," (up=",nrow(pass.fdr.up.table),", down=",nrow(pass.fdr.down.table),")","\n",file=LogFile,append=TRUE,sep="") + #cat(CompPrefix," genes with FDR <= ",MIN_FDR," & FC > 2: ",nrow(pass.fdr.logFC.table)," (up=",nrow(pass.fdr.logFC.up.table),", down=",nrow(pass.fdr.logFC.down.table),")","\n",file=LogFile,append=TRUE,sep="") + + } + cat("\n",file=LogFile,append=TRUE,sep="") } - cat("\n",file=LogFile,append=TRUE,sep="") - } - - ## SAMPLE CORRELATION HEATMAP - rld.subset <- assay(rld)[,comp.samples] - sampleDists <- dist(t(rld.subset)) - sampleDistMatrix <- as.matrix(sampleDists) - colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) - pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) + + ## SAMPLE CORRELATION HEATMAP + rld.subset <- assay(rld)[,comp.samples] + sampleDists <- dist(t(rld.subset)) + sampleDistMatrix <- as.matrix(sampleDists) + colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) + pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) - ## SCATTER PLOT FOR RLOG COUNTS - combs <- combn(comp.samples,2,simplify=FALSE) - clabels <- sapply(combs,function(x){paste(x,collapse=' & ')}) - plotdat <- data.frame(x=unlist(lapply(combs, function(x){rld.subset[, x[1] ]})),y=unlist(lapply(combs, function(y){rld.subset[, y[2] ]})),comp=rep(clabels, each=nrow(rld.subset))) - plot <- xyplot(y~x|comp,plotdat, + ## SCATTER PLOT FOR RLOG COUNTS + combs <- combn(comp.samples,2,simplify=FALSE) + clabels <- sapply(combs,function(x){paste(x,collapse=' & ')}) + plotdat <- data.frame(x=unlist(lapply(combs, function(x){rld.subset[, x[1] ]})),y=unlist(lapply(combs, function(y){rld.subset[, y[2] ]})),comp=rep(clabels, each=nrow(rld.subset))) + plot <- xyplot(y~x|comp,plotdat, panel=function(...){ panel.xyplot(...) panel.abline(0,1,col="red") }, par.strip.text=list(cex=0.5)) - print(plot) - dev.off() - - colnames(comp.df) <- paste(CompPrefix,".",colnames(comp.df),sep="") - deseq2_results_list[[idx]] <- comp.df - + print(plot) + dev.off() + + colnames(comp.df) <- paste(CompPrefix,".",colnames(comp.df),sep="") + deseq2_results_list[[idx]] <- comp.df + } + + ## WRITE RESULTS FROM ALL COMPARISONS TO FILE + deseq2_results_table <- cbind(do.call(cbind, deseq2_results_list),raw.counts,pseudo.counts) + write.table(deseq2_results_table, file=ResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) } - - ## WRITE RESULTS FROM ALL COMPARISONS TO FILE - deseq2_results_table <- cbind(do.call(cbind, deseq2_results_list),raw.counts,pseudo.counts) - write.table(deseq2_results_table, file=ResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) - -} } ################################################ diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 325de2bd..d96d6fe4 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -146,7 +146,7 @@ def load_data(self): self.bam_df_list = list() self.frip = pd.DataFrame(data=None, index=range(len(bam_list)), columns=['group','replicate','mapped_frags','frags_in_peaks','percentage_frags_in_peaks']) k = 0 #counter - + def pe_bam_to_df(bam_path): bamfile = pysam.AlignmentFile(bam_path, "rb") # Iterate through reads. @@ -193,7 +193,7 @@ def pe_bam_to_df(bam_path): chrom_arr[k] = chrom k +=1 - + bamfile.close() # remove zeros and empty elements. The indicies for these are always the same from end_arr and chrom_arr @@ -274,7 +274,7 @@ def array_permutate(x): unique_replicates = self.seacr_beds.replicate.unique() rep_permutations = array_permutate(range(len(unique_replicates))) self.replicate_number = len(unique_replicates) - + if self.replicate_number > 1: idx_count=0 for i in list(range(len(unique_groups))): @@ -461,7 +461,7 @@ def alignment_summary(self): seq_summary[1,1].set_ylabel("Percent of Fragments Aligned") plt.subplots_adjust(wspace=0.4, hspace=0.45) - + return fig, df_data # ---------- Plot 2 - Duplication Summary --------- # @@ -502,7 +502,7 @@ def duplication_summary(self): return fig, df_data - + # ---------- Plot 3 - Fragment Distribution Violin --------- # def fraglen_summary_violin(self): fig, ax = plt.subplots() @@ -561,7 +561,7 @@ def scale_factor_summary(self): scale_summary[1].set_ylabel('Normalised Fragment Count') return fig, df_data_scale - + # ---------- Plot 7 - Peak Analysis --------- # def no_of_peaks(self): # 7a - Number of peaks diff --git a/conf/base.config b/conf/base.config index e4084638..b1b6ebed 100644 --- a/conf/base.config +++ b/conf/base.config @@ -11,35 +11,35 @@ process { - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 7.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + cpus = { check_max( 1 * task.attempt, 'cpus' ) } + memory = { check_max( 7.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } - errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } - maxRetries = 1 - maxErrors = '-1' + errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } + maxRetries = 1 + maxErrors = '-1' - // Process-specific resource requirements - // NOTE - Only one of the labels below are used in the fastqc process in the main script. - // If possible, it would be nice to keep the same label naming convention when - // adding in your processes. - // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors - withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 14.GB * task.attempt, 'memory' ) } - time = { check_max( 6.h * task.attempt, 'time' ) } - } - withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 42.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } - } - withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 84.GB * task.attempt, 'memory' ) } - time = { check_max( 10.h * task.attempt, 'time' ) } - } - withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } - } + // Process-specific resource requirements + // NOTE - Only one of the labels below are used in the fastqc process in the main script. + // If possible, it would be nice to keep the same label naming convention when + // adding in your processes. + // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors + withLabel:process_low { + cpus = { check_max( 2 * task.attempt, 'cpus' ) } + memory = { check_max( 14.GB * task.attempt, 'memory' ) } + time = { check_max( 6.h * task.attempt, 'time' ) } + } + withLabel:process_medium { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 42.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } + } + withLabel:process_high { + cpus = { check_max( 12 * task.attempt, 'cpus' ) } + memory = { check_max( 84.GB * task.attempt, 'memory' ) } + time = { check_max( 10.h * task.attempt, 'time' ) } + } + withLabel:process_long { + time = { check_max( 20.h * task.attempt, 'time' ) } + } } diff --git a/conf/igenomes.config b/conf/igenomes.config index c7550a6f..b74ec541 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -9,32 +9,32 @@ */ params { - // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" } 'GRCm38' { fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" diff --git a/main.nf b/main.nf index 0fdbcd41..cd38c77f 100644 --- a/main.nf +++ b/main.nf @@ -3,7 +3,7 @@ ======================================================================================== nf-core/cutandrun ======================================================================================== - Github : https://github.com/nf-core/cutandrun + Github : https://github.com/nf-core/cutandrun Website: https://nf-co.re/cutandrun Slack : https://nfcore.slack.com/channels/cutandrun ---------------------------------------------------------------------------------------- @@ -53,7 +53,7 @@ workflow NFCORE_CUTANDRUN { if (params.public_data_ids) { include { SRA_DOWNLOAD } from './workflows/sra_download' SRA_DOWNLOAD () - + /* * WORKFLOW: Run main nf-core/cutandrun analysis pipeline */ From f8477e75ab6e8898ca4374fb380dc123107cb4a0 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:25:33 +0100 Subject: [PATCH 269/675] ignoring igenomes.config for style checking --- .ecrc | 2 +- conf/igenomes.config | 52 ++++++++++++++++++++++---------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.ecrc b/.ecrc index cf1959f6..773511d4 100644 --- a/.ecrc +++ b/.ecrc @@ -1,3 +1,3 @@ { - "Exclude": ["README.md", "\\.bed$"] + "Exclude": ["README.md", "\\.bed$", "conf/igenomes.config"] } \ No newline at end of file diff --git a/conf/igenomes.config b/conf/igenomes.config index b74ec541..c7550a6f 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -9,32 +9,32 @@ */ params { - // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" } 'GRCm38' { fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" From 134173af447651dba3c332d4e5a7a9044ea7dd0e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:28:21 +0100 Subject: [PATCH 270/675] Updated config --- .ecrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.ecrc b/.ecrc index 773511d4..685bc747 100644 --- a/.ecrc +++ b/.ecrc @@ -1,3 +1,12 @@ { "Exclude": ["README.md", "\\.bed$", "conf/igenomes.config"] + "Disable": { + // set these options to true to disable specific checks + "EndOfLine": true, + "Indentation": false, + "InsertFinalNewline": false, + "TrimTrailingWhitespace": false, + "IndentSize": false, + "MaxLineLength": false + } } \ No newline at end of file From 92b6d61ab1242fdcde864a031ab5f550d89b3693 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:29:17 +0100 Subject: [PATCH 271/675] Updated config --- .ecrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ecrc b/.ecrc index 685bc747..dbfc9356 100644 --- a/.ecrc +++ b/.ecrc @@ -4,7 +4,7 @@ // set these options to true to disable specific checks "EndOfLine": true, "Indentation": false, - "InsertFinalNewline": false, + "InsertFinalNewline": true, "TrimTrailingWhitespace": false, "IndentSize": false, "MaxLineLength": false From f92d78f35656f10bbf42754ff877aba4e31b3721 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:30:24 +0100 Subject: [PATCH 272/675] Updated config --- .ecrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ecrc b/.ecrc index dbfc9356..1db771da 100644 --- a/.ecrc +++ b/.ecrc @@ -2,9 +2,9 @@ "Exclude": ["README.md", "\\.bed$", "conf/igenomes.config"] "Disable": { // set these options to true to disable specific checks - "EndOfLine": true, + "EndOfLine": false, "Indentation": false, - "InsertFinalNewline": true, + "InsertFinalNewline": false, "TrimTrailingWhitespace": false, "IndentSize": false, "MaxLineLength": false From 47c461b099f601c78ac6513cb6e170a76fde5e2e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 25 May 2021 09:35:47 +0100 Subject: [PATCH 273/675] Updated config --- .ecrc | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.ecrc b/.ecrc index 1db771da..773511d4 100644 --- a/.ecrc +++ b/.ecrc @@ -1,12 +1,3 @@ { "Exclude": ["README.md", "\\.bed$", "conf/igenomes.config"] - "Disable": { - // set these options to true to disable specific checks - "EndOfLine": false, - "Indentation": false, - "InsertFinalNewline": false, - "TrimTrailingWhitespace": false, - "IndentSize": false, - "MaxLineLength": false - } } \ No newline at end of file From 43f208d1e97cde1c85e9d7eae9f3bbee44255914 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 25 May 2021 10:47:24 +0100 Subject: [PATCH 274/675] remove trailing spaces in blacklist --- assets/blacklists/GRCh37-blacklist.bed | 822 ++++++++++++------------- 1 file changed, 411 insertions(+), 411 deletions(-) mode change 100755 => 100644 assets/blacklists/GRCh37-blacklist.bed diff --git a/assets/blacklists/GRCh37-blacklist.bed b/assets/blacklists/GRCh37-blacklist.bed old mode 100755 new mode 100644 index dab19f36..b8706302 --- a/assets/blacklists/GRCh37-blacklist.bed +++ b/assets/blacklists/GRCh37-blacklist.bed @@ -1,411 +1,411 @@ -1 564449 570371 High_Mappability_island 1000 . -1 724136 727043 Satellite_repeat 1000 . -1 825006 825115 BSR/Beta 1000 . -1 2583334 2634374 Low_mappability_island 1000 . -1 4363064 4363242 (CATTC)n 1000 . -1 5725866 5736651 Low_mappability_island 1000 . -1 16839923 16841396 Low_mappability_island 1000 . -1 38077347 38077423 Low_mappability_island 1000 . -1 91852785 91853147 LSU-rRNA_Hsa 1000 . -1 104163724 104163860 Low_mappability_island 1000 . -1 108112972 108113707 LSU-rRNA_Hsa 1000 . -1 121351474 121487059 centromeric_repeat 1000 . -1 142535434 142543081 Satellite_repeat 1000 . -1 142723256 142723968 Low_mappability_island 1000 . -1 142792613 142793303 Low_mappability_island 1000 . -1 142835822 142837333 Low_mappability_island 1000 . -1 143274490 143284340 centromeric_repeat 1000 . -1 145277108 145277572 LSU-rRNA_Hsa 1000 . -1 149033183 149035829 Satellite_repeat 1000 . -1 156186169 156186712 High_Mappability_island 1000 . -1 224199390 224204260 Satellite_repeat 1000 . -1 233318467 233318516 (CATTC)n 1000 . -1 236260366 236260821 Low_mappability_island 1000 . -1 237766308 237766764 LSU-rRNA_Hsa 1000 . -1 238105345 238105511 Low_mappability_island 1000 . -1 238108025 238108378 Low_mappability_island 1000 . -1 238108645 238109697 Low_mappability_island 1000 . -10 18841533 18862467 (CATTC)n 1000 . -10 20035661 20037171 Low_mappability_island 1000 . -10 36722282 36723650 Low_mappability_island 1000 . -10 38772277 38819357 Satellite_repeat 1000 . -10 38868892 38889025 Satellite_repeat 1000 . -10 39076515 39155771 Satellite_repeat 1000 . -10 42354835 42548642 centromeric_repeat 1000 . -10 42596676 42602082 Satellite_repeat 1000 . -10 42596700 42602110 Satellite_repeat 1000 . -10 42661264 42667623 Satellite_repeat 1000 . -10 42790522 42818398 Satellite_repeat 1000 . -10 135498649 135502716 Satellite_repeat 1000 . -11 6831669 6831838 ALR/Alpha 1000 . -11 10529403 10531969 Low_mappability_island 1000 . -11 48671444 48902406 centromeric_repeat 1000 . -11 48931242 48964015 centromeric_repeat 1000 . -11 50318471 50784078 centromeric_repeat 1000 . -11 51090700 51374066 centromeric_repeat 1000 . -11 51567242 51594226 centromeric_repeat 1000 . -11 54694046 55027975 centromeric_repeat 1000 . -11 73221660 73221946 Low_mappability_island 1000 . -11 85194913 85195322 LSU-rRNA_Hsa 1000 . -11 87524468 87525005 Low_mappability_island 1000 . -11 103275584 103281729 Low_mappability_island 1000 . -11 122874287 122874443 Low_mappability_island 1000 . -12 20704285 20704583 SSU-rRNA_Hsa 1000 . -12 34372315 34372825 LSU-rRNA_Hsa 1000 . -12 34432130 34857010 centromeric_repeat 1000 . -12 37989447 38441828 centromeric_repeat 1000 . -12 38531376 38531930 LSU-rRNA_Hsa 1000 . -12 41757383 41757545 Low_mappability_island 1000 . -12 127650407 127651075 LSU-rRNA_Hsa 1000 . -12 132061320 132062046 Low_mappability_island 1000 . -13 56545728 56545925 Low_mappability_island 1000 . -13 110076444 110076782 Low_mappability_island 1000 . -14 18999935 19056900 centromeric_repeat 1000 . -14 32953263 32954381 Low_mappability_island 1000 . -14 84637832 84639038 Low_mappability_island 1000 . -14 90341302 90341516 SSU-rRNA_Hsa 1000 . -15 19999941 20044132 centromeric_repeat 1000 . -16 32493036 32570826 ALR/Alpha 1000 . -16 32590063 32598801 ALR/Alpha 1000 . -16 33237130 33241330 Low_mappability_island 1000 . -16 33864355 34023306 centromeric_repeat 1000 . -16 34180542 34197081 Satellite_repeat 1000 . -16 34530115 34542632 BSR/Beta 1000 . -16 35193580 35285885 centromeric_repeat 1000 . -16 46385718 46456668 Satellite_repeat 1000 . -16 46497639 46500515 Satellite_repeat 1000 . -16 47538629 47539297 LSU-rRNA_Hsa 1000 . -17 19355538 19356096 LSU-rRNA_Hsa 1000 . -17 19502495 19506773 Low_mappability_island 1000 . -17 21905167 21906712 centromeric_repeat 1000 . -17 22018524 22032049 Low_mappability_island 1000 . -17 22221073 22263006 centromeric_repeat 1000 . -17 25263010 25268059 Satellite_repeat 1000 . -17 25415551 25417559 telomeric_repeat 1000 . -17 31149365 31149981 High_Mappability_island 1000 . -17 33478114 33478372 LSU-rRNA_Hsa 1000 . -17 41381502 41382591 High_Mappability_island 1000 . -17 41463538 41464075 High_Mappability_island 1000 . -17 41464478 41465015 snRNA 1000 . -17 41465562 41467288 High_Mappability_island 1000 . -17 51183038 51183763 Low_mappability_island 1000 . -17 55868618 55868752 LSU-rRNA_Hsa 1000 . -17 75158031 75158430 LSU-rRNA_Hsa 1000 . -18 96416 97552 Satellite_repeat 1000 . -18 105658 112233 Satellite_repeat 1000 . -18 2842252 2842356 Low_mappability_island 1000 . -18 15393801 15393992 centromeric_repeat 1000 . -18 18510894 18520356 centromeric_repeat 1000 . -18 44126235 44126593 (CATTC)n 1000 . -18 45379603 45379864 Low_mappability_island 1000 . -18 50319086 50319301 Low_mappability_island 1000 . -18 77772846 77773065 LSU-rRNA_Hsa 1000 . -19 246006 247844 TAR1 1000 . -19 22877614 22877696 SSU-rRNA_Hsa 1000 . -19 23235030 23235504 BSR/Beta 1000 . -19 24182398 24186210 LSU-rRNA_Hsa 1000 . -19 24385474 24633168 centromeric_repeat 1000 . -19 27730611 28262682 centromeric_repeat 1000 . -19 36066445 36066810 LSU-rRNA_Hsa 1000 . -19 36756398 36800948 centromeric_repeat 1000 . -19 37759473 37797722 centromeric_repeat 1000 . -19 44914313 44916340 ACRO1 1000 . -19 44960681 44962681 ACRO1 1000 . -2 739925 740994 Low_mappability_island 1000 . -2 49456729 49457067 Low_mappability_island 1000 . -2 88124390 88124903 Low_mappability_island 1000 . -2 89830421 89880514 Satellite_repeat 1000 . -2 90371401 90394776 Satellite_repeat 1000 . -2 90443001 90545431 Low_mappability_island 1000 . -2 91595080 91616015 Satellite_repeat 1000 . -2 92267428 92326280 centromeric_repeat 1000 . -2 115695017 115695281 LSU-rRNA_Hsa 1000 . -2 117781085 117781300 Low_mappability_island 1000 . -2 132966248 132989300 centromeric_repeat 1000 . -2 132994855 133007983 ALR/Alpha 1000 . -2 133011824 133013298 SSU-rRNA_Hsa 1000 . -2 133036250 133040042 LSU-rRNA_Hsa 1000 . -2 133044095 133045945 ACRO1 1000 . -2 143848503 143848792 Low_mappability_island 1000 . -2 148022736 148022878 Low_mappability_island 1000 . -2 149639207 149639515 Low_mappability_island 1000 . -2 156120500 156120610 Low_mappability_island 1000 . -2 162135000 162139241 Low_mappability_island 1000 . -2 230045426 230045796 LSU-rRNA_Hsa 1000 . -20 26257032 26320267 centromeric_repeat 1000 . -20 29517710 29521147 centromeric_repeat 1000 . -20 29803876 29833334 centromeric_repeat 1000 . -20 55932703 55936114 chrM 1000 . -20 62916702 62918053 telomeric_repeat 1000 . -21 9647205 9648529 Low_mappability_island 1000 . -21 9694896 9704962 centromeric_repeat 1000 . -21 9825451 9827612 High_Mappability_island 1000 . -21 9827612 9845233 Low_mappability_island 1000 . -21 9881895 9882569 TAR1 1000 . -21 10084922 10088004 Satellite_repeat 1000 . -21 10492876 10493049 Low_mappability_island 1000 . -21 10599428 10599915 TAR1 1000 . -21 10697886 10860890 centromeric_repeat 1000 . -21 11186054 11188131 Satellite_repeat 1000 . -21 14338127 14369791 centromeric_repeat 1000 . -21 18800575 18800997 (GAGTG)n 1000 . -21 27228003 27228242 SSU-rRNA_Hsa 1000 . -21 46796081 46796336 Low_mappability_island 1000 . -22 16847814 16862659 Satellite_repeat 1000 . -22 18876789 18884510 Satellite_repeat 1000 . -3 25508897 25509131 Low_mappability_island 1000 . -3 73159606 73161131 snRNA 1000 . -3 75696297 75699304 BSR/Beta 1000 . -3 75717841 75720426 Satellite_repeat 1000 . -3 80995858 81014459 ALR/Alpha 1000 . -3 90311686 90507410 centromeric_repeat 1000 . -3 93504815 93519133 centromeric_repeat 1000 . -3 96335934 96337436 Low_mappability_island 1000 . -3 160665423 160665642 Low_mappability_island 1000 . -3 196625514 196625860 Satellite_repeat 1000 . -3 197825427 197834080 Low_mappability_island 1000 . -4 9987 12694 telomeric_repeat 1000 . -4 12276463 12292424 ALR/Alpha 1000 . -4 12641862 12642305 Low_mappability_island 1000 . -4 21583630 21583719 (GAATG)n 1000 . -4 27732004 27732240 Low_mappability_island 1000 . -4 47774268 47774416 Low_mappability_island 1000 . -4 49085372 49342114 centromeric_repeat 1000 . -4 49488472 49662085 centromeric_repeat 1000 . -4 52659961 52688986 centromeric_repeat 1000 . -4 56194229 56194584 Low_mappability_island 1000 . -4 65473858 65473941 Low_mappability_island 1000 . -4 68264186 68266830 centromeric_repeat 1000 . -4 70296565 70296841 LSU-rRNA_Hsa 1000 . -4 76807083 76807320 LSU-rRNA_Hsa 1000 . -4 78929660 78929920 Low_mappability_island 1000 . -4 156374749 156377226 chrM 1000 . -4 156384860 156387314 Low_mappability_island 1000 . -4 163342479 163342744 Low_mappability_island 1000 . -4 190190746 190203442 Low_mappability_island 1000 . -4 190801869 190802909 Low_mappability_island 1000 . -4 190943802 190943962 Satellite_repeat 1000 . -4 190987268 190990949 Satellite_repeat 1000 . -4 191026302 191044344 telomeric_repeat 1000 . -5 17517177 17600940 Low_mappability_island 1000 . -5 21477365 21497415 Low_mappability_island 1000 . -5 34177882 34197574 Low_mappability_island 1000 . -5 45908253 46411114 centromeric_repeat 1000 . -5 49405493 49554574 centromeric_repeat 1000 . -5 71146650 71146996 LSU-rRNA_Hsa 1000 . -5 79945807 79948223 Low_mappability_island 1000 . -5 93903068 93906726 Low_mappability_island 1000 . -5 97746525 97746679 Low_mappability_island 1000 . -5 99381556 99390873 Low_mappability_island 1000 . -5 105889063 105889263 chrM 1000 . -5 123095972 123097432 chrM 1000 . -5 134258949 134264271 Low_mappability_island 1000 . -5 174541634 174542177 SSU-rRNA_Hsa 1000 . -6 58735349 58739031 centromeric_repeat 1000 . -6 58745955 58780547 centromeric_repeat 1000 . -6 61880095 61944008 centromeric_repeat 1000 . -6 62189892 62206612 ALR/Alpha 1000 . -6 62207809 62230644 ALR/Alpha 1000 . -6 62283966 62284581 Low_mappability_island 1000 . -6 133593944 133594201 LSU-rRNA_Hsa 1000 . -6 137059142 137059326 SSU-rRNA_Hsa 1000 . -6 150665074 150665281 SSU-rRNA_Hsa 1000 . -6 157731310 157735525 Low_mappability_island 1000 . -7 43878355 43878530 TAR1 1000 . -7 45291517 45291740 Low_mappability_island 1000 . -7 56437808 56442977 Low_mappability_island 1000 . -7 57253980 57254183 Low_mappability_island 1000 . -7 57255310 57255444 Low_mappability_island 1000 . -7 57261829 57261998 Low_mappability_island 1000 . -7 57544726 57556913 Satellite_repeat 1000 . -7 57811488 57836990 centromeric_repeat 1000 . -7 57939184 58055539 centromeric_repeat 1000 . -7 61054285 62454680 centromeric_repeat 1000 . -7 64059157 64066183 BSR/Beta 1000 . -7 64951348 64956223 centromeric_repeat 1000 . -7 68201468 68201673 Low_mappability_island 1000 . -7 68527370 68527788 LSU-rRNA_Hsa 1000 . -7 80962907 80963147 SSU-rRNA_Hsa 1000 . -7 100550640 100551321 Low_mappability_island 1000 . -7 142372972 142375638 Low_mappability_island 1000 . -7 145694403 145694561 Low_mappability_island 1000 . -8 155512 157639 TAR1 1000 . -8 21455971 21456306 LSU-rRNA_Hsa 1000 . -8 32868966 32873279 Low_mappability_island 1000 . -8 43092737 43097573 Satellite_repeat 1000 . -8 43399486 43843604 centromeric_repeat 1000 . -8 46838215 47457541 centromeric_repeat 1000 . -8 47739043 47742797 Low_mappability_island 1000 . -8 47750844 47776101 BSR/Beta 1000 . -8 56754955 56755418 LSU-rRNA_Hsa 1000 . -8 69218401 69218922 LSU-rRNA_Hsa 1000 . -8 70602248 70602620 LSU-rRNA_Hsa 1000 . -8 77114154 77114389 Low_mappability_island 1000 . -8 100508010 100508287 Low_mappability_island 1000 . -9 10435 11574 TAR1 1000 . -9 4799734 4800000 SSU-rRNA_Hsa 1000 . -9 33656606 33659249 Low_mappability_island 1000 . -9 42819021 42832395 centromeric_repeat 1000 . -9 44070617 44070871 Low_mappability_island 1000 . -9 44873123 44902307 centromeric_repeat 1000 . -9 45355954 45357644 telomeric_repeat 1000 . -9 45435109 45443517 centromeric_repeat 1000 . -9 66494170 66494805 TAR1 1000 . -9 66767710 66864329 centromeric_repeat 1000 . -9 66970914 67005594 centromeric_repeat 1000 . -9 67315122 67321036 centromeric_repeat 1000 . -9 67789868 67792893 centromeric_repeat 1000 . -9 68410775 68435115 Low_mappability_island 1000 . -9 69677073 69687998 centromeric_repeat 1000 . -9 69689770 69711497 centromeric_repeat 1000 . -9 69947961 70011196 centromeric_repeat 1000 . -9 70076144 70076855 centromeric_repeat 1000 . -9 70318723 70327683 centromeric_repeat 1000 . -9 72653073 72653572 Satellite_repeat 1000 . -9 78790077 78790255 (GAATG)n 1000 . -9 79186574 79187026 LSU-rRNA_Hsa 1000 . -9 141019938 141021783 TAR1 1000 . -MT 1 16569 chrM 1000 . -X 55206111 55206740 Low_mappability_island 1000 . -X 55207753 55208152 Low_mappability_island 1000 . -X 55208300 55208643 Low_mappability_island 1000 . -X 55208980 55209208 Low_mappability_island 1000 . -X 55209655 55210006 Low_mappability_island 1000 . -X 58330488 58330843 centromeric_repeat 1000 . -X 58373806 58373962 centromeric_repeat 1000 . -X 58377680 58377864 centromeric_repeat 1000 . -X 58415350 58416387 centromeric_repeat 1000 . -X 58432411 58432680 centromeric_repeat 1000 . -X 58485887 58486241 centromeric_repeat 1000 . -X 58488898 58494528 centromeric_repeat 1000 . -X 58499466 58504235 centromeric_repeat 1000 . -X 58506076 58528214 centromeric_repeat 1000 . -X 58528184 58536883 centromeric_repeat 1000 . -X 58544061 58582415 centromeric_repeat 1000 . -X 61681834 61919683 centromeric_repeat 1000 . -X 62003205 62041580 centromeric_repeat 1000 . -X 83658929 83659019 Low_mappability_island 1000 . -X 108297348 108297886 LSU-rRNA_Hsa 1000 . -X 114959057 115006437 Low_mappability_island 1000 . -X 125605623 125607351 Low_mappability_island 1000 . -X 125714985 125715338 Low_mappability_island 1000 . -X 125864844 125864980 Low_mappability_island 1000 . -X 125865719 125865874 Low_mappability_island 1000 . -Y 313470 313613 ALR/Alpha 1000 . -Y 3004989 3005175 LSU-rRNA_Hsa 1000 . -Y 4212807 4212910 Low_mappability_island 1000 . -Y 7671817 7694928 BSR/Beta 1000 . -Y 7726064 7730229 BSR/Beta 1000 . -Y 7730734 7731598 BSR/Beta 1000 . -Y 7735811 7752887 BSR/Beta 1000 . -Y 7785067 7806311 BSR/Beta 1000 . -Y 7806856 7814704 BSR/Beta 1000 . -Y 7815230 7820478 BSR/Beta 1000 . -Y 7829937 7832032 BSR/Beta 1000 . -Y 7832744 7848695 BSR/Beta 1000 . -Y 7870343 7873582 BSR/Beta 1000 . -Y 7874115 7874584 BSR/Beta 1000 . -Y 7875409 7885257 BSR/Beta 1000 . -Y 7886545 7894591 BSR/Beta 1000 . -Y 7898927 7916812 BSR/Beta 1000 . -Y 7918790 7921352 BSR/Beta 1000 . -Y 7926344 7936705 BSR/Beta 1000 . -Y 7941130 7947438 BSR/Beta 1000 . -Y 7948790 7964448 BSR/Beta 1000 . -Y 8179010 8181143 BSR/Beta 1000 . -Y 8181757 8213330 BSR/Beta 1000 . -Y 8214629 8215637 BSR/Beta 1000 . -Y 8220421 8230061 BSR/Beta 1000 . -Y 8230686 8231546 BSR/Beta 1000 . -Y 8240772 8265916 BSR/Beta 1000 . -Y 8291535 8292942 BSR/Beta 1000 . -Y 8294002 8295175 BSR/Beta 1000 . -Y 8296944 8321375 BSR/Beta 1000 . -Y 8325813 8325929 BSR/Beta 1000 . -Y 8326678 8333466 BSR/Beta 1000 . -Y 8334027 8342387 BSR/Beta 1000 . -Y 8356544 8369346 BSR/Beta 1000 . -Y 8909560 8909925 TAR1 1000 . -Y 8979478 8979585 Low_mappability_island 1000 . -Y 9072781 9072993 TAR1 1000 . -Y 9908430 9925608 centromeric_repeat 1000 . -Y 9981952 9982126 BSR/Beta 1000 . -Y 10034864 10036712 SSU-rRNA_Hsa 1000 . -Y 10040627 10045657 ALR/Alpha 1000 . -Y 10047773 10052533 ALR/Alpha 1000 . -Y 10053695 10057722 ALR/Alpha 1000 . -Y 10059394 10073694 ALR/Alpha 1000 . -Y 10075082 10075781 ALR/Alpha 1000 . -Y 10080736 10104539 ALR/Alpha 1000 . -Y 13104530 13144368 centromeric_repeat 1000 . -Y 13193966 13196535 Low_mappability_island 1000 . -Y 13252193 13259484 centromeric_repeat 1000 . -Y 13290177 13290667 chrM 1000 . -Y 13445957 13490591 Satellite_repeat 1000 . -Y 13642186 13749784 Satellite_repeat 1000 . -Y 13798522 13870984 Satellite_repeat 1000 . -Y 19691913 19692524 LSU-rRNA_Hsa 1000 . -Y 19764063 19776198 ALR/Alpha 1000 . -Y 19780600 19781704 ALR/Alpha 1000 . -Y 19783669 19796396 ALR/Alpha 1000 . -Y 19800068 19801419 ALR/Alpha 1000 . -Y 19808085 19817100 ALR/Alpha 1000 . -Y 19944298 19944581 TAR1 1000 . -Y 20235195 20235478 TAR1 1000 . -Y 20362679 20371694 ALR/Alpha 1000 . -Y 20378360 20379711 ALR/Alpha 1000 . -Y 20383383 20396110 ALR/Alpha 1000 . -Y 20398075 20399179 ALR/Alpha 1000 . -Y 20403581 20415713 ALR/Alpha 1000 . -Y 20487248 20487859 LSU-rRNA_Hsa 1000 . -Y 23124788 23125577 BSR/Beta 1000 . -Y 23149027 23151205 BSR/Beta 1000 . -Y 23157969 23158245 BSR/Beta 1000 . -Y 23159001 23167737 BSR/Beta 1000 . -Y 23178886 23181770 BSR/Beta 1000 . -Y 23220740 23223625 BSR/Beta 1000 . -Y 23234125 23235822 BSR/Beta 1000 . -Y 23236898 23248080 BSR/Beta 1000 . -Y 23248729 23248851 BSR/Beta 1000 . -Y 23899295 23899388 TAR1 1000 . -Y 23956449 23956628 TAR1 1000 . -Y 24247659 24247700 TAR1 1000 . -Y 24630999 24631040 TAR1 1000 . -Y 24953159 24975657 BSR/Beta 1000 . -Y 24980997 24991235 BSR/Beta 1000 . -Y 25022753 25039185 BSR/Beta 1000 . -Y 25040153 25042421 BSR/Beta 1000 . -Y 25048332 25059258 BSR/Beta 1000 . -Y 25060235 25064798 BSR/Beta 1000 . -Y 25099139 25121882 BSR/Beta 1000 . -Y 25122419 25160800 BSR/Beta 1000 . -Y 25182404 25192372 BSR/Beta 1000 . -Y 25217722 25219409 BSR/Beta 1000 . -Y 25493588 25495275 BSR/Beta 1000 . -Y 26148315 26148450 TAR1 1000 . -Y 26586905 26609405 BSR/Beta 1000 . -Y 26614745 26624983 BSR/Beta 1000 . -Y 26656502 26672934 BSR/Beta 1000 . -Y 26673902 26676170 BSR/Beta 1000 . -Y 26682081 26693007 BSR/Beta 1000 . -Y 26693984 26698547 BSR/Beta 1000 . -Y 26732883 26755623 BSR/Beta 1000 . -Y 26756160 26794538 BSR/Beta 1000 . -Y 26816148 26826116 BSR/Beta 1000 . -Y 26851466 26853153 BSR/Beta 1000 . -Y 27109247 27110934 BSR/Beta 1000 . -Y 27136281 27146249 BSR/Beta 1000 . -Y 27167859 27206241 BSR/Beta 1000 . -Y 27206778 27229502 BSR/Beta 1000 . -Y 27263848 27268411 BSR/Beta 1000 . -Y 27269388 27280315 BSR/Beta 1000 . -Y 27286226 27288494 BSR/Beta 1000 . -Y 27289462 27305895 BSR/Beta 1000 . -Y 27337415 27347656 BSR/Beta 1000 . -Y 27352996 27375497 BSR/Beta 1000 . -Y 27813984 27814119 TAR1 1000 . -Y 28555026 28555353 TAR1 1000 . -Y 28784129 28819695 Satellite_repeat 1000 . -Y 58819367 58917648 (CATTC)n 1000 . -Y 58971913 58997782 (CATTC)n 1000 . -Y 59361267 59362785 TAR1 1000 . +1 564449 570371 High_Mappability_island 1000 . +1 724136 727043 Satellite_repeat 1000 . +1 825006 825115 BSR/Beta 1000 . +1 2583334 2634374 Low_mappability_island 1000 . +1 4363064 4363242 (CATTC)n 1000 . +1 5725866 5736651 Low_mappability_island 1000 . +1 16839923 16841396 Low_mappability_island 1000 . +1 38077347 38077423 Low_mappability_island 1000 . +1 91852785 91853147 LSU-rRNA_Hsa 1000 . +1 104163724 104163860 Low_mappability_island 1000 . +1 108112972 108113707 LSU-rRNA_Hsa 1000 . +1 121351474 121487059 centromeric_repeat 1000 . +1 142535434 142543081 Satellite_repeat 1000 . +1 142723256 142723968 Low_mappability_island 1000 . +1 142792613 142793303 Low_mappability_island 1000 . +1 142835822 142837333 Low_mappability_island 1000 . +1 143274490 143284340 centromeric_repeat 1000 . +1 145277108 145277572 LSU-rRNA_Hsa 1000 . +1 149033183 149035829 Satellite_repeat 1000 . +1 156186169 156186712 High_Mappability_island 1000 . +1 224199390 224204260 Satellite_repeat 1000 . +1 233318467 233318516 (CATTC)n 1000 . +1 236260366 236260821 Low_mappability_island 1000 . +1 237766308 237766764 LSU-rRNA_Hsa 1000 . +1 238105345 238105511 Low_mappability_island 1000 . +1 238108025 238108378 Low_mappability_island 1000 . +1 238108645 238109697 Low_mappability_island 1000 . +10 18841533 18862467 (CATTC)n 1000 . +10 20035661 20037171 Low_mappability_island 1000 . +10 36722282 36723650 Low_mappability_island 1000 . +10 38772277 38819357 Satellite_repeat 1000 . +10 38868892 38889025 Satellite_repeat 1000 . +10 39076515 39155771 Satellite_repeat 1000 . +10 42354835 42548642 centromeric_repeat 1000 . +10 42596676 42602082 Satellite_repeat 1000 . +10 42596700 42602110 Satellite_repeat 1000 . +10 42661264 42667623 Satellite_repeat 1000 . +10 42790522 42818398 Satellite_repeat 1000 . +10 135498649 135502716 Satellite_repeat 1000 . +11 6831669 6831838 ALR/Alpha 1000 . +11 10529403 10531969 Low_mappability_island 1000 . +11 48671444 48902406 centromeric_repeat 1000 . +11 48931242 48964015 centromeric_repeat 1000 . +11 50318471 50784078 centromeric_repeat 1000 . +11 51090700 51374066 centromeric_repeat 1000 . +11 51567242 51594226 centromeric_repeat 1000 . +11 54694046 55027975 centromeric_repeat 1000 . +11 73221660 73221946 Low_mappability_island 1000 . +11 85194913 85195322 LSU-rRNA_Hsa 1000 . +11 87524468 87525005 Low_mappability_island 1000 . +11 103275584 103281729 Low_mappability_island 1000 . +11 122874287 122874443 Low_mappability_island 1000 . +12 20704285 20704583 SSU-rRNA_Hsa 1000 . +12 34372315 34372825 LSU-rRNA_Hsa 1000 . +12 34432130 34857010 centromeric_repeat 1000 . +12 37989447 38441828 centromeric_repeat 1000 . +12 38531376 38531930 LSU-rRNA_Hsa 1000 . +12 41757383 41757545 Low_mappability_island 1000 . +12 127650407 127651075 LSU-rRNA_Hsa 1000 . +12 132061320 132062046 Low_mappability_island 1000 . +13 56545728 56545925 Low_mappability_island 1000 . +13 110076444 110076782 Low_mappability_island 1000 . +14 18999935 19056900 centromeric_repeat 1000 . +14 32953263 32954381 Low_mappability_island 1000 . +14 84637832 84639038 Low_mappability_island 1000 . +14 90341302 90341516 SSU-rRNA_Hsa 1000 . +15 19999941 20044132 centromeric_repeat 1000 . +16 32493036 32570826 ALR/Alpha 1000 . +16 32590063 32598801 ALR/Alpha 1000 . +16 33237130 33241330 Low_mappability_island 1000 . +16 33864355 34023306 centromeric_repeat 1000 . +16 34180542 34197081 Satellite_repeat 1000 . +16 34530115 34542632 BSR/Beta 1000 . +16 35193580 35285885 centromeric_repeat 1000 . +16 46385718 46456668 Satellite_repeat 1000 . +16 46497639 46500515 Satellite_repeat 1000 . +16 47538629 47539297 LSU-rRNA_Hsa 1000 . +17 19355538 19356096 LSU-rRNA_Hsa 1000 . +17 19502495 19506773 Low_mappability_island 1000 . +17 21905167 21906712 centromeric_repeat 1000 . +17 22018524 22032049 Low_mappability_island 1000 . +17 22221073 22263006 centromeric_repeat 1000 . +17 25263010 25268059 Satellite_repeat 1000 . +17 25415551 25417559 telomeric_repeat 1000 . +17 31149365 31149981 High_Mappability_island 1000 . +17 33478114 33478372 LSU-rRNA_Hsa 1000 . +17 41381502 41382591 High_Mappability_island 1000 . +17 41463538 41464075 High_Mappability_island 1000 . +17 41464478 41465015 snRNA 1000 . +17 41465562 41467288 High_Mappability_island 1000 . +17 51183038 51183763 Low_mappability_island 1000 . +17 55868618 55868752 LSU-rRNA_Hsa 1000 . +17 75158031 75158430 LSU-rRNA_Hsa 1000 . +18 96416 97552 Satellite_repeat 1000 . +18 105658 112233 Satellite_repeat 1000 . +18 2842252 2842356 Low_mappability_island 1000 . +18 15393801 15393992 centromeric_repeat 1000 . +18 18510894 18520356 centromeric_repeat 1000 . +18 44126235 44126593 (CATTC)n 1000 . +18 45379603 45379864 Low_mappability_island 1000 . +18 50319086 50319301 Low_mappability_island 1000 . +18 77772846 77773065 LSU-rRNA_Hsa 1000 . +19 246006 247844 TAR1 1000 . +19 22877614 22877696 SSU-rRNA_Hsa 1000 . +19 23235030 23235504 BSR/Beta 1000 . +19 24182398 24186210 LSU-rRNA_Hsa 1000 . +19 24385474 24633168 centromeric_repeat 1000 . +19 27730611 28262682 centromeric_repeat 1000 . +19 36066445 36066810 LSU-rRNA_Hsa 1000 . +19 36756398 36800948 centromeric_repeat 1000 . +19 37759473 37797722 centromeric_repeat 1000 . +19 44914313 44916340 ACRO1 1000 . +19 44960681 44962681 ACRO1 1000 . +2 739925 740994 Low_mappability_island 1000 . +2 49456729 49457067 Low_mappability_island 1000 . +2 88124390 88124903 Low_mappability_island 1000 . +2 89830421 89880514 Satellite_repeat 1000 . +2 90371401 90394776 Satellite_repeat 1000 . +2 90443001 90545431 Low_mappability_island 1000 . +2 91595080 91616015 Satellite_repeat 1000 . +2 92267428 92326280 centromeric_repeat 1000 . +2 115695017 115695281 LSU-rRNA_Hsa 1000 . +2 117781085 117781300 Low_mappability_island 1000 . +2 132966248 132989300 centromeric_repeat 1000 . +2 132994855 133007983 ALR/Alpha 1000 . +2 133011824 133013298 SSU-rRNA_Hsa 1000 . +2 133036250 133040042 LSU-rRNA_Hsa 1000 . +2 133044095 133045945 ACRO1 1000 . +2 143848503 143848792 Low_mappability_island 1000 . +2 148022736 148022878 Low_mappability_island 1000 . +2 149639207 149639515 Low_mappability_island 1000 . +2 156120500 156120610 Low_mappability_island 1000 . +2 162135000 162139241 Low_mappability_island 1000 . +2 230045426 230045796 LSU-rRNA_Hsa 1000 . +20 26257032 26320267 centromeric_repeat 1000 . +20 29517710 29521147 centromeric_repeat 1000 . +20 29803876 29833334 centromeric_repeat 1000 . +20 55932703 55936114 chrM 1000 . +20 62916702 62918053 telomeric_repeat 1000 . +21 9647205 9648529 Low_mappability_island 1000 . +21 9694896 9704962 centromeric_repeat 1000 . +21 9825451 9827612 High_Mappability_island 1000 . +21 9827612 9845233 Low_mappability_island 1000 . +21 9881895 9882569 TAR1 1000 . +21 10084922 10088004 Satellite_repeat 1000 . +21 10492876 10493049 Low_mappability_island 1000 . +21 10599428 10599915 TAR1 1000 . +21 10697886 10860890 centromeric_repeat 1000 . +21 11186054 11188131 Satellite_repeat 1000 . +21 14338127 14369791 centromeric_repeat 1000 . +21 18800575 18800997 (GAGTG)n 1000 . +21 27228003 27228242 SSU-rRNA_Hsa 1000 . +21 46796081 46796336 Low_mappability_island 1000 . +22 16847814 16862659 Satellite_repeat 1000 . +22 18876789 18884510 Satellite_repeat 1000 . +3 25508897 25509131 Low_mappability_island 1000 . +3 73159606 73161131 snRNA 1000 . +3 75696297 75699304 BSR/Beta 1000 . +3 75717841 75720426 Satellite_repeat 1000 . +3 80995858 81014459 ALR/Alpha 1000 . +3 90311686 90507410 centromeric_repeat 1000 . +3 93504815 93519133 centromeric_repeat 1000 . +3 96335934 96337436 Low_mappability_island 1000 . +3 160665423 160665642 Low_mappability_island 1000 . +3 196625514 196625860 Satellite_repeat 1000 . +3 197825427 197834080 Low_mappability_island 1000 . +4 9987 12694 telomeric_repeat 1000 . +4 12276463 12292424 ALR/Alpha 1000 . +4 12641862 12642305 Low_mappability_island 1000 . +4 21583630 21583719 (GAATG)n 1000 . +4 27732004 27732240 Low_mappability_island 1000 . +4 47774268 47774416 Low_mappability_island 1000 . +4 49085372 49342114 centromeric_repeat 1000 . +4 49488472 49662085 centromeric_repeat 1000 . +4 52659961 52688986 centromeric_repeat 1000 . +4 56194229 56194584 Low_mappability_island 1000 . +4 65473858 65473941 Low_mappability_island 1000 . +4 68264186 68266830 centromeric_repeat 1000 . +4 70296565 70296841 LSU-rRNA_Hsa 1000 . +4 76807083 76807320 LSU-rRNA_Hsa 1000 . +4 78929660 78929920 Low_mappability_island 1000 . +4 156374749 156377226 chrM 1000 . +4 156384860 156387314 Low_mappability_island 1000 . +4 163342479 163342744 Low_mappability_island 1000 . +4 190190746 190203442 Low_mappability_island 1000 . +4 190801869 190802909 Low_mappability_island 1000 . +4 190943802 190943962 Satellite_repeat 1000 . +4 190987268 190990949 Satellite_repeat 1000 . +4 191026302 191044344 telomeric_repeat 1000 . +5 17517177 17600940 Low_mappability_island 1000 . +5 21477365 21497415 Low_mappability_island 1000 . +5 34177882 34197574 Low_mappability_island 1000 . +5 45908253 46411114 centromeric_repeat 1000 . +5 49405493 49554574 centromeric_repeat 1000 . +5 71146650 71146996 LSU-rRNA_Hsa 1000 . +5 79945807 79948223 Low_mappability_island 1000 . +5 93903068 93906726 Low_mappability_island 1000 . +5 97746525 97746679 Low_mappability_island 1000 . +5 99381556 99390873 Low_mappability_island 1000 . +5 105889063 105889263 chrM 1000 . +5 123095972 123097432 chrM 1000 . +5 134258949 134264271 Low_mappability_island 1000 . +5 174541634 174542177 SSU-rRNA_Hsa 1000 . +6 58735349 58739031 centromeric_repeat 1000 . +6 58745955 58780547 centromeric_repeat 1000 . +6 61880095 61944008 centromeric_repeat 1000 . +6 62189892 62206612 ALR/Alpha 1000 . +6 62207809 62230644 ALR/Alpha 1000 . +6 62283966 62284581 Low_mappability_island 1000 . +6 133593944 133594201 LSU-rRNA_Hsa 1000 . +6 137059142 137059326 SSU-rRNA_Hsa 1000 . +6 150665074 150665281 SSU-rRNA_Hsa 1000 . +6 157731310 157735525 Low_mappability_island 1000 . +7 43878355 43878530 TAR1 1000 . +7 45291517 45291740 Low_mappability_island 1000 . +7 56437808 56442977 Low_mappability_island 1000 . +7 57253980 57254183 Low_mappability_island 1000 . +7 57255310 57255444 Low_mappability_island 1000 . +7 57261829 57261998 Low_mappability_island 1000 . +7 57544726 57556913 Satellite_repeat 1000 . +7 57811488 57836990 centromeric_repeat 1000 . +7 57939184 58055539 centromeric_repeat 1000 . +7 61054285 62454680 centromeric_repeat 1000 . +7 64059157 64066183 BSR/Beta 1000 . +7 64951348 64956223 centromeric_repeat 1000 . +7 68201468 68201673 Low_mappability_island 1000 . +7 68527370 68527788 LSU-rRNA_Hsa 1000 . +7 80962907 80963147 SSU-rRNA_Hsa 1000 . +7 100550640 100551321 Low_mappability_island 1000 . +7 142372972 142375638 Low_mappability_island 1000 . +7 145694403 145694561 Low_mappability_island 1000 . +8 155512 157639 TAR1 1000 . +8 21455971 21456306 LSU-rRNA_Hsa 1000 . +8 32868966 32873279 Low_mappability_island 1000 . +8 43092737 43097573 Satellite_repeat 1000 . +8 43399486 43843604 centromeric_repeat 1000 . +8 46838215 47457541 centromeric_repeat 1000 . +8 47739043 47742797 Low_mappability_island 1000 . +8 47750844 47776101 BSR/Beta 1000 . +8 56754955 56755418 LSU-rRNA_Hsa 1000 . +8 69218401 69218922 LSU-rRNA_Hsa 1000 . +8 70602248 70602620 LSU-rRNA_Hsa 1000 . +8 77114154 77114389 Low_mappability_island 1000 . +8 100508010 100508287 Low_mappability_island 1000 . +9 10435 11574 TAR1 1000 . +9 4799734 4800000 SSU-rRNA_Hsa 1000 . +9 33656606 33659249 Low_mappability_island 1000 . +9 42819021 42832395 centromeric_repeat 1000 . +9 44070617 44070871 Low_mappability_island 1000 . +9 44873123 44902307 centromeric_repeat 1000 . +9 45355954 45357644 telomeric_repeat 1000 . +9 45435109 45443517 centromeric_repeat 1000 . +9 66494170 66494805 TAR1 1000 . +9 66767710 66864329 centromeric_repeat 1000 . +9 66970914 67005594 centromeric_repeat 1000 . +9 67315122 67321036 centromeric_repeat 1000 . +9 67789868 67792893 centromeric_repeat 1000 . +9 68410775 68435115 Low_mappability_island 1000 . +9 69677073 69687998 centromeric_repeat 1000 . +9 69689770 69711497 centromeric_repeat 1000 . +9 69947961 70011196 centromeric_repeat 1000 . +9 70076144 70076855 centromeric_repeat 1000 . +9 70318723 70327683 centromeric_repeat 1000 . +9 72653073 72653572 Satellite_repeat 1000 . +9 78790077 78790255 (GAATG)n 1000 . +9 79186574 79187026 LSU-rRNA_Hsa 1000 . +9 141019938 141021783 TAR1 1000 . +MT 1 16569 chrM 1000 . +X 55206111 55206740 Low_mappability_island 1000 . +X 55207753 55208152 Low_mappability_island 1000 . +X 55208300 55208643 Low_mappability_island 1000 . +X 55208980 55209208 Low_mappability_island 1000 . +X 55209655 55210006 Low_mappability_island 1000 . +X 58330488 58330843 centromeric_repeat 1000 . +X 58373806 58373962 centromeric_repeat 1000 . +X 58377680 58377864 centromeric_repeat 1000 . +X 58415350 58416387 centromeric_repeat 1000 . +X 58432411 58432680 centromeric_repeat 1000 . +X 58485887 58486241 centromeric_repeat 1000 . +X 58488898 58494528 centromeric_repeat 1000 . +X 58499466 58504235 centromeric_repeat 1000 . +X 58506076 58528214 centromeric_repeat 1000 . +X 58528184 58536883 centromeric_repeat 1000 . +X 58544061 58582415 centromeric_repeat 1000 . +X 61681834 61919683 centromeric_repeat 1000 . +X 62003205 62041580 centromeric_repeat 1000 . +X 83658929 83659019 Low_mappability_island 1000 . +X 108297348 108297886 LSU-rRNA_Hsa 1000 . +X 114959057 115006437 Low_mappability_island 1000 . +X 125605623 125607351 Low_mappability_island 1000 . +X 125714985 125715338 Low_mappability_island 1000 . +X 125864844 125864980 Low_mappability_island 1000 . +X 125865719 125865874 Low_mappability_island 1000 . +Y 313470 313613 ALR/Alpha 1000 . +Y 3004989 3005175 LSU-rRNA_Hsa 1000 . +Y 4212807 4212910 Low_mappability_island 1000 . +Y 7671817 7694928 BSR/Beta 1000 . +Y 7726064 7730229 BSR/Beta 1000 . +Y 7730734 7731598 BSR/Beta 1000 . +Y 7735811 7752887 BSR/Beta 1000 . +Y 7785067 7806311 BSR/Beta 1000 . +Y 7806856 7814704 BSR/Beta 1000 . +Y 7815230 7820478 BSR/Beta 1000 . +Y 7829937 7832032 BSR/Beta 1000 . +Y 7832744 7848695 BSR/Beta 1000 . +Y 7870343 7873582 BSR/Beta 1000 . +Y 7874115 7874584 BSR/Beta 1000 . +Y 7875409 7885257 BSR/Beta 1000 . +Y 7886545 7894591 BSR/Beta 1000 . +Y 7898927 7916812 BSR/Beta 1000 . +Y 7918790 7921352 BSR/Beta 1000 . +Y 7926344 7936705 BSR/Beta 1000 . +Y 7941130 7947438 BSR/Beta 1000 . +Y 7948790 7964448 BSR/Beta 1000 . +Y 8179010 8181143 BSR/Beta 1000 . +Y 8181757 8213330 BSR/Beta 1000 . +Y 8214629 8215637 BSR/Beta 1000 . +Y 8220421 8230061 BSR/Beta 1000 . +Y 8230686 8231546 BSR/Beta 1000 . +Y 8240772 8265916 BSR/Beta 1000 . +Y 8291535 8292942 BSR/Beta 1000 . +Y 8294002 8295175 BSR/Beta 1000 . +Y 8296944 8321375 BSR/Beta 1000 . +Y 8325813 8325929 BSR/Beta 1000 . +Y 8326678 8333466 BSR/Beta 1000 . +Y 8334027 8342387 BSR/Beta 1000 . +Y 8356544 8369346 BSR/Beta 1000 . +Y 8909560 8909925 TAR1 1000 . +Y 8979478 8979585 Low_mappability_island 1000 . +Y 9072781 9072993 TAR1 1000 . +Y 9908430 9925608 centromeric_repeat 1000 . +Y 9981952 9982126 BSR/Beta 1000 . +Y 10034864 10036712 SSU-rRNA_Hsa 1000 . +Y 10040627 10045657 ALR/Alpha 1000 . +Y 10047773 10052533 ALR/Alpha 1000 . +Y 10053695 10057722 ALR/Alpha 1000 . +Y 10059394 10073694 ALR/Alpha 1000 . +Y 10075082 10075781 ALR/Alpha 1000 . +Y 10080736 10104539 ALR/Alpha 1000 . +Y 13104530 13144368 centromeric_repeat 1000 . +Y 13193966 13196535 Low_mappability_island 1000 . +Y 13252193 13259484 centromeric_repeat 1000 . +Y 13290177 13290667 chrM 1000 . +Y 13445957 13490591 Satellite_repeat 1000 . +Y 13642186 13749784 Satellite_repeat 1000 . +Y 13798522 13870984 Satellite_repeat 1000 . +Y 19691913 19692524 LSU-rRNA_Hsa 1000 . +Y 19764063 19776198 ALR/Alpha 1000 . +Y 19780600 19781704 ALR/Alpha 1000 . +Y 19783669 19796396 ALR/Alpha 1000 . +Y 19800068 19801419 ALR/Alpha 1000 . +Y 19808085 19817100 ALR/Alpha 1000 . +Y 19944298 19944581 TAR1 1000 . +Y 20235195 20235478 TAR1 1000 . +Y 20362679 20371694 ALR/Alpha 1000 . +Y 20378360 20379711 ALR/Alpha 1000 . +Y 20383383 20396110 ALR/Alpha 1000 . +Y 20398075 20399179 ALR/Alpha 1000 . +Y 20403581 20415713 ALR/Alpha 1000 . +Y 20487248 20487859 LSU-rRNA_Hsa 1000 . +Y 23124788 23125577 BSR/Beta 1000 . +Y 23149027 23151205 BSR/Beta 1000 . +Y 23157969 23158245 BSR/Beta 1000 . +Y 23159001 23167737 BSR/Beta 1000 . +Y 23178886 23181770 BSR/Beta 1000 . +Y 23220740 23223625 BSR/Beta 1000 . +Y 23234125 23235822 BSR/Beta 1000 . +Y 23236898 23248080 BSR/Beta 1000 . +Y 23248729 23248851 BSR/Beta 1000 . +Y 23899295 23899388 TAR1 1000 . +Y 23956449 23956628 TAR1 1000 . +Y 24247659 24247700 TAR1 1000 . +Y 24630999 24631040 TAR1 1000 . +Y 24953159 24975657 BSR/Beta 1000 . +Y 24980997 24991235 BSR/Beta 1000 . +Y 25022753 25039185 BSR/Beta 1000 . +Y 25040153 25042421 BSR/Beta 1000 . +Y 25048332 25059258 BSR/Beta 1000 . +Y 25060235 25064798 BSR/Beta 1000 . +Y 25099139 25121882 BSR/Beta 1000 . +Y 25122419 25160800 BSR/Beta 1000 . +Y 25182404 25192372 BSR/Beta 1000 . +Y 25217722 25219409 BSR/Beta 1000 . +Y 25493588 25495275 BSR/Beta 1000 . +Y 26148315 26148450 TAR1 1000 . +Y 26586905 26609405 BSR/Beta 1000 . +Y 26614745 26624983 BSR/Beta 1000 . +Y 26656502 26672934 BSR/Beta 1000 . +Y 26673902 26676170 BSR/Beta 1000 . +Y 26682081 26693007 BSR/Beta 1000 . +Y 26693984 26698547 BSR/Beta 1000 . +Y 26732883 26755623 BSR/Beta 1000 . +Y 26756160 26794538 BSR/Beta 1000 . +Y 26816148 26826116 BSR/Beta 1000 . +Y 26851466 26853153 BSR/Beta 1000 . +Y 27109247 27110934 BSR/Beta 1000 . +Y 27136281 27146249 BSR/Beta 1000 . +Y 27167859 27206241 BSR/Beta 1000 . +Y 27206778 27229502 BSR/Beta 1000 . +Y 27263848 27268411 BSR/Beta 1000 . +Y 27269388 27280315 BSR/Beta 1000 . +Y 27286226 27288494 BSR/Beta 1000 . +Y 27289462 27305895 BSR/Beta 1000 . +Y 27337415 27347656 BSR/Beta 1000 . +Y 27352996 27375497 BSR/Beta 1000 . +Y 27813984 27814119 TAR1 1000 . +Y 28555026 28555353 TAR1 1000 . +Y 28784129 28819695 Satellite_repeat 1000 . +Y 58819367 58917648 (CATTC)n 1000 . +Y 58971913 58997782 (CATTC)n 1000 . +Y 59361267 59362785 TAR1 1000 . From c03c4ade9ea543c6bc08a747d2647b0069c7568d Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 25 May 2021 10:49:49 +0100 Subject: [PATCH 275/675] white spaces --- bin/deseq2_diff.r | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bin/deseq2_diff.r b/bin/deseq2_diff.r index eae65f52..dd8c5307 100755 --- a/bin/deseq2_diff.r +++ b/bin/deseq2_diff.r @@ -235,13 +235,13 @@ if (file.exists(PlotFile) == FALSE) { colnames(pca.vals) <- paste(colnames(pca.vals),paste(percentVar,'% variance',sep=""), sep=": ") pca.vals <- cbind(sample = rownames(pca.vals), pca.vals) write.table(pca.vals,file=paste(opt$outprefix,".pca.vals.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) - + ## SAMPLE CORRELATION HEATMAP sampleDists <- dist(t(assay(rld))) sampleDistMatrix <- as.matrix(sampleDists) colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) - + ## WRITE SAMPLE DISTANCES TO FILE write.table(cbind(sample = rownames(sampleDistMatrix), sampleDistMatrix),file=paste(opt$outprefix,".sample.dists.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=FALSE) @@ -262,7 +262,7 @@ if (file.exists(PlotFile) == FALSE) { ##' stored. Copied from DESeq2::plotPCA, but with additional ability to ##' say which assay to run the PCA on, and adds an assessment of how well ##' each PC explains the experimental grouping of the data. -##' +##' ##' @param object The DESeq2DataSet object. ##' @param intgroup interesting groups: a character vector of names in 'colData(x)' to use for grouping. ##' @param ntop number of top genes to use for principla components, selected by highest row variance. @@ -298,7 +298,7 @@ plotPCA_vst <- function (object, intgroup = "condition", ntop = 500, assay=lengt PlotFile <- paste(opt$outprefix,".plots.pdf",sep="") if (file.exists(PlotFile) == FALSE) { pdf(file=PlotFile,onefile=TRUE,width=7,height=7) - + ## PCA ntop <- c(500, Inf) for (n_top_var in ntop) { @@ -309,14 +309,14 @@ if (file.exists(PlotFile) == FALSE) { geom_point(size=3) + xlab(paste0("PC1: ",percentVar[1],"% variance")) + ylab(paste0("PC2: ",percentVar[2],"% variance")) + - labs(title = paste0("First PCs on ", vst_name, "-transformed data"), subtitle = plot_subtitle) + + labs(title = paste0("First PCs on ", vst_name, "-transformed data"), subtitle = plot_subtitle) + theme(legend.position="top", panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), panel.border = element_rect(colour = "black", fill=NA, size=1)) print(pl) - + pl <- ggplot(attr(pca.data, "percentVar"), aes(x=PC, y=percentVar)) + geom_line(aes(colour="explained by PC")) + geom_line(aes(y=groupR, colour="of PC explained by condition")) + @@ -331,7 +331,7 @@ if (file.exists(PlotFile) == FALSE) { geom_point(size=3) + xlab(paste0("PC", pc_r[1], ": ",percentVar[pc_r[1]],"% variance")) + ylab(paste0("PC", pc_r[2], ": ",percentVar[pc_r[2]],"% variance")) + - labs(title = paste0("Group-Explanatory PCs of ", vst_name, "-tranformed data"), subtitle = plot_subtitle) + + labs(title = paste0("Group-Explanatory PCs of ", vst_name, "-tranformed data"), subtitle = plot_subtitle) + theme(legend.position="top", panel.grid.major = element_blank(), panel.grid.minor = element_blank(), @@ -348,7 +348,7 @@ if (file.exists(PlotFile) == FALSE) { colnames(pca.vals) <- paste0(colnames(pca.vals), ": ", percentVar[1:2], '% variance') pca.vals <- cbind(sample = rownames(pca.vals), pca.vals) write.table(pca.vals,file=paste(opt$outprefix,".pca.vals.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) - + ## SAMPLE CORRELATION HEATMAP sampleDists <- dist(t(assay(dds, vst_name))) sampleDistMatrix <- as.matrix(sampleDists) @@ -388,7 +388,7 @@ if (FALSE) { treat.group <- comparisons[2,idx] CompPrefix <- paste(control.group,treat.group,sep="vs") cat("Saving results for ",CompPrefix," ...\n",sep="") - + CompOutDir <- paste(CompPrefix,'/',sep="") if (file.exists(CompOutDir) == FALSE) { dir.create(CompOutDir,recursive=TRUE) @@ -416,7 +416,7 @@ if (FALSE) { #pass.fdr.table <- subset(comp.table, padj < MIN_FDR) #pass.fdr.up.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange > 0) #pass.fdr.down.table <- subset(comp.table, padj < MIN_FDR & log2FoldChange < 0) - + ## SUBSET RESULTS BY FDR AND LOGFC #pass.fdr.logFC.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1) #pass.fdr.logFC.up.table <- subset(comp.table, padj < MIN_FDR & abs(log2FoldChange) >= 1 & log2FoldChange > 0) @@ -427,7 +427,7 @@ if (FALSE) { #CompBEDFile <- paste(CompOutDir,CompPrefix,opt$outsuffix,".deseq2.FDR",MIN_FDR,".results.bed",sep="") #write.table(pass.fdr.table, file=CompResultsFile, col.names=TRUE, row.names=FALSE, sep='\t', quote=FALSE) #write.table(pass.fdr.table[,c("Chr","Start","End","Geneid","log2FoldChange","Strand")], file=CompBEDFile, col.names=FALSE, row.names=FALSE, sep='\t', quote=FALSE) - + ## MA PLOT & VOLCANO PLOT DESeq2::plotMA(comp.results, main=paste("MA plot FDR <= ",MIN_FDR,sep=""), ylim=c(-2,2),alpha=MIN_FDR) #plot(comp.table$log2FoldChange, -1*log10(comp.table$padj), col=ifelse(comp.table$padj<=MIN_FDR, "red", "black"), xlab="logFC", ylab="-1*log10(FDR)", main=paste("Volcano plot FDR <=",MIN_FDR,sep=" "), pch=20) @@ -446,7 +446,7 @@ if (FALSE) { sampleDistMatrix <- as.matrix(sampleDists) colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) pheatmap(sampleDistMatrix,clustering_distance_rows=sampleDists,clustering_distance_cols=sampleDists,col=colors) - + ## SCATTER PLOT FOR RLOG COUNTS combs <- combn(comp.samples,2,simplify=FALSE) clabels <- sapply(combs,function(x){paste(x,collapse=' & ')}) @@ -485,7 +485,7 @@ NormFactorsFile <- paste(SizeFactorsDir,opt$outprefix,".size_factors.RData",sep= if (file.exists(NormFactorsFile) == FALSE) { normFactors <- sizeFactors(dds) save(normFactors,file=NormFactorsFile) - + for (name in names(sizeFactors(dds))) { sizeFactorFile <- paste(SizeFactorsDir,name,".txt",sep="") if (file.exists(sizeFactorFile) == FALSE) { @@ -511,4 +511,4 @@ if (file.exists(RLogFile) == FALSE) { ################################################ ################################################ ################################################ -################################################ \ No newline at end of file +################################################ From 753a101ac066425f05603cc0248f15e989acf704 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 25 May 2021 10:53:47 +0100 Subject: [PATCH 276/675] cleanup --- bin/deseq2_diff.r | 18 +++++++++--------- bin/lib/reports.py | 23 +++++++++++------------ 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/bin/deseq2_diff.r b/bin/deseq2_diff.r index dd8c5307..7dc0e574 100755 --- a/bin/deseq2_diff.r +++ b/bin/deseq2_diff.r @@ -333,10 +333,10 @@ if (file.exists(PlotFile) == FALSE) { ylab(paste0("PC", pc_r[2], ": ",percentVar[pc_r[2]],"% variance")) + labs(title = paste0("Group-Explanatory PCs of ", vst_name, "-tranformed data"), subtitle = plot_subtitle) + theme(legend.position="top", - panel.grid.major = element_blank(), - panel.grid.minor = element_blank(), - panel.background = element_blank(), - panel.border = element_rect(colour = "black", fill=NA, size=1)) + panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + panel.background = element_blank(), + panel.border = element_rect(colour = "black", fill=NA, size=1)) print(pl) } # at end of loop, we'll be using the user-defined ntop if any, else all peaks @@ -452,11 +452,11 @@ if (FALSE) { clabels <- sapply(combs,function(x){paste(x,collapse=' & ')}) plotdat <- data.frame(x=unlist(lapply(combs, function(x){rld.subset[, x[1] ]})),y=unlist(lapply(combs, function(y){rld.subset[, y[2] ]})),comp=rep(clabels, each=nrow(rld.subset))) plot <- xyplot(y~x|comp,plotdat, - panel=function(...){ - panel.xyplot(...) - panel.abline(0,1,col="red") - }, - par.strip.text=list(cex=0.5)) + panel=function(...){ + panel.xyplot(...) + panel.abline(0,1,col="red") + }, + par.strip.text=list(cex=0.5)) print(plot) dev.off() diff --git a/bin/lib/reports.py b/bin/lib/reports.py index d96d6fe4..702f4dc8 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -187,7 +187,7 @@ def pe_bam_to_df(bam_path): start_pos = min(read1.reference_start, read2.reference_start) end_pos = max(read1.reference_end, read2.reference_end) - 1 chrom = read.reference_name - + start_arr[k] = start_pos end_arr[k] = end_pos chrom_arr[k] = chrom @@ -206,7 +206,6 @@ def pe_bam_to_df(bam_path): bam_df = pd.DataFrame({ "Chromosome" : chrom_arr, "Start" : start_arr, "End" : end_arr }) return(bam_df) - for bam in bam_list: bam_now = pe_bam_to_df(bam) self.bam_df_list.append(bam_now) @@ -218,7 +217,7 @@ def pe_bam_to_df(bam_path): self.frip.at[k, 'mapped_frags'] = bam_now.shape[0] k=k+1 - # ---------- Data - New frag_hist --------- # + # ---------- Data - New frag_hist --------- # for i in list(range(len(self.bam_df_list))): df_i = self.bam_df_list[i] widths_i = (df_i['End'] - df_i['Start']).abs() @@ -290,7 +289,7 @@ def array_permutate(x): pyr_overlap = pyr_query.join(pyr_subject) pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) pyr_query = pyr_overlap - + else: pyr_query = pyr_subject @@ -312,7 +311,7 @@ def array_permutate(x): pyr_seacr = pr.PyRanges(chromosomes=seacr_bed_i['chrom'], starts=seacr_bed_i['start'], ends=seacr_bed_i['end']) pyr_bam = pr.PyRanges(df=bam_i) sample_id = group_i + "_" + rep_i - frag_count_pyr = pyr_bam.count_overlaps(pyr_seacr) + frag_count_pyr = pyr_bam.count_overlaps(pyr_seacr) frag_counts = np.count_nonzero(frag_count_pyr.NumberOverlaps) self.frip.at[i,'frags_in_peaks'] = frag_counts @@ -370,8 +369,8 @@ def generate_plots(self): plot6, data6 = self.scale_factor_summary() plots["scale_factor_summary"] = plot6 data["scale_factor_summary"] = data6 - - # Plot 7a + + # Plot 7a plot7a, data7a = self.no_of_peaks() plots["no_of_peaks"] = plot7a data["no_of_peaks"] = data7a @@ -381,7 +380,7 @@ def generate_plots(self): plots["peak_widths"] = plot7b data["peak_widths"] = data7b - # Plot 7c + # Plot 7c if self.replicate_number > 1: plot7c, data7c = self.reproduced_peaks() plots["reproduced_peaks"] = plot7c @@ -433,7 +432,7 @@ def gen_pdf(self, output_path, plots): def alignment_summary(self): sns.color_palette("magma", as_cmap=True) sns.set(font_scale=0.6) - # Subset data + # Subset data df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] ## Construct quad plot @@ -470,7 +469,7 @@ def duplication_summary(self): k_formatter = FuncFormatter(self.format_thousands) m_formatter = FuncFormatter(self.format_millions) - # Subset data + # Subset data df_data = self.data_table.loc[:, ('id', 'group', 'dedup_percent_duplication', 'dedup_estimated_library_size', 'dedup_read_pairs_examined')] df_data['dedup_percent_duplication'] *= 100 df_data['unique_frag_num'] = df_data['dedup_read_pairs_examined'] * (1-df_data['dedup_percent_duplication']/100) @@ -491,7 +490,7 @@ def duplication_summary(self): seq_summary[1].yaxis.set_major_formatter(m_formatter) seq_summary[1].xaxis.set_tick_params(labelrotation=45) - # No. of unique fragments + # No. of unique fragments sns.boxplot(data=df_data, x='group', y='unique_frag_num', ax=seq_summary[2], palette = "magma") seq_summary[2].set_ylabel("No. of Unique Fragments") seq_summary[2].yaxis.set_major_formatter(k_formatter) @@ -499,7 +498,7 @@ def duplication_summary(self): # Set the plot sizing plt.subplots_adjust(top = 0.9, bottom = 0.2, right = 0.9, left = 0.1, hspace = 0.7, wspace = 0.7) - + return fig, df_data From e3faa9a79d611cb70254c1378bd7a23b591ff3d0 Mon Sep 17 00:00:00 2001 From: Charlotte West Date: Tue, 25 May 2021 10:56:19 +0100 Subject: [PATCH 277/675] indent fixes --- bin/markdown_to_html.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bin/markdown_to_html.py b/bin/markdown_to_html.py index a26d1ff5..1187b272 100755 --- a/bin/markdown_to_html.py +++ b/bin/markdown_to_html.py @@ -27,33 +27,33 @@ def wrap_html(contents): - - -
    - """ - footer = """ -
    - - - """ - return header + contents + footer - - -def parse_args(args=None): - parser = argparse.ArgumentParser() - parser.add_argument("mdfile", type=argparse.FileType("r"), nargs="?", help="File to convert. Defaults to stdin.") - parser.add_argument( - "-o", "--out", type=argparse.FileType("w"), default=sys.stdout, help="Output file name. Defaults to stdout." - ) - return parser.parse_args(args) - - -def main(args=None): - args = parse_args(args) - converted_md = convert_markdown(args.mdfile.name) - html = wrap_html(converted_md) - args.out.write(html) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 521eccfe..4978b249 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -1,36 +1,18 @@ #!/usr/bin/env python from __future__ import print_function -from collections import OrderedDict -import re +import os -# TODO nf-core: Add additional regexes for new tools in process get_software_versions -regexes = { - "nf-core/cutandrun": ["v_pipeline.txt", r"(\S+)"], - "Nextflow": ["v_nextflow.txt", r"(\S+)"], - "FastQC": ["v_fastqc.txt", r"FastQC v(\S+)"], - "MultiQC": ["v_multiqc.txt", r"multiqc, version (\S+)"], -} -results = OrderedDict() -results["nf-core/cutandrun"] = 'N/A' -results["Nextflow"] = 'N/A' -results["FastQC"] = 'N/A' -results["MultiQC"] = 'N/A' +results = {} +version_files = [x for x in os.listdir(".") if x.endswith(".version.txt")] +for version_file in version_files: -# Search each file using its regex -for k, v in regexes.items(): - try: - with open(v[0]) as x: - versions = x.read() - match = re.search(v[1], versions) - if match: - results[k] = "v{}".format(match.group(1)) - except IOError: - results[k] = False + software = version_file.replace(".version.txt", "") + if software == "pipeline": + software = "nf-core/cutandrun" -# Remove software set to false in results -for k in list(results): - if not results[k]: - del results[k] + with open(version_file) as fin: + version = fin.read().strip() + results[software] = version # Dump to YAML print( @@ -44,11 +26,11 @@
    """ ) -for k, v in results.items(): +for k, v in sorted(results.items()): print("
    {}
    {}
    ".format(k, v)) print("
    ") # Write out regexes as csv file: -with open("software_versions.csv", "w") as f: - for k, v in results.items(): +with open("software_versions.tsv", "w") as f: + for k, v in sorted(results.items()): f.write("{}\t{}\n".format(k, v)) diff --git a/conf/base.config b/conf/base.config index 348ea8fd..fd108bf1 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,51 +1,57 @@ /* - * ------------------------------------------------- - * nf-core/cutandrun Nextflow base config file - * ------------------------------------------------- - * A 'blank slate' config file, appropriate for general - * use on most high performace compute environments. - * Assumes that all software is installed and available - * on the PATH. Runs in `local` mode - all jobs will be - * run on the logged in environment. - */ +======================================================================================== + nf-core/cutandrun Nextflow base config file +======================================================================================== + A 'blank slate' config file, appropriate for general use on most high performance + compute environments. Assumes that all software is installed and available on + the PATH. Runs in `local` mode - all jobs will be run on the logged in environment. +---------------------------------------------------------------------------------------- +*/ process { - // TODO nf-core: Check the defaults for all processes - cpus = { check_max( 1 * task.attempt, 'cpus' ) } - memory = { check_max( 7.GB * task.attempt, 'memory' ) } - time = { check_max( 4.h * task.attempt, 'time' ) } + // TODO nf-core: Check the defaults for all processes + cpus = { check_max( 1 * task.attempt, 'cpus' ) } + memory = { check_max( 6.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } - errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } - maxRetries = 1 - maxErrors = '-1' - - // Process-specific resource requirements - // NOTE - Only one of the labels below are used in the fastqc process in the main script. - // If possible, it would be nice to keep the same label naming convention when - // adding in your processes. - // TODO nf-core: Customise requirements for specific processes. - // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors - withLabel:process_low { - cpus = { check_max( 2 * task.attempt, 'cpus' ) } - memory = { check_max( 14.GB * task.attempt, 'memory' ) } - time = { check_max( 6.h * task.attempt, 'time' ) } - } - withLabel:process_medium { - cpus = { check_max( 6 * task.attempt, 'cpus' ) } - memory = { check_max( 42.GB * task.attempt, 'memory' ) } - time = { check_max( 8.h * task.attempt, 'time' ) } - } - withLabel:process_high { - cpus = { check_max( 12 * task.attempt, 'cpus' ) } - memory = { check_max( 84.GB * task.attempt, 'memory' ) } - time = { check_max( 10.h * task.attempt, 'time' ) } - } - withLabel:process_long { - time = { check_max( 20.h * task.attempt, 'time' ) } - } - withName:get_software_versions { - cache = false - } + errorStrategy = { task.exitStatus in [143,137,104,134,139] ? 'retry' : 'finish' } + maxRetries = 1 + maxErrors = '-1' + // Process-specific resource requirements + // NOTE - Please try and re-use the labels below as much as possible. + // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules. + // If possible, it would be nice to keep the same label naming convention when + // adding in your local modules too. + // TODO nf-core: Customise requirements for specific processes. + // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors + withLabel:process_low { + cpus = { check_max( 2 * task.attempt, 'cpus' ) } + memory = { check_max( 12.GB * task.attempt, 'memory' ) } + time = { check_max( 4.h * task.attempt, 'time' ) } + } + withLabel:process_medium { + cpus = { check_max( 6 * task.attempt, 'cpus' ) } + memory = { check_max( 36.GB * task.attempt, 'memory' ) } + time = { check_max( 8.h * task.attempt, 'time' ) } + } + withLabel:process_high { + cpus = { check_max( 12 * task.attempt, 'cpus' ) } + memory = { check_max( 72.GB * task.attempt, 'memory' ) } + time = { check_max( 16.h * task.attempt, 'time' ) } + } + withLabel:process_long { + time = { check_max( 20.h * task.attempt, 'time' ) } + } + withLabel:process_high_memory { + memory = { check_max( 200.GB * task.attempt, 'memory' ) } + } + withLabel:error_ignore { + errorStrategy = 'ignore' + } + withLabel:error_retry { + errorStrategy = 'retry' + maxRetries = 2 + } } diff --git a/conf/igenomes.config b/conf/igenomes.config index 31b7ee61..855948de 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -1,421 +1,432 @@ /* - * ------------------------------------------------- - * Nextflow config file for iGenomes paths - * ------------------------------------------------- - * Defines reference genomes, using iGenome paths - * Can be used by any config that customises the base - * path using $params.igenomes_base / --igenomes_base - */ +======================================================================================== + Nextflow config file for iGenomes paths +======================================================================================== + Defines reference genomes using iGenome paths. + Can be used by any config that customises the base path using: + $params.igenomes_base / --igenomes_base +---------------------------------------------------------------------------------------- +*/ params { - // illumina iGenomes reference file paths - genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + // illumina iGenomes reference file paths + genomes { + 'GRCh37' { + fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + } + 'GRCh38' { + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'GRCm38' { + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + } + 'TAIR10' { + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" + } + 'EB2' { + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" + } + 'UMD3.1' { + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" + } + 'WBcel235' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" + } + 'CanFam3.1' { + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" + } + 'GRCz10' { + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'BDGP6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" + } + 'EquCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" + } + 'EB1' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + } + 'Galgal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'Gm01' { + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" + } + 'Mmul_1' { + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" + } + 'IRGSP-1.0' { + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'CHIMP2.1.4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" + } + 'Rnor_5.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'Rnor_6.0' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" + } + 'R64-1-1' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" + } + 'EF2' { + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" + } + 'Sbi1' { + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" + } + 'Sscrofa10.2' { + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" + } + 'AGPv3' { + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" + } + 'hg38' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + } + 'hg19' { + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" + } + 'mm10' { + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" + } + 'bosTau8' { + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'ce10' { + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" + } + 'canFam3' { + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" + } + 'danRer10' { + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.37e9" + } + 'dm6' { + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" + } + 'equCab2' { + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" + } + 'galGal4' { + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" + } + 'panTro4' { + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" + } + 'rn6' { + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" + } + 'sacCer3' { + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" + } + 'susScr3' { + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" + } } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" - } - 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" - } - 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" - } - 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" - } - 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" - } - 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" - } - 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" - } - 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" - } - 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" - } - 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" - } - 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" - } - 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" - } - 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" - } - 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" - } - 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" - } - 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" - } - 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" - } - 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" - } - 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" - } - 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.37e9" - } - 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" - } - 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" - } - 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" - } - 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" - } - 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" - } - 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" - } - } } diff --git a/conf/modules.config b/conf/modules.config new file mode 100644 index 00000000..0b1bfdec --- /dev/null +++ b/conf/modules.config @@ -0,0 +1,32 @@ +/* +======================================================================================== + Config file for defining DSL2 per module options +======================================================================================== + Available keys to override module options: + args = Additional arguments appended to command in module. + args2 = Second set of arguments appended to command in module (multi-tool modules). + args3 = Third set of arguments appended to command in module (multi-tool modules). + publish_dir = Directory to publish results. + publish_by_meta = Groovy list of keys available in meta map to append as directories to "publish_dir" path + If publish_by_meta = true - Value of ${meta['id']} is appended as a directory to "publish_dir" path + If publish_by_meta = ['id', 'custompath'] - If "id" is in meta map and "custompath" isn't then "${meta['id']}/custompath/" + is appended as a directory to "publish_dir" path + If publish_by_meta = false / null - No directories are appended to "publish_dir" path + publish_files = Groovy map where key = "file_ext" and value = "directory" to publish results for that file extension + The value of "directory" is appended to the standard "publish_dir" path as defined above. + If publish_files = null (unspecified) - All files are published. + If publish_files = false - No files are published. + suffix = File name suffix for output files. +---------------------------------------------------------------------------------------- +*/ + +params { + modules { + 'fastqc' { + args = "--quiet" + } + 'multiqc' { + args = "" + } + } +} diff --git a/conf/test.config b/conf/test.config index 2bf25194..cd73b7be 100644 --- a/conf/test.config +++ b/conf/test.config @@ -1,28 +1,29 @@ /* - * ------------------------------------------------- - * Nextflow config file for running tests - * ------------------------------------------------- - * Defines bundled input files and everything required - * to run a fast and simple test. Use as follows: - * nextflow run nf-core/cutandrun -profile test, - */ +======================================================================================== + Nextflow config file for running minimal tests +======================================================================================== + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/cutandrun -profile test, + +---------------------------------------------------------------------------------------- +*/ params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' - // Limit resources so that this can run on GitHub Actions - max_cpus = 2 - max_memory = 6.GB - max_time = 48.h + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Limit resources so that this can run on GitHub Actions + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h + + // Input data + // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets + // TODO nf-core: Give any required params for the test so that command line flags are not needed + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - single_end = false - input_paths = [ - ['Testdata', ['https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R1.tiny.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R2.tiny.fastq.gz']], - ['SRR389222', ['https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz']] - ] - // Ignore `--input` as otherwise the parameter validation will throw an error - schema_ignore_params = 'genomes,input_paths,input' + // Genome references + genome = 'R64-1-1' } diff --git a/conf/test_full.config b/conf/test_full.config index 80d91f61..61e330fe 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -1,24 +1,24 @@ /* - * ------------------------------------------------- - * Nextflow config file for running full-size tests - * ------------------------------------------------- - * Defines bundled input files and everything required - * to run a full size pipeline test. Use as follows: - * nextflow run nf-core/cutandrun -profile test_full, - */ +======================================================================================== + Nextflow config file for running full-size tests +======================================================================================== + Defines input files and everything required to run a full size pipeline test. + + Use as follows: + nextflow run nf-core/cutandrun -profile test_full, + +---------------------------------------------------------------------------------------- +*/ params { - config_profile_name = 'Full test profile' - config_profile_description = 'Full test dataset to check pipeline function' + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function' + + // Input data for full size test + // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) + // TODO nf-core: Give any required params for the test so that command line flags are not needed + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' - // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed - single_end = false - input_paths = [ - ['Testdata', ['https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R1.tiny.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/exoseq/testdata/Testdata_R2.tiny.fastq.gz']], - ['SRR389222', ['https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub1.fastq.gz', 'https://github.com/nf-core/test-datasets/raw/methylseq/testdata/SRR389222_sub2.fastq.gz']] - ] - // Ignore `--input` as otherwise the parameter validation will throw an error - schema_ignore_params = 'genomes,input_paths,input' + // Genome references + genome = 'R64-1-1' } diff --git a/docs/README.md b/docs/README.md index a0c1cc8a..b2b2a244 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,8 +3,8 @@ The nf-core/cutandrun documentation is split into the following pages: * [Usage](usage.md) - * An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. + * An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. * [Output](output.md) - * An overview of the different results produced by the pipeline and how to interpret them. + * An overview of the different results produced by the pipeline and how to interpret them. You can find a lot more documentation about installing, configuring and running nf-core pipelines on the website: [https://nf-co.re](https://nf-co.re) diff --git a/docs/images/mqc_fastqc_adapter.png b/docs/images/mqc_fastqc_adapter.png new file mode 100755 index 0000000000000000000000000000000000000000..361d0e47acfb424dea1f326590d1eb2f6dfa26b5 GIT binary patch literal 23458 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 literal 0 HcmV?d00001 diff --git a/docs/images/mqc_fastqc_quality.png b/docs/images/mqc_fastqc_quality.png new file mode 100755 index 0000000000000000000000000000000000000000..a4b89bf56ab2ba88cab87841916eb680a816deae GIT binary patch literal 55769 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�)v~C(0C)c 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 M)78&qol`;+0Fu7JivR!s literal 0 HcmV?d00001 diff --git a/docs/output.md b/docs/output.md index 9d72bde8..be86961a 100644 --- a/docs/output.md +++ b/docs/output.md @@ -10,50 +10,59 @@ The directories listed below will be created in the results directory after the ## Pipeline overview -The pipeline is built using [Nextflow](https://www.nextflow.io/) -and processes data using the following steps: +The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -* [FastQC](#fastqc) - Read quality control -* [MultiQC](#multiqc) - Aggregate report describing results from the whole pipeline +* [FastQC](#fastqc) - Raw read QC +* [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution -## FastQC +### FastQC -[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. +
    +Output files -For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). +* `fastqc/` + * `*_fastqc.html`: FastQC report containing quality metrics. + * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. -**Output files:** +
    -* `fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics for your untrimmed raw fastq files. -* `fastqc/zips/` - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. +[FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) gives general quality metrics about your sequenced reads. It provides information about the quality score distribution across your reads, per base sequence content (%A/T/G/C), adapter contamination and overrepresented sequences. For further reading and documentation see the [FastQC help pages](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/). -> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. +![MultiQC - FastQC sequence counts plot](images/mqc_fastqc_counts.png) -## MultiQC +![MultiQC - FastQC mean quality scores plot](images/mqc_fastqc_quality.png) -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarizing all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. +![MultiQC - FastQC adapter content plot](images/mqc_fastqc_adapter.png) -The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. +> **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -For more information about how to use MultiQC reports, see [https://multiqc.info](https://multiqc.info). +### MultiQC -**Output files:** +
    +Output files * `multiqc/` - * `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - * `multiqc_plots/`: directory containing static images from the report in various formats. + * `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + * `multiqc_plots/`: directory containing static images from the report in various formats. -## Pipeline information +
    -[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -**Output files:** +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . + +### Pipeline information + +
    +Output files * `pipeline_info/` - * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Documentation for interpretation of results in HTML format: `results_description.html`. + * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.tsv`. + * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. + +
    + +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/docs/usage.md b/docs/usage.md index 7420f279..9e243bdb 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -8,19 +8,63 @@ +## Samplesheet input + +You will need to create a samplesheet with information about the samples you would like to analyse before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row as shown in the examples below. + +```console +--input '[path to samplesheet file]' +``` + +### Multiple runs of the same sample + +The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: + +```console +sample,fastq_1,fastq_2 +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz +CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz +CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz +``` + +### Full samplesheet + +The pipeline will auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire, however, there is a strict requirement for the first 3 columns to match those defined in the table below. + +A final samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. + +```console +sample,fastq_1,fastq_2 +CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz +CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz +CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz +TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz, +TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz, +TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz, +TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz, +``` + +| Column | Description | +|----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `fastq_1` | Full path to FastQ file for Illumina short reads 1. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | +| `fastq_2` | Full path to FastQ file for Illumina short reads 2. File has to be gzipped and have the extension ".fastq.gz" or ".fq.gz". | + +An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. + ## Running the pipeline The typical command for running the pipeline is as follows: -```bash -nextflow run nf-core/cutandrun --input '*_R{1,2}.fastq.gz' -profile docker +```console +nextflow run nf-core/cutandrun --input samplesheet.csv --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. Note that the pipeline will create the following files in your working directory: -```bash +```console work # Directory containing the nextflow working files results # Finished results (configurable, see below) .nextflow_log # Log file from Nextflow @@ -31,13 +75,13 @@ results # Finished results (configurable, see below) When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: -```bash +```console nextflow pull nf-core/cutandrun ``` ### Reproducibility -It's a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. +It is a good idea to specify a pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. First, go to the [nf-core/cutandrun releases page](https://github.com/nf-core/cutandrun/releases) and find the latest version number - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. @@ -51,7 +95,7 @@ This version number will be logged in reports when you run the pipeline, so that Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. When using Biocontainers, most of these software packaging methods pull Docker containers from quay.io e.g [FastQC](https://quay.io/repository/biocontainers/fastqc) except for Singularity which directly downloads Singularity images via https hosted by the [Galaxy project](https://depot.galaxyproject.org/singularity/) and Conda which downloads and installs software locally from [Bioconda](https://bioconda.github.io/). > We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. @@ -63,27 +107,20 @@ They are loaded in sequence, so later profiles can overwrite earlier profiles. If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended. * `docker` - * A generic configuration profile to be used with [Docker](https://docker.com/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Docker](https://docker.com/) * `singularity` - * A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Singularity](https://sylabs.io/docs/) * `podman` - * A generic configuration profile to be used with [Podman](https://podman.io/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Podman](https://podman.io/) * `shifter` - * A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) * `charliecloud` - * A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) - * Pulls software from Docker Hub: [`nfcore/cutandrun`](https://hub.docker.com/r/nfcore/cutandrun/) + * A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) * `conda` - * Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. - * A generic configuration profile to be used with [Conda](https://conda.io/docs/) - * Pulls most software from [Bioconda](https://bioconda.github.io/) + * A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter or Charliecloud. * `test` - * A profile with a complete configuration for automated testing - * Includes links to test data so needs no other parameters + * A profile with a complete configuration for automated testing + * Includes links to test data so needs no other parameters ### `-resume` @@ -95,29 +132,140 @@ You can also supply a run name to resume a specific run: `-resume [run-name]`. U Specify the path to a specific config file (this is a core Nextflow command). See the [nf-core website documentation](https://nf-co.re/usage/configuration) for more information. -#### Custom resource requests +## Custom configuration + +### Resource requests + +Whilst the default requirements set within the pipeline will hopefully work for most people and with most input data, you may find that you want to customise the compute resources that the pipeline requests. Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with any of the error codes specified [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L18) it will automatically be resubmitted with higher requests (2 x original, then 3 x original). If it still fails after the third attempt then the pipeline execution is stopped. + +For example, if the nf-core/rnaseq pipeline is failing after multiple re-submissions of the `STAR_ALIGN` process due to an exit code of `137` this would indicate that there is an out of memory issue: + +```console +[62/149eb0] NOTE: Process `RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) -- Execution is retried (1) +Error executing process > 'RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)' + +Caused by: + Process `RNASEQ:ALIGN_STAR:STAR_ALIGN (WT_REP1)` terminated with an error exit status (137) -Each step in the pipeline has a default set of requirements for number of CPUs, memory and time. For most of the steps in the pipeline, if the job exits with an error code of `143` (exceeded requested resources) it will automatically resubmit with higher requests (2 x original, then 3 x original). If it still fails after three times then the pipeline is stopped. +Command executed: + STAR \ + --genomeDir star \ + --readFilesIn WT_REP1_trimmed.fq.gz \ + --runThreadN 2 \ + --outFileNamePrefix WT_REP1. \ + -Whilst these default requirements will hopefully work for most people with most data, you may find that you want to customise the compute resources that the pipeline requests. You can do this by creating a custom config file. For example, to give the workflow process `star` 32GB of memory, you could use the following config: +Command exit status: + 137 + +Command output: + (empty) + +Command error: + .command.sh: line 9: 30 Killed STAR --genomeDir star --readFilesIn WT_REP1_trimmed.fq.gz --runThreadN 2 --outFileNamePrefix WT_REP1. +Work dir: + /home/pipelinetest/work/9d/172ca5881234073e8d76f2a19c88fb + +Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run` +``` + +To bypass this error you would need to find exactly which resources are set by the `STAR_ALIGN` process. The quickest way is to search for `process STAR_ALIGN` in the [nf-core/rnaseq Github repo](https://github.com/nf-core/rnaseq/search?q=process+STAR_ALIGN). We have standardised the structure of Nextflow DSL2 pipelines such that all module files will be present in the `modules/` directory and so based on the search results the file we want is `modules/nf-core/software/star/align/main.nf`. If you click on the link to that file you will notice that there is a `label` directive at the top of the module that is set to [`label process_high`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L9). The [Nextflow `label`](https://www.nextflow.io/docs/latest/process.html#label) directive allows us to organise workflow processes in separate groups which can be referenced in a configuration file to select and configure subset of processes having similar computing requirements. The default values for the `process_high` label are set in the pipeline's [`base.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/base.config#L33-L37) which in this case is defined as 72GB. Providing you haven't set any other standard nf-core parameters to __cap__ the [maximum resources](https://nf-co.re/usage/configuration#max-resources) used by the pipeline then we can try and bypass the `STAR_ALIGN` process failure by creating a custom config file that sets at least 72GB of memory, in this case increased to 100GB. The custom config below can then be provided to the pipeline via the [`-c`](#-c) parameter as highlighted in previous sections. ```nextflow process { - withName: star { - memory = 32.GB - } + withName: STAR_ALIGN { + memory = 100.GB + } } ``` -To find the exact name of a process you wish to modify the compute resources, check the live-status of a nextflow run displayed on your terminal or check the nextflow error for a line like so: `Error executing process > 'bwa'`. In this case the name to specify in the custom config file is `bwa`. +> **NB:** We specify just the process name i.e. `STAR_ALIGN` in the config file and not the full task name string that is printed to screen in the error message or on the terminal whilst the pipeline is running i.e. `RNASEQ:ALIGN_STAR:STAR_ALIGN`. You may get a warning suggesting that the process selector isn't recognised but you can ignore that if the process name has been specified correctly. This is something that needs to be fixed upstream in core Nextflow. + +### Tool-specific options + +For the ultimate flexibility, we have implemented and are using Nextflow DSL2 modules in a way where it is possible for both developers and users to change tool-specific command-line arguments (e.g. providing an additional command-line argument to the `STAR_ALIGN` process) as well as publishing options (e.g. saving files produced by the `STAR_ALIGN` process that aren't saved by default by the pipeline). In the majority of instances, as a user you won't have to change the default options set by the pipeline developer(s), however, there may be edge cases where creating a simple custom config file can improve the behaviour of the pipeline if for example it is failing due to a weird error that requires setting a tool-specific parameter to deal with smaller / larger genomes. + +The command-line arguments passed to STAR in the `STAR_ALIGN` module are a combination of: + +* Mandatory arguments or those that need to be evaluated within the scope of the module, as supplied in the [`script`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L49-L55) section of the module file. + +* An [`options.args`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/modules/nf-core/software/star/align/main.nf#L56) string of non-mandatory parameters that is set to be empty by default in the module but can be overwritten when including the module in the sub-workflow / workflow context via the `addParams` Nextflow option. + +The nf-core/rnaseq pipeline has a sub-workflow (see [terminology](https://github.com/nf-core/modules#terminology)) specifically to align reads with STAR and to sort, index and generate some basic stats on the resulting BAM files using SAMtools. At the top of this file we import the `STAR_ALIGN` module via the Nextflow [`include`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/subworkflows/nf-core/align_star.nf#L10) keyword and by default the options passed to the module via the `addParams` option are set as an empty Groovy map [here](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/subworkflows/nf-core/align_star.nf#L5); this in turn means `options.args` will be set to empty by default in the module file too. This is an intentional design choice and allows us to implement well-written sub-workflows composed of a chain of tools that by default run with the bare minimum parameter set for any given tool in order to make it much easier to share across pipelines and to provide the flexibility for users and developers to customise any non-mandatory arguments. + +When including the sub-workflow above in the main pipeline workflow we use the same `include` statement, however, we now have the ability to overwrite options for each of the tools in the sub-workflow including the [`align_options`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/workflows/rnaseq.nf#L225) variable that will be used specifically to overwrite the optional arguments passed to the `STAR_ALIGN` module. In this case, the options to be provided to `STAR_ALIGN` have been assigned sensible defaults by the developer(s) in the pipeline's [`modules.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/modules.config#L70-L74) and can be accessed and customised in the [workflow context](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/workflows/rnaseq.nf#L201-L204) too before eventually passing them to the sub-workflow as a Groovy map called `star_align_options`. These options will then be propagated from `workflow -> sub-workflow -> module`. + +As mentioned at the beginning of this section it may also be necessary for users to overwrite the options passed to modules to be able to customise specific aspects of the way in which a particular tool is executed by the pipeline. Given that all of the default module options are stored in the pipeline's `modules.config` as a [`params` variable](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/modules.config#L24-L25) it is also possible to overwrite any of these options via a custom config file. + +Say for example we want to append an additional, non-mandatory parameter (i.e. `--outFilterMismatchNmax 16`) to the arguments passed to the `STAR_ALIGN` module. Firstly, we need to copy across the default `args` specified in the [`modules.config`](https://github.com/nf-core/rnaseq/blob/4c27ef5610c87db00c3c5a3eed10b1d161abf575/conf/modules.config#L71) and create a custom config file that is a composite of the default `args` as well as the additional options you would like to provide. This is very important because Nextflow will overwrite the default value of `args` that you provide via the custom config. + +As you will see in the example below, we have: + +* appended `--outFilterMismatchNmax 16` to the default `args` used by the module. +* changed the default `publish_dir` value to where the files will eventually be published in the main results directory. +* appended `'bam':''` to the default value of `publish_files` so that the BAM files generated by the process will also be saved in the top-level results directory for the module. Note: `'out':'log'` means any file/directory ending in `out` will now be saved in a separate directory called `my_star_directory/log/`. + +```nextflow +params { + modules { + 'star_align' { + args = "--quantMode TranscriptomeSAM --twopassMode Basic --outSAMtype BAM Unsorted --readFilesCommand zcat --runRNGseed 0 --outFilterMultimapNmax 20 --alignSJDBoverhangMin 1 --outSAMattributes NH HI AS NM MD --quantTranscriptomeBan Singleend --outFilterMismatchNmax 16" + publish_dir = "my_star_directory" + publish_files = ['out':'log', 'tab':'log', 'bam':''] + } + } +} +``` + +### Updating containers + +The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. If for some reason you need to use a different version of a particular tool with the pipeline then you just need to identify the `process` name and override the Nextflow `container` definition for that process using the `withName` declaration. For example, in the [nf-core/viralrecon](https://nf-co.re/viralrecon) pipeline a tool called [Pangolin](https://github.com/cov-lineages/pangolin) has been used during the COVID-19 pandemic to assign lineages to SARS-CoV-2 genome sequenced samples. Given that the lineage assignments change quite frequently it doesn't make sense to re-release the nf-core/viralrecon everytime a new version of Pangolin has been released. However, you can override the default container used by the pipeline by creating a custom config file and passing it as a command-line argument via `-c custom.config`. + +1. Check the default version used by the pipeline in the module file for [Pangolin](https://github.com/nf-core/viralrecon/blob/a85d5969f9025409e3618d6c280ef15ce417df65/modules/nf-core/software/pangolin/main.nf#L14-L19) +2. Find the latest version of the Biocontainer available on [Quay.io](https://quay.io/repository/biocontainers/pangolin?tag=latest&tab=tags) +3. Create the custom config accordingly: + + * For Docker: + + ```nextflow + process { + withName: PANGOLIN { + container = 'quay.io/biocontainers/pangolin:3.0.5--pyhdfd78af_0' + } + } + ``` + + * For Singularity: + + ```nextflow + process { + withName: PANGOLIN { + container = 'https://depot.galaxyproject.org/singularity/pangolin:3.0.5--pyhdfd78af_0' + } + } + ``` + + * For Conda: + + ```nextflow + process { + withName: PANGOLIN { + conda = 'bioconda::pangolin=3.0.5' + } + } + ``` + +> **NB:** If you wish to periodically update individual tool-specific results (e.g. Pangolin) generated by the pipeline then you must ensure to keep the `work/` directory otherwise the `-resume` ability of the pipeline will be compromised and it will restart from scratch. + +### nf-core/configs -See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information. +In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. -If you are likely to be running `nf-core` pipelines regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter (see definition above). You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. +See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information about creating your own configuration files. If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -### Running in the background +## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. @@ -126,11 +274,11 @@ The Nextflow `-bg` flag launches Nextflow in the background, detached from your Alternatively, you can use `screen` / `tmux` or similar tool to create a detached session which you can log back into at a later time. Some HPC setups also allow you to run nextflow within a cluster job submitted your job scheduler (from where it submits more jobs). -#### Nextflow memory requirements +## Nextflow memory requirements In some cases, the Nextflow Java virtual machines can start to request a large amount of memory. We recommend adding the following line to your environment to limit this (typically in `~/.bashrc` or `~./bash_profile`): -```bash +```console NXF_OPTS='-Xms1g -Xmx4g' ``` diff --git a/environment.yml b/environment.yml deleted file mode 100644 index 83f81a09..00000000 --- a/environment.yml +++ /dev/null @@ -1,15 +0,0 @@ -# You can use this file to create a conda environment for this pipeline: -# conda env create -f environment.yml -name: nf-core-cutandrun-1.0dev -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - conda-forge::python=3.7.3 - - conda-forge::markdown=3.1.1 - - conda-forge::pymdown-extensions=6.0 - - conda-forge::pygments=2.5.2 - # TODO nf-core: Add required software dependencies here - - bioconda::fastqc=0.11.8 - - bioconda::multiqc=1.7 diff --git a/lib/Headers.groovy b/lib/Headers.groovy deleted file mode 100644 index 15d1d388..00000000 --- a/lib/Headers.groovy +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file holds several functions used to render the nf-core ANSI header. - */ - -class Headers { - - private static Map log_colours(Boolean monochrome_logs) { - Map colorcodes = [:] - colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" - colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['yellow_bold'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" - colorcodes['red'] = monochrome_logs ? '' : "\033[1;91m" - return colorcodes - } - - static String dashed_line(monochrome_logs) { - Map colors = log_colours(monochrome_logs) - return "-${colors.dim}----------------------------------------------------${colors.reset}-" - } - - static String nf_core(workflow, monochrome_logs) { - Map colors = log_colours(monochrome_logs) - String.format( - """\n - ${dashed_line(monochrome_logs)} - ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} - ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} - ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} - ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} - ${colors.green}`._,._,\'${colors.reset} - ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} - ${dashed_line(monochrome_logs)} - """.stripIndent() - ) - } -} diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy old mode 100644 new mode 100755 index 52ee7304..8d6920dd --- a/lib/NfcoreSchema.groovy +++ b/lib/NfcoreSchema.groovy @@ -1,6 +1,6 @@ -/* - * This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. - */ +// +// This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. +// import org.everit.json.schema.Schema import org.everit.json.schema.loader.SchemaLoader @@ -13,16 +13,23 @@ import groovy.json.JsonBuilder class NfcoreSchema { - /* - * Function to loop over all parameters defined in schema and check - * whether the given paremeters adhere to the specificiations - */ + // + // Resolve Schema path relative to main workflow directory + // + public static String getSchemaPath(workflow, schema_filename='nextflow_schema.json') { + return "${workflow.projectDir}/${schema_filename}" + } + + // + // Function to loop over all parameters defined in schema and check + // whether the given parameters adhere to the specifications + // /* groovylint-disable-next-line UnusedPrivateMethodParameter */ - private static void validateParameters(params, jsonSchema, log) { + public static void validateParameters(workflow, params, log, schema_filename='nextflow_schema.json') { def has_error = false //=====================================================================// // Check for nextflow core params and unexpected params - def json = new File(jsonSchema).text + def json = new File(getSchemaPath(workflow, schema_filename=schema_filename)).text def Map schemaParams = (Map) new JsonSlurper().parseText(json).get('definitions') def nf_params = [ // Options for base `nextflow` command @@ -114,7 +121,8 @@ class NfcoreSchema { def params_ignore = params.schema_ignore_params.split(',') + 'schema_ignore_params' def expectedParamsLowerCase = expectedParams.collect{ it.replace("-", "").toLowerCase() } def specifiedParamLowerCase = specifiedParam.replace("-", "").toLowerCase() - if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam) && !expectedParamsLowerCase.contains(specifiedParamLowerCase)) { + def isCamelCaseBug = (specifiedParam.contains("-") && !expectedParams.contains(specifiedParam) && expectedParamsLowerCase.contains(specifiedParamLowerCase)) + if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam) && !isCamelCaseBug) { // Temporarily remove camelCase/camel-case params #1035 def unexpectedParamsLowerCase = unexpectedParams.collect{ it.replace("-", "").toLowerCase()} if (!unexpectedParamsLowerCase.contains(specifiedParamLowerCase)){ @@ -125,36 +133,36 @@ class NfcoreSchema { //=====================================================================// // Validate parameters against the schema - InputStream inputStream = new File(jsonSchema).newInputStream() - JSONObject rawSchema = new JSONObject(new JSONTokener(inputStream)) + InputStream input_stream = new File(getSchemaPath(workflow, schema_filename=schema_filename)).newInputStream() + JSONObject raw_schema = new JSONObject(new JSONTokener(input_stream)) // Remove anything that's in params.schema_ignore_params - rawSchema = removeIgnoredParams(rawSchema, params) + raw_schema = removeIgnoredParams(raw_schema, params) - Schema schema = SchemaLoader.load(rawSchema) + Schema schema = SchemaLoader.load(raw_schema) // Clean the parameters def cleanedParams = cleanParameters(params) // Convert to JSONObject def jsonParams = new JsonBuilder(cleanedParams) - JSONObject paramsJSON = new JSONObject(jsonParams.toString()) + JSONObject params_json = new JSONObject(jsonParams.toString()) // Validate try { - schema.validate(paramsJSON) + schema.validate(params_json) } catch (ValidationException e) { println '' log.error 'ERROR: Validation of pipeline parameters failed!' JSONObject exceptionJSON = e.toJSON() - printExceptions(exceptionJSON, paramsJSON, log) + printExceptions(exceptionJSON, params_json, log) println '' has_error = true } // Check for unexpected parameters if (unexpectedParams.size() > 0) { - Map colors = log_colours(params.monochrome_logs) + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) println '' def warn_msg = 'Found unexpected parameters:' for (unexpectedParam in unexpectedParams) { @@ -170,266 +178,17 @@ class NfcoreSchema { } } - // Loop over nested exceptions and print the causingException - private static void printExceptions(exJSON, paramsJSON, log) { - def causingExceptions = exJSON['causingExceptions'] - if (causingExceptions.length() == 0) { - def m = exJSON['message'] =~ /required key \[([^\]]+)\] not found/ - // Missing required param - if (m.matches()) { - log.error "* Missing required parameter: --${m[0][1]}" - } - // Other base-level error - else if (exJSON['pointerToViolation'] == '#') { - log.error "* ${exJSON['message']}" - } - // Error with specific param - else { - def param = exJSON['pointerToViolation'] - ~/^#\// - def param_val = paramsJSON[param].toString() - log.error "* --${param}: ${exJSON['message']} (${param_val})" - } - } - for (ex in causingExceptions) { - printExceptions(ex, paramsJSON, log) - } - } - - // Remove an element from a JSONArray - private static JSONArray removeElement(jsonArray, element){ - def list = [] - int len = jsonArray.length() - for (int i=0;i - if(rawSchema.keySet().contains('definitions')){ - rawSchema.definitions.each { definition -> - for (key in definition.keySet()){ - if (definition[key].get("properties").keySet().contains(ignore_param)){ - // Remove the param to ignore - definition[key].get("properties").remove(ignore_param) - // If the param was required, change this - if (definition[key].has("required")) { - def cleaned_required = removeElement(definition[key].required, ignore_param) - definition[key].put("required", cleaned_required) - } - } - } - } - } - if(rawSchema.keySet().contains('properties') && rawSchema.get('properties').keySet().contains(ignore_param)) { - rawSchema.get("properties").remove(ignore_param) - } - if(rawSchema.keySet().contains('required') && rawSchema.required.contains(ignore_param)) { - def cleaned_required = removeElement(rawSchema.required, ignore_param) - rawSchema.put("required", cleaned_required) - } - } - return rawSchema - } - - private static Map cleanParameters(params) { - def new_params = params.getClass().newInstance(params) - for (p in params) { - // remove anything evaluating to false - if (!p['value']) { - new_params.remove(p.key) - } - // Cast MemoryUnit to String - if (p['value'].getClass() == nextflow.util.MemoryUnit) { - new_params.replace(p.key, p['value'].toString()) - } - // Cast Duration to String - if (p['value'].getClass() == nextflow.util.Duration) { - new_params.replace(p.key, p['value'].toString().replaceFirst(/d(?!\S)/, "day")) - } - // Cast LinkedHashMap to String - if (p['value'].getClass() == LinkedHashMap) { - new_params.replace(p.key, p['value'].toString()) - } - } - return new_params - } - - /* - * This method tries to read a JSON params file - */ - private static LinkedHashMap params_load(String json_schema) { - def params_map = new LinkedHashMap() - try { - params_map = params_read(json_schema) - } catch (Exception e) { - println "Could not read parameters settings from JSON. $e" - params_map = new LinkedHashMap() - } - return params_map - } - - private static Map log_colours(Boolean monochrome_logs) { - Map colorcodes = [:] - - // Reset / Meta - colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" - colorcodes['bold'] = monochrome_logs ? '' : "\033[1m" - colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" - colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m" - colorcodes['blink'] = monochrome_logs ? '' : "\033[5m" - colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m" - colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" - - // Regular Colors - colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" - colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" - colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" - colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" - colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" - colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" - colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" - colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" - - // Bold - colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" - colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" - colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" - colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" - colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" - colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" - colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" - colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" - - // Underline - colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" - colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" - colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" - colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" - colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" - colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" - colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" - colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" - - // High Intensity - colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" - colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" - colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" - colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" - colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" - colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" - colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" - colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" - - // Bold High Intensity - colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" - colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" - colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" - colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" - colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" - colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" - colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" - colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" - - return colorcodes - } - - static String dashed_line(monochrome_logs) { - Map colors = log_colours(monochrome_logs) - return "-${colors.dim}----------------------------------------------------${colors.reset}-" - } - - /* - Method to actually read in JSON file using Groovy. - Group (as Key), values are all parameters - - Parameter1 as Key, Description as Value - - Parameter2 as Key, Description as Value - .... - Group - - - */ - private static LinkedHashMap params_read(String json_schema) throws Exception { - def json = new File(json_schema).text - def Map schema_definitions = (Map) new JsonSlurper().parseText(json).get('definitions') - def Map schema_properties = (Map) new JsonSlurper().parseText(json).get('properties') - /* Tree looks like this in nf-core schema - * definitions <- this is what the first get('definitions') gets us - group 1 - title - description - properties - parameter 1 - type - description - parameter 2 - type - description - group 2 - title - description - properties - parameter 1 - type - description - * properties <- parameters can also be ungrouped, outside of definitions - parameter 1 - type - description - */ - - // Grouped params - def params_map = new LinkedHashMap() - schema_definitions.each { key, val -> - def Map group = schema_definitions."$key".properties // Gets the property object of the group - def title = schema_definitions."$key".title - def sub_params = new LinkedHashMap() - group.each { innerkey, value -> - sub_params.put(innerkey, value) - } - params_map.put(title, sub_params) - } - - // Ungrouped params - def ungrouped_params = new LinkedHashMap() - schema_properties.each { innerkey, value -> - ungrouped_params.put(innerkey, value) - } - params_map.put("Other parameters", ungrouped_params) - - return params_map - } - - /* - * Get maximum number of characters across all parameter names - */ - private static Integer params_max_chars(params_map) { - Integer max_chars = 0 - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (param.size() > max_chars) { - max_chars = param.size() - } - } - } - return max_chars - } - - /* - * Beautify parameters for --help - */ - private static String params_help(workflow, params, json_schema, command) { - Map colors = log_colours(params.monochrome_logs) + // + // Beautify parameters for --help + // + public static String paramsHelp(workflow, params, command, schema_filename='nextflow_schema.json') { + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) Integer num_hidden = 0 String output = '' output += 'Typical pipeline command:\n\n' output += " ${colors.cyan}${command}${colors.reset}\n\n" - Map params_map = params_load(json_schema) - Integer max_chars = params_max_chars(params_map) + 1 + Map params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) + Integer max_chars = paramsMaxChars(params_map) + 1 Integer desc_indent = max_chars + 14 Integer dec_linewidth = 160 - desc_indent for (group in params_map.keySet()) { @@ -469,18 +228,17 @@ class NfcoreSchema { output += group_output } } - output += dashed_line(params.monochrome_logs) if (num_hidden > 0){ - output += colors.dim + "\n Hiding $num_hidden params, use --show_hidden_params to show.\n" + colors.reset - output += dashed_line(params.monochrome_logs) + output += colors.dim + "!! Hiding $num_hidden params, use --show_hidden_params to show them !!\n" + colors.reset } + output += NfcoreTemplate.dashedLine(params.monochrome_logs) return output } - /* - * Groovy Map summarising parameters/workflow options used by the pipeline - */ - private static LinkedHashMap params_summary_map(workflow, params, json_schema) { + // + // Groovy Map summarising parameters/workflow options used by the pipeline + // + public static LinkedHashMap paramsSummaryMap(workflow, params, schema_filename='nextflow_schema.json') { // Get a selection of core Nextflow workflow options def Map workflow_summary = [:] if (workflow.revision) { @@ -503,7 +261,7 @@ class NfcoreSchema { // Get pipeline parameters defined in JSON Schema def Map params_summary = [:] def blacklist = ['hostnames'] - def params_map = params_load(json_schema) + def params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) for (group in params_map.keySet()) { def sub_params = new LinkedHashMap() def group_params = params_map.get(group) // This gets the parameters of that particular group @@ -546,14 +304,14 @@ class NfcoreSchema { return [ 'Core Nextflow options' : workflow_summary ] << params_summary } - /* - * Beautify parameters for summary and return as string - */ - private static String params_summary_log(workflow, params, json_schema) { - Map colors = log_colours(params.monochrome_logs) + // + // Beautify parameters for summary and return as string + // + public static String paramsSummaryLog(workflow, params) { + Map colors = NfcoreTemplate.logColours(params.monochrome_logs) String output = '' - def params_map = params_summary_map(workflow, params, json_schema) - def max_chars = params_max_chars(params_map) + def params_map = paramsSummaryMap(workflow, params) + def max_chars = paramsMaxChars(params_map) for (group in params_map.keySet()) { def group_params = params_map.get(group) // This gets the parameters of that particular group if (group_params) { @@ -564,10 +322,196 @@ class NfcoreSchema { output += '\n' } } - output += dashed_line(params.monochrome_logs) - output += colors.dim + "\n Only displaying parameters that differ from defaults.\n" + colors.reset - output += dashed_line(params.monochrome_logs) + output += "!! Only displaying parameters that differ from the pipeline defaults !!\n" + output += NfcoreTemplate.dashedLine(params.monochrome_logs) return output } + // + // Loop over nested exceptions and print the causingException + // + private static void printExceptions(ex_json, params_json, log) { + def causingExceptions = ex_json['causingExceptions'] + if (causingExceptions.length() == 0) { + def m = ex_json['message'] =~ /required key \[([^\]]+)\] not found/ + // Missing required param + if (m.matches()) { + log.error "* Missing required parameter: --${m[0][1]}" + } + // Other base-level error + else if (ex_json['pointerToViolation'] == '#') { + log.error "* ${ex_json['message']}" + } + // Error with specific param + else { + def param = ex_json['pointerToViolation'] - ~/^#\// + def param_val = params_json[param].toString() + log.error "* --${param}: ${ex_json['message']} (${param_val})" + } + } + for (ex in causingExceptions) { + printExceptions(ex, params_json, log) + } + } + + // + // Remove an element from a JSONArray + // + private static JSONArray removeElement(json_array, element) { + def list = [] + int len = json_array.length() + for (int i=0;i + if(raw_schema.keySet().contains('definitions')){ + raw_schema.definitions.each { definition -> + for (key in definition.keySet()){ + if (definition[key].get("properties").keySet().contains(ignore_param)){ + // Remove the param to ignore + definition[key].get("properties").remove(ignore_param) + // If the param was required, change this + if (definition[key].has("required")) { + def cleaned_required = removeElement(definition[key].required, ignore_param) + definition[key].put("required", cleaned_required) + } + } + } + } + } + if(raw_schema.keySet().contains('properties') && raw_schema.get('properties').keySet().contains(ignore_param)) { + raw_schema.get("properties").remove(ignore_param) + } + if(raw_schema.keySet().contains('required') && raw_schema.required.contains(ignore_param)) { + def cleaned_required = removeElement(raw_schema.required, ignore_param) + raw_schema.put("required", cleaned_required) + } + } + return raw_schema + } + + // + // Clean and check parameters relative to Nextflow native classes + // + private static Map cleanParameters(params) { + def new_params = params.getClass().newInstance(params) + for (p in params) { + // remove anything evaluating to false + if (!p['value']) { + new_params.remove(p.key) + } + // Cast MemoryUnit to String + if (p['value'].getClass() == nextflow.util.MemoryUnit) { + new_params.replace(p.key, p['value'].toString()) + } + // Cast Duration to String + if (p['value'].getClass() == nextflow.util.Duration) { + new_params.replace(p.key, p['value'].toString().replaceFirst(/d(?!\S)/, "day")) + } + // Cast LinkedHashMap to String + if (p['value'].getClass() == LinkedHashMap) { + new_params.replace(p.key, p['value'].toString()) + } + } + return new_params + } + + // + // This function tries to read a JSON params file + // + private static LinkedHashMap paramsLoad(String json_schema) { + def params_map = new LinkedHashMap() + try { + params_map = paramsRead(json_schema) + } catch (Exception e) { + println "Could not read parameters settings from JSON. $e" + params_map = new LinkedHashMap() + } + return params_map + } + + // + // Method to actually read in JSON file using Groovy. + // Group (as Key), values are all parameters + // - Parameter1 as Key, Description as Value + // - Parameter2 as Key, Description as Value + // .... + // Group + // - + private static LinkedHashMap paramsRead(String json_schema) throws Exception { + def json = new File(json_schema).text + def Map schema_definitions = (Map) new JsonSlurper().parseText(json).get('definitions') + def Map schema_properties = (Map) new JsonSlurper().parseText(json).get('properties') + /* Tree looks like this in nf-core schema + * definitions <- this is what the first get('definitions') gets us + group 1 + title + description + properties + parameter 1 + type + description + parameter 2 + type + description + group 2 + title + description + properties + parameter 1 + type + description + * properties <- parameters can also be ungrouped, outside of definitions + parameter 1 + type + description + */ + + // Grouped params + def params_map = new LinkedHashMap() + schema_definitions.each { key, val -> + def Map group = schema_definitions."$key".properties // Gets the property object of the group + def title = schema_definitions."$key".title + def sub_params = new LinkedHashMap() + group.each { innerkey, value -> + sub_params.put(innerkey, value) + } + params_map.put(title, sub_params) + } + + // Ungrouped params + def ungrouped_params = new LinkedHashMap() + schema_properties.each { innerkey, value -> + ungrouped_params.put(innerkey, value) + } + params_map.put("Other parameters", ungrouped_params) + + return params_map + } + + // + // Get maximum number of characters across all parameter names + // + private static Integer paramsMaxChars(params_map) { + Integer max_chars = 0 + for (group in params_map.keySet()) { + def group_params = params_map.get(group) // This gets the parameters of that particular group + for (param in group_params.keySet()) { + if (param.size() > max_chars) { + max_chars = param.size() + } + } + } + return max_chars + } } diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy new file mode 100755 index 00000000..b6e689ec --- /dev/null +++ b/lib/NfcoreTemplate.groovy @@ -0,0 +1,266 @@ +// +// This file holds several functions used within the nf-core pipeline template. +// + +import org.yaml.snakeyaml.Yaml + +class NfcoreTemplate { + + // + // Check AWS Batch related parameters have been specified correctly + // + public static void awsBatch(workflow, params) { + if (workflow.profile.contains('awsbatch')) { + // Check params.awsqueue and params.awsregion have been set if running on AWSBatch + assert (params.awsqueue && params.awsregion) : "Specify correct --awsqueue and --awsregion parameters on AWSBatch!" + // Check outdir paths to be S3 buckets if running on AWSBatch + assert params.outdir.startsWith('s3:') : "Outdir not on S3 - specify S3 Bucket to run on AWSBatch!" + } + } + + // + // Check params.hostnames + // + public static void hostName(workflow, params, log) { + Map colors = logColours(params.monochrome_logs) + if (params.hostnames) { + def hostname = "hostname".execute().text.trim() + params.hostnames.each { prof, hnames -> + hnames.each { hname -> + if (hostname.contains(hname) && !workflow.profile.contains(prof)) { + log.info "=${colors.yellow}====================================================${colors.reset}=\n" + + "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + + " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + + " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + + "=${colors.yellow}====================================================${colors.reset}=" + } + } + } + } + } + + // + // Construct and send completion email + // + public static void email(workflow, params, summary_params, projectDir, log, multiqc_report=[]) { + + // Set up the e-mail variables + def subject = "[$workflow.manifest.name] Successful: $workflow.runName" + if (!workflow.success) { + subject = "[$workflow.manifest.name] FAILED: $workflow.runName" + } + + def summary = [:] + for (group in summary_params.keySet()) { + summary << summary_params[group] + } + + def misc_fields = [:] + misc_fields['Date Started'] = workflow.start + misc_fields['Date Completed'] = workflow.complete + misc_fields['Pipeline script file path'] = workflow.scriptFile + misc_fields['Pipeline script hash ID'] = workflow.scriptId + if (workflow.repository) misc_fields['Pipeline repository Git URL'] = workflow.repository + if (workflow.commitId) misc_fields['Pipeline repository Git Commit'] = workflow.commitId + if (workflow.revision) misc_fields['Pipeline Git branch/tag'] = workflow.revision + misc_fields['Nextflow Version'] = workflow.nextflow.version + misc_fields['Nextflow Build'] = workflow.nextflow.build + misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp + + def email_fields = [:] + email_fields['version'] = workflow.manifest.version + email_fields['runName'] = workflow.runName + email_fields['success'] = workflow.success + email_fields['dateComplete'] = workflow.complete + email_fields['duration'] = workflow.duration + email_fields['exitStatus'] = workflow.exitStatus + email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + email_fields['errorReport'] = (workflow.errorReport ?: 'None') + email_fields['commandLine'] = workflow.commandLine + email_fields['projectDir'] = workflow.projectDir + email_fields['summary'] = summary << misc_fields + + // On success try attach the multiqc report + def mqc_report = null + try { + if (workflow.success) { + mqc_report = multiqc_report.getVal() + if (mqc_report.getClass() == ArrayList && mqc_report.size() >= 1) { + if (mqc_report.size() > 1) { + log.warn "[$workflow.manifest.name] Found multiple reports from process 'MULTIQC', will use only one" + } + mqc_report = mqc_report[0] + } + } + } catch (all) { + if (multiqc_report) { + log.warn "[$workflow.manifest.name] Could not attach MultiQC report to summary email" + } + } + + // Check if we are only sending emails on failure + def email_address = params.email + if (!params.email && params.email_on_fail && !workflow.success) { + email_address = params.email_on_fail + } + + // Render the TXT template + def engine = new groovy.text.GStringTemplateEngine() + def tf = new File("$projectDir/assets/email_template.txt") + def txt_template = engine.createTemplate(tf).make(email_fields) + def email_txt = txt_template.toString() + + // Render the HTML template + def hf = new File("$projectDir/assets/email_template.html") + def html_template = engine.createTemplate(hf).make(email_fields) + def email_html = html_template.toString() + + // Render the sendmail template + def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def sf = new File("$projectDir/assets/sendmail_template.txt") + def sendmail_template = engine.createTemplate(sf).make(smail_fields) + def sendmail_html = sendmail_template.toString() + + // Send the HTML e-mail + Map colors = logColours(params.monochrome_logs) + if (email_address) { + try { + if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + [ 'sendmail', '-t' ].execute() << sendmail_html + log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (sendmail)-" + } catch (all) { + // Catch failures and try with plaintext + def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] + if ( mqc_report.size() <= max_multiqc_email_size.toBytes() ) { + mail_cmd += [ '-A', mqc_report ] + } + mail_cmd.execute() << email_html + log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Sent summary e-mail to $email_address (mail)-" + } + } + + // Write summary e-mail HTML to a file + def output_d = new File("${params.outdir}/pipeline_info/") + if (!output_d.exists()) { + output_d.mkdirs() + } + def output_hf = new File(output_d, "pipeline_report.html") + output_hf.withWriter { w -> w << email_html } + def output_tf = new File(output_d, "pipeline_report.txt") + output_tf.withWriter { w -> w << email_txt } + } + + // + // Print pipeline summary on completion + // + public static void summary(workflow, params, log) { + Map colors = logColours(params.monochrome_logs) + if (workflow.success) { + if (workflow.stats.ignoredCount == 0) { + log.info "-${colors.purple}[$workflow.manifest.name]${colors.green} Pipeline completed successfully${colors.reset}-" + } else { + log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + } + } else { + hostName(workflow, params, log) + log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } + } + + // + // ANSII Colours used for terminal logging + // + public static Map logColours(Boolean monochrome_logs) { + Map colorcodes = [:] + + // Reset / Meta + colorcodes['reset'] = monochrome_logs ? '' : "\033[0m" + colorcodes['bold'] = monochrome_logs ? '' : "\033[1m" + colorcodes['dim'] = monochrome_logs ? '' : "\033[2m" + colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m" + colorcodes['blink'] = monochrome_logs ? '' : "\033[5m" + colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m" + colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m" + + // Regular Colors + colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m" + colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m" + colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m" + colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m" + colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m" + colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m" + colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m" + colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m" + + // Bold + colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m" + colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m" + colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m" + colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m" + colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m" + colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m" + colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m" + colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m" + + // Underline + colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m" + colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m" + colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m" + colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m" + colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m" + colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m" + colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m" + colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m" + + // High Intensity + colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m" + colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m" + colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m" + colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m" + colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m" + colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m" + colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m" + colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m" + + // Bold High Intensity + colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m" + colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m" + colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m" + colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m" + colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m" + colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m" + colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m" + colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m" + + return colorcodes + } + + // + // Does what is says on the tin + // + public static String dashedLine(monochrome_logs) { + Map colors = logColours(monochrome_logs) + return "-${colors.dim}----------------------------------------------------${colors.reset}-" + } + + // + // nf-core logo + // + public static String logo(workflow, monochrome_logs) { + Map colors = logColours(monochrome_logs) + String.format( + """\n + ${dashedLine(monochrome_logs)} + ${colors.green},--.${colors.black}/${colors.green},-.${colors.reset} + ${colors.blue} ___ __ __ __ ___ ${colors.green}/,-._.--~\'${colors.reset} + ${colors.blue} |\\ | |__ __ / ` / \\ |__) |__ ${colors.yellow}} {${colors.reset} + ${colors.blue} | \\| | \\__, \\__/ | \\ |___ ${colors.green}\\`-._,-`-,${colors.reset} + ${colors.green}`._,._,\'${colors.reset} + ${colors.purple} ${workflow.manifest.name} v${workflow.manifest.version}${colors.reset} + ${dashedLine(monochrome_logs)} + """.stripIndent() + ) + } +} diff --git a/lib/Utils.groovy b/lib/Utils.groovy new file mode 100755 index 00000000..18173e98 --- /dev/null +++ b/lib/Utils.groovy @@ -0,0 +1,47 @@ +// +// This file holds several Groovy functions that could be useful for any Nextflow pipeline +// + +import org.yaml.snakeyaml.Yaml + +class Utils { + + // + // When running with -profile conda, warn if channels have not been set-up appropriately + // + public static void checkCondaChannels(log) { + Yaml parser = new Yaml() + def channels = [] + try { + def config = parser.load("conda config --show channels".execute().text) + channels = config.channels + } catch(NullPointerException | IOException e) { + log.warn "Could not verify conda channel configuration." + return + } + + // Check that all channels are present + def required_channels = ['conda-forge', 'bioconda', 'defaults'] + def conda_check_failed = !required_channels.every { ch -> ch in channels } + + // Check that they are in the right order + conda_check_failed |= !(channels.indexOf('conda-forge') < channels.indexOf('bioconda')) + conda_check_failed |= !(channels.indexOf('bioconda') < channels.indexOf('defaults')) + + if (conda_check_failed) { + log.warn "=============================================================================\n" + + " There is a problem with your Conda configuration!\n\n" + + " You will need to set-up the conda-forge and bioconda channels correctly.\n" + + " Please refer to https://bioconda.github.io/user/install.html#set-up-channels\n" + + " NB: The order of the channels matters!\n" + + "===================================================================================" + } + } + + // + // Join module args with appropriate spacing + // + public static String joinModuleArgs(args_list) { + return ' ' + args_list.join(' ') + } +} diff --git a/lib/WorkflowCutandrun.groovy b/lib/WorkflowCutandrun.groovy new file mode 100755 index 00000000..91fc9d96 --- /dev/null +++ b/lib/WorkflowCutandrun.groovy @@ -0,0 +1,59 @@ +// +// This file holds several functions specific to the workflow/cutandrun.nf in the nf-core/cutandrun pipeline +// + +class WorkflowCutandrun { + + // + // Check and validate parameters + // + public static void initialise(params, log) { + genomeExistsError(params, log) + + if (!params.fasta) { + log.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." + System.exit(1) + } + } + + // + // Get workflow summary for MultiQC + // + public static String paramsSummaryMultiqc(workflow, summary) { + String summary_section = '' + for (group in summary.keySet()) { + def group_params = summary.get(group) // This gets the parameters of that particular group + if (group_params) { + summary_section += "

    $group

    \n" + summary_section += "
    \n" + } + } + + String yaml_file_text = "id: '${workflow.manifest.name.replace('/','-')}-summary'\n" + yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n" + yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n" + yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n" + yaml_file_text += "plot_type: 'html'\n" + yaml_file_text += "data: |\n" + yaml_file_text += "${summary_section}" + return yaml_file_text + } + + // + // Exit pipeline if incorrect --genome key provided + // + private static void genomeExistsError(params, log) { + if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + log.error "=============================================================================\n" + + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + + " Currently, the available genome keys are:\n" + + " ${params.genomes.keySet().join(", ")}\n" + + "===================================================================================" + System.exit(1) + } + } +} diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy new file mode 100755 index 00000000..8aa7e443 --- /dev/null +++ b/lib/WorkflowMain.groovy @@ -0,0 +1,94 @@ +// +// This file holds several functions specific to the main.nf workflow in the nf-core/cutandrun pipeline +// + +class WorkflowMain { + + // + // Citation string for pipeline + // + public static String citation(workflow) { + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + + // TODO nf-core: Add Zenodo DOI for pipeline after first release + //"* The pipeline\n" + + //" https://doi.org/10.5281/zenodo.XXXXXXX\n\n" + + "* The nf-core framework\n" + + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + + "* Software dependencies\n" + + " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" + } + + // + // Print help to screen if required + // + public static String help(workflow, params, log) { + def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" + def help_string = '' + help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) + help_string += NfcoreSchema.paramsHelp(workflow, params, command) + help_string += '\n' + citation(workflow) + '\n' + help_string += NfcoreTemplate.dashedLine(params.monochrome_logs) + return help_string + } + + // + // Print parameter summary log to screen + // + public static String paramsSummaryLog(workflow, params, log) { + def summary_log = '' + summary_log += NfcoreTemplate.logo(workflow, params.monochrome_logs) + summary_log += NfcoreSchema.paramsSummaryLog(workflow, params) + summary_log += '\n' + citation(workflow) + '\n' + summary_log += NfcoreTemplate.dashedLine(params.monochrome_logs) + return summary_log + } + + // + // Validate parameters and print summary to screen + // + public static void initialise(workflow, params, log) { + // Print help to screen if required + if (params.help) { + log.info help(workflow, params, log) + System.exit(0) + } + + // Validate workflow parameters via the JSON schema + if (params.validate_params) { + NfcoreSchema.validateParameters(workflow, params, log) + } + + // Print parameter summary log to screen + log.info paramsSummaryLog(workflow, params, log) + + // Check that conda channels are set-up correctly + if (params.enable_conda) { + Utils.checkCondaChannels(log) + } + + // Check AWS batch settings + NfcoreTemplate.awsBatch(workflow, params) + + // Check the hostnames against configured profiles + NfcoreTemplate.hostName(workflow, params, log) + + // Check input has been provided + if (!params.input) { + log.error "Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'" + System.exit(1) + } + } + + // + // Get attribute from genome config file e.g. fasta + // + public static String getGenomeAttribute(params, attribute) { + def val = '' + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + val = params.genomes[ params.genome ][ attribute ] + } + } + return val + } +} diff --git a/main.nf b/main.nf index 407e7352..7122c5b5 100644 --- a/main.nf +++ b/main.nf @@ -1,390 +1,63 @@ #!/usr/bin/env nextflow /* ======================================================================================== - nf-core/cutandrun + nf-core/cutandrun ======================================================================================== - nf-core/cutandrun Analysis Pipeline. - #### Homepage / Documentation - https://github.com/nf-core/cutandrun + Github : https://github.com/nf-core/cutandrun + Website: https://nf-co.re/cutandrun + Slack : https://nfcore.slack.com/channels/cutandrun ---------------------------------------------------------------------------------------- */ -log.info Headers.nf_core(workflow, params.monochrome_logs) - -//////////////////////////////////////////////////// -/* -- PRINT HELP -- */ -////////////////////////////////////////////////////+ -def json_schema = "$projectDir/nextflow_schema.json" -if (params.help) { - def command = "nextflow run nf-core/cutandrun --input '*_R{1,2}.fastq.gz' -profile docker" - log.info NfcoreSchema.params_help(workflow, params, json_schema, command) - exit 0 -} - -//////////////////////////////////////////////////// -/* -- VALIDATE PARAMETERS -- */ -////////////////////////////////////////////////////+ -if (params.validate_params) { - NfcoreSchema.validateParameters(params, json_schema, log) -} - -//////////////////////////////////////////////////// -/* -- Collect configuration parameters -- */ -//////////////////////////////////////////////////// - -// Check if genome exists in the config file -if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - exit 1, "The provided genome '${params.genome}' is not available in the iGenomes file. Currently the available genomes are ${params.genomes.keySet().join(', ')}" -} - -// TODO nf-core: Add any reference files that are needed -// Configurable reference genomes -// -// NOTE - THIS IS NOT USED IN THIS PIPELINE, EXAMPLE ONLY -// If you want to use the channel below in a process, define the following: -// input: -// file fasta from ch_fasta -// -params.fasta = params.genome ? params.genomes[ params.genome ].fasta ?: false : false -if (params.fasta) { ch_fasta = file(params.fasta, checkIfExists: true) } - -// Check AWS batch settings -if (workflow.profile.contains('awsbatch')) { - // AWSBatch sanity checking - if (!params.awsqueue || !params.awsregion) exit 1, 'Specify correct --awsqueue and --awsregion parameters on AWSBatch!' - // Check outdir paths to be S3 buckets if running on AWSBatch - // related: https://github.com/nextflow-io/nextflow/issues/813 - if (!params.outdir.startsWith('s3:')) exit 1, 'Outdir not on S3 - specify S3 Bucket to run on AWSBatch!' - // Prevent trace files to be stored on S3 since S3 does not support rolling files. - if (params.tracedir.startsWith('s3:')) exit 1, 'Specify a local tracedir or run without trace! S3 cannot be used for tracefiles.' -} - -// Stage config files -ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty() -ch_output_docs = file("$projectDir/docs/output.md", checkIfExists: true) -ch_output_docs_images = file("$projectDir/docs/images/", checkIfExists: true) +nextflow.enable.dsl = 2 /* - * Create a channel for input read files - */ -if (params.input_paths) { - if (params.single_end) { - Channel - .from(params.input_paths) - .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true) ] ] } - .ifEmpty { exit 1, 'params.input_paths was empty - no input files supplied' } - .into { ch_read_files_fastqc; ch_read_files_trimming } - } else { - Channel - .from(params.input_paths) - .map { row -> [ row[0], [ file(row[1][0], checkIfExists: true), file(row[1][1], checkIfExists: true) ] ] } - .ifEmpty { exit 1, 'params.input_paths was empty - no input files supplied' } - .into { ch_read_files_fastqc; ch_read_files_trimming } - } -} else { - Channel - .fromFilePairs(params.input, size: params.single_end ? 1 : 2) - .ifEmpty { exit 1, "Cannot find any reads matching: ${params.input}\nNB: Path needs to be enclosed in quotes!\nIf this is single-end data, please specify --single_end on the command line." } - .into { ch_read_files_fastqc; ch_read_files_trimming } -} - -//////////////////////////////////////////////////// -/* -- PRINT PARAMETER SUMMARY -- */ -//////////////////////////////////////////////////// -log.info NfcoreSchema.params_summary_log(workflow, params, json_schema) - -// Header log info -def summary = [:] -if (workflow.revision) summary['Pipeline Release'] = workflow.revision -summary['Run Name'] = workflow.runName -// TODO nf-core: Report custom parameters here -summary['Input'] = params.input -summary['Fasta Ref'] = params.fasta -summary['Data Type'] = params.single_end ? 'Single-End' : 'Paired-End' -summary['Max Resources'] = "$params.max_memory memory, $params.max_cpus cpus, $params.max_time time per job" -if (workflow.containerEngine) summary['Container'] = "$workflow.containerEngine - $workflow.container" -summary['Output dir'] = params.outdir -summary['Launch dir'] = workflow.launchDir -summary['Working dir'] = workflow.workDir -summary['Script dir'] = workflow.projectDir -summary['User'] = workflow.userName -if (workflow.profile.contains('awsbatch')) { - summary['AWS Region'] = params.awsregion - summary['AWS Queue'] = params.awsqueue - summary['AWS CLI'] = params.awscli -} -summary['Config Profile'] = workflow.profile -if (params.config_profile_description) summary['Config Profile Description'] = params.config_profile_description -if (params.config_profile_contact) summary['Config Profile Contact'] = params.config_profile_contact -if (params.config_profile_url) summary['Config Profile URL'] = params.config_profile_url -summary['Config Files'] = workflow.configFiles.join(', ') -if (params.email || params.email_on_fail) { - summary['E-mail Address'] = params.email - summary['E-mail on failure'] = params.email_on_fail - summary['MultiQC maxsize'] = params.max_multiqc_email_size -} - -// Check the hostnames against configured profiles -checkHostname() - -Channel.from(summary.collect{ [it.key, it.value] }) - .map { k,v -> "
    $k
    ${v ?: 'N/A'}
    " } - .reduce { a, b -> return [a, b].join("\n ") } - .map { x -> """ - id: 'nf-core-cutandrun-summary' - description: " - this information is collected when the pipeline is started." - section_name: 'nf-core/cutandrun Workflow Summary' - section_href: 'https://github.com/nf-core/cutandrun' - plot_type: 'html' - data: | -
    - $x -
    - """.stripIndent() } - .set { ch_workflow_summary } - -/* - * Parse software version numbers - */ -process get_software_versions { - publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode, - saveAs: { filename -> - if (filename.indexOf('.csv') > 0) filename - else null - } - - output: - file 'software_versions_mqc.yaml' into ch_software_versions_yaml - file 'software_versions.csv' +======================================================================================== + GENOME PARAMETER VALUES +======================================================================================== +*/ - script: - // TODO nf-core: Get all tools to print their version number here - """ - echo $workflow.manifest.version > v_pipeline.txt - echo $workflow.nextflow.version > v_nextflow.txt - fastqc --version > v_fastqc.txt - multiqc --version > v_multiqc.txt - scrape_software_versions.py &> software_versions_mqc.yaml - """ -} +params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') /* - * STEP 1 - FastQC - */ -process fastqc { - tag "$name" - label 'process_medium' - publishDir "${params.outdir}/fastqc", mode: params.publish_dir_mode, - saveAs: { filename -> - filename.indexOf('.zip') > 0 ? "zips/$filename" : "$filename" - } - - input: - set val(name), file(reads) from ch_read_files_fastqc - - output: - file '*_fastqc.{zip,html}' into ch_fastqc_results +======================================================================================== + VALIDATE & PRINT PARAMETER SUMMARY +======================================================================================== +*/ - script: - """ - fastqc --quiet --threads $task.cpus $reads - """ -} +WorkflowMain.initialise(workflow, params, log) /* - * STEP 2 - MultiQC - */ -process multiqc { - publishDir "${params.outdir}/MultiQC", mode: params.publish_dir_mode - - input: - file (multiqc_config) from ch_multiqc_config - file (mqc_custom_config) from ch_multiqc_custom_config.collect().ifEmpty([]) - // TODO nf-core: Add in log files from your new processes for MultiQC to find! - file ('fastqc/*') from ch_fastqc_results.collect().ifEmpty([]) - file ('software_versions/*') from ch_software_versions_yaml.collect() - file workflow_summary from ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml") +======================================================================================== + NAMED WORKFLOW FOR PIPELINE +======================================================================================== +*/ - output: - file "*multiqc_report.html" into ch_multiqc_report - file "*_data" - file "multiqc_plots" +include { CUTANDRUN } from './workflows/cutandrun' - script: - rtitle = '' - rfilename = '' - if (!(workflow.runName ==~ /[a-z]+_[a-z]+/)) { - rtitle = "--title \"${workflow.runName}\"" - rfilename = "--filename " + workflow.runName.replaceAll('\\W','_').replaceAll('_+','_') + "_multiqc_report" - } - custom_config_file = params.multiqc_config ? "--config $mqc_custom_config" : '' - // TODO nf-core: Specify which MultiQC modules to use with -m for a faster run time - """ - multiqc -f $rtitle $rfilename $custom_config_file . - """ +// +// WORKFLOW: Run main nf-core/cutandrun analysis pipeline +// +workflow NFCORE_CUTANDRUN { + CUTANDRUN () } /* - * STEP 3 - Output Description HTML - */ -process output_documentation { - publishDir "${params.outdir}/pipeline_info", mode: params.publish_dir_mode - - input: - file output_docs from ch_output_docs - file images from ch_output_docs_images - - output: - file 'results_description.html' +======================================================================================== + RUN ALL WORKFLOWS +======================================================================================== +*/ - script: - """ - markdown_to_html.py $output_docs -o results_description.html - """ +// +// WORKFLOW: Execute a single named workflow for the pipeline +// See: https://github.com/nf-core/rnaseq/issues/619 +// +workflow { + NFCORE_CUTANDRUN () } /* - * Completion e-mail notification - */ -workflow.onComplete { - - // Set up the e-mail variables - def subject = "[nf-core/cutandrun] Successful: $workflow.runName" - if (!workflow.success) { - subject = "[nf-core/cutandrun] FAILED: $workflow.runName" - } - def email_fields = [:] - email_fields['version'] = workflow.manifest.version - email_fields['runName'] = workflow.runName - email_fields['success'] = workflow.success - email_fields['dateComplete'] = workflow.complete - email_fields['duration'] = workflow.duration - email_fields['exitStatus'] = workflow.exitStatus - email_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - email_fields['errorReport'] = (workflow.errorReport ?: 'None') - email_fields['commandLine'] = workflow.commandLine - email_fields['projectDir'] = workflow.projectDir - email_fields['summary'] = summary - email_fields['summary']['Date Started'] = workflow.start - email_fields['summary']['Date Completed'] = workflow.complete - email_fields['summary']['Pipeline script file path'] = workflow.scriptFile - email_fields['summary']['Pipeline script hash ID'] = workflow.scriptId - if (workflow.repository) email_fields['summary']['Pipeline repository Git URL'] = workflow.repository - if (workflow.commitId) email_fields['summary']['Pipeline repository Git Commit'] = workflow.commitId - if (workflow.revision) email_fields['summary']['Pipeline Git branch/tag'] = workflow.revision - email_fields['summary']['Nextflow Version'] = workflow.nextflow.version - email_fields['summary']['Nextflow Build'] = workflow.nextflow.build - email_fields['summary']['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp - - // TODO nf-core: If not using MultiQC, strip out this code (including params.max_multiqc_email_size) - // On success try attach the multiqc report - def mqc_report = null - try { - if (workflow.success) { - mqc_report = ch_multiqc_report.getVal() - if (mqc_report.getClass() == ArrayList) { - log.warn "[nf-core/cutandrun] Found multiple reports from process 'multiqc', will use only one" - mqc_report = mqc_report[0] - } - } - } catch (all) { - log.warn "[nf-core/cutandrun] Could not attach MultiQC report to summary email" - } - - // Check if we are only sending emails on failure - email_address = params.email - if (!params.email && params.email_on_fail && !workflow.success) { - email_address = params.email_on_fail - } - - // Render the TXT template - def engine = new groovy.text.GStringTemplateEngine() - def tf = new File("$projectDir/assets/email_template.txt") - def txt_template = engine.createTemplate(tf).make(email_fields) - def email_txt = txt_template.toString() - - // Render the HTML template - def hf = new File("$projectDir/assets/email_template.html") - def html_template = engine.createTemplate(hf).make(email_fields) - def email_html = html_template.toString() - - // Render the sendmail template - def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: params.max_multiqc_email_size.toBytes() ] - def sf = new File("$projectDir/assets/sendmail_template.txt") - def sendmail_template = engine.createTemplate(sf).make(smail_fields) - def sendmail_html = sendmail_template.toString() - - // Send the HTML e-mail - if (email_address) { - try { - if (params.plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } - // Try to send HTML e-mail using sendmail - [ 'sendmail', '-t' ].execute() << sendmail_html - log.info "[nf-core/cutandrun] Sent summary e-mail to $email_address (sendmail)" - } catch (all) { - // Catch failures and try with plaintext - def mail_cmd = [ 'mail', '-s', subject, '--content-type=text/html', email_address ] - if ( mqc_report.size() <= params.max_multiqc_email_size.toBytes() ) { - mail_cmd += [ '-A', mqc_report ] - } - mail_cmd.execute() << email_html - log.info "[nf-core/cutandrun] Sent summary e-mail to $email_address (mail)" - } - } - - // Write summary e-mail HTML to a file - def output_d = new File("${params.outdir}/pipeline_info/") - if (!output_d.exists()) { - output_d.mkdirs() - } - def output_hf = new File(output_d, "pipeline_report.html") - output_hf.withWriter { w -> w << email_html } - def output_tf = new File(output_d, "pipeline_report.txt") - output_tf.withWriter { w -> w << email_txt } - - c_green = params.monochrome_logs ? '' : "\033[0;32m"; - c_purple = params.monochrome_logs ? '' : "\033[0;35m"; - c_red = params.monochrome_logs ? '' : "\033[0;31m"; - c_reset = params.monochrome_logs ? '' : "\033[0m"; - - if (workflow.stats.ignoredCount > 0 && workflow.success) { - log.info "-${c_purple}Warning, pipeline completed, but with errored process(es) ${c_reset}-" - log.info "-${c_red}Number of ignored errored process(es) : ${workflow.stats.ignoredCount} ${c_reset}-" - log.info "-${c_green}Number of successfully ran process(es) : ${workflow.stats.succeedCount} ${c_reset}-" - } - - if (workflow.success) { - log.info "-${c_purple}[nf-core/cutandrun]${c_green} Pipeline completed successfully${c_reset}-" - } else { - checkHostname() - log.info "-${c_purple}[nf-core/cutandrun]${c_red} Pipeline completed with errors${c_reset}-" - } - -} - -workflow.onError { - // Print unexpected parameters - easiest is to just rerun validation - NfcoreSchema.validateParameters(params, json_schema, log) -} - -def checkHostname() { - def c_reset = params.monochrome_logs ? '' : "\033[0m" - def c_white = params.monochrome_logs ? '' : "\033[0;37m" - def c_red = params.monochrome_logs ? '' : "\033[1;91m" - def c_yellow_bold = params.monochrome_logs ? '' : "\033[1;93m" - if (params.hostnames) { - def hostname = 'hostname'.execute().text.trim() - params.hostnames.each { prof, hnames -> - hnames.each { hname -> - if (hostname.contains(hname) && !workflow.profile.contains(prof)) { - log.error "${c_red}====================================================${c_reset}\n" + - " ${c_red}WARNING!${c_reset} You are running with `-profile $workflow.profile`\n" + - " but your machine hostname is ${c_white}'$hostname'${c_reset}\n" + - " ${c_yellow_bold}It's highly recommended that you use `-profile $prof${c_reset}`\n" + - "${c_red}====================================================${c_reset}\n" - } - } - } - } -} +======================================================================================== + THE END +======================================================================================== +*/ diff --git a/modules.json b/modules.json new file mode 100644 index 00000000..91d5404c --- /dev/null +++ b/modules.json @@ -0,0 +1,14 @@ +{ + "name": "nf-core/cutandrun", + "homePage": "https://github.com/nf-core/cutandrun", + "repos": { + "nf-core/modules": { + "fastqc": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "multiqc": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + } + } + } +} diff --git a/modules/local/functions.nf b/modules/local/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/local/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf new file mode 100644 index 00000000..6e7a0c23 --- /dev/null +++ b/modules/local/get_software_versions.nf @@ -0,0 +1,33 @@ +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +process GET_SOFTWARE_VERSIONS { + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + cache false + + input: + path versions + + output: + path "software_versions.tsv" , emit: tsv + path 'software_versions_mqc.yaml', emit: yaml + + script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ + """ + echo $workflow.manifest.version > pipeline.version.txt + echo $workflow.nextflow.version > nextflow.version.txt + scrape_software_versions.py &> software_versions_mqc.yaml + """ +} diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf new file mode 100644 index 00000000..71853fb4 --- /dev/null +++ b/modules/local/samplesheet_check.nf @@ -0,0 +1,31 @@ +// Import generic module functions +include { saveFiles } from './functions' + +params.options = [:] + +process SAMPLESHEET_CHECK { + tag "$samplesheet" + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/python:3.8.3" + } else { + container "quay.io/biocontainers/python:3.8.3" + } + + input: + path samplesheet + + output: + path '*.csv' + + script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ + """ + check_samplesheet.py \\ + $samplesheet \\ + samplesheet.valid.csv + """ +} diff --git a/modules/nf-core/modules/fastqc/functions.nf b/modules/nf-core/modules/fastqc/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/fastqc/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf new file mode 100644 index 00000000..39c327b2 --- /dev/null +++ b/modules/nf-core/modules/fastqc/main.nf @@ -0,0 +1,47 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process FASTQC { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::fastqc=0.11.9" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0" + } else { + container "quay.io/biocontainers/fastqc:0.11.9--0" + } + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.html"), emit: html + tuple val(meta), path("*.zip") , emit: zip + path "*.version.txt" , emit: version + + script: + // Add soft-links to original FastQs for consistent naming in pipeline + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + if (meta.single_end) { + """ + [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz + fastqc $options.args --threads $task.cpus ${prefix}.fastq.gz + fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + """ + } else { + """ + [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz + fastqc $options.args --threads $task.cpus ${prefix}_1.fastq.gz ${prefix}_2.fastq.gz + fastqc --version | sed -e "s/FastQC v//g" > ${software}.version.txt + """ + } +} diff --git a/modules/nf-core/modules/fastqc/meta.yml b/modules/nf-core/modules/fastqc/meta.yml new file mode 100644 index 00000000..8eb9953d --- /dev/null +++ b/modules/nf-core/modules/fastqc/meta.yml @@ -0,0 +1,51 @@ +name: fastqc +description: Run FastQC on sequenced reads +keywords: + - quality control + - qc + - adapters + - fastq +tools: + - fastqc: + description: | + FastQC gives general quality metrics about your reads. + It provides information about the quality score distribution + across your reads, the per base sequence content (%A/C/G/T). + You get information about adapter contamination and other + overrepresented sequences. + homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/ + documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/ +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - reads: + type: file + description: | + List of input FastQ files of size 1 and 2 for single-end and paired-end data, + respectively. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - html: + type: file + description: FastQC report + pattern: "*_{fastqc.html}" + - zip: + type: file + description: FastQC report archive + pattern: "*_{fastqc.zip}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@drpatelh" + - "@grst" + - "@ewels" + - "@FelixKrueger" diff --git a/modules/nf-core/modules/multiqc/functions.nf b/modules/nf-core/modules/multiqc/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/nf-core/modules/multiqc/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/multiqc/main.nf b/modules/nf-core/modules/multiqc/main.nf new file mode 100644 index 00000000..da780800 --- /dev/null +++ b/modules/nf-core/modules/multiqc/main.nf @@ -0,0 +1,35 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process MULTIQC { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:[:], publish_by_meta:[]) } + + conda (params.enable_conda ? "bioconda::multiqc=1.10.1" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/multiqc:1.10.1--py_0" + } else { + container "quay.io/biocontainers/multiqc:1.10.1--py_0" + } + + input: + path multiqc_files + + output: + path "*multiqc_report.html", emit: report + path "*_data" , emit: data + path "*_plots" , optional:true, emit: plots + path "*.version.txt" , emit: version + + script: + def software = getSoftwareName(task.process) + """ + multiqc -f $options.args . + multiqc --version | sed -e "s/multiqc, version //g" > ${software}.version.txt + """ +} diff --git a/modules/nf-core/modules/multiqc/meta.yml b/modules/nf-core/modules/multiqc/meta.yml new file mode 100644 index 00000000..532a8bb1 --- /dev/null +++ b/modules/nf-core/modules/multiqc/meta.yml @@ -0,0 +1,39 @@ +name: MultiQC +description: Aggregate results from bioinformatics analyses across many samples into a single report +keywords: + - QC + - bioinformatics tools + - Beautiful stand-alone HTML report +tools: + - multiqc: + description: | + MultiQC searches a given directory for analysis logs and compiles a HTML report. + It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. + homepage: https://multiqc.info/ + documentation: https://multiqc.info/docs/ +input: + - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC +output: + - report: + type: file + description: MultiQC report file + pattern: "multiqc_report.html" + - data: + type: dir + description: MultiQC data dir + pattern: "multiqc_data" + - plots: + type: file + description: Plots created by MultiQC + pattern: "*_data" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" +authors: + - "@abhi18av" + - "@bunop" + - "@drpatelh" diff --git a/nextflow.config b/nextflow.config index fc8b0e2e..77c6b3b3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,130 +1,136 @@ /* - * ------------------------------------------------- - * nf-core/cutandrun Nextflow config file - * ------------------------------------------------- - * Default config options for all environments. - */ +======================================================================================== + nf-core/cutandrun Nextflow config file +======================================================================================== + Default config options for all compute environments +---------------------------------------------------------------------------------------- +*/ // Global default params, used in configs params { - // Workflow flags - // TODO nf-core: Specify your pipeline's command line flags - genome = false - input = null - input_paths = null - single_end = false - outdir = './results' - publish_dir_mode = 'copy' - - // Boilerplate options - multiqc_config = false - email = false - email_on_fail = false - max_multiqc_email_size = 25.MB - plaintext_email = false - monochrome_logs = false - help = false - igenomes_base = 's3://ngi-igenomes/igenomes' - tracedir = "${params.outdir}/pipeline_info" - igenomes_ignore = false - 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 = false - config_profile_contact = false - config_profile_url = false - validate_params = true - show_hidden_params = false - schema_ignore_params = 'genomes,input_paths' - - // Defaults only, expecting to be overwritten - max_memory = 128.GB - max_cpus = 16 - max_time = 240.h + // TODO nf-core: Specify your pipeline's command line flags + // Input options + input = null -} + // References + genome = null + igenomes_base = 's3://ngi-igenomes/igenomes' + igenomes_ignore = false + + // MultiQC options + multiqc_config = null + multiqc_title = null + max_multiqc_email_size = '25.MB' + + // Boilerplate options + outdir = './results' + tracedir = "${params.outdir}/pipeline_info" + publish_dir_mode = 'copy' + email = null + email_on_fail = null + plaintext_email = false + monochrome_logs = false + help = false + validate_params = true + show_hidden_params = false + schema_ignore_params = 'genomes,modules' + enable_conda = false + singularity_pull_docker_container = false -// Container slug. Stable releases should specify release tag! -// Developmental code should specify :dev -process.container = 'nfcore/cutandrun:dev' + // 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 = '128.GB' + max_cpus = 16 + max_time = '240.h' + +} // 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" + 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.enabled = false - 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.enabled = 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' } + System.err.println("WARNING: Could not load nf-core/config profiles: ${params.custom_config_base}/nfcore_custom.config") } // Load igenomes.config if required if (!params.igenomes_ignore) { - includeConfig 'conf/igenomes.config' + includeConfig 'conf/igenomes.config' +} else { + params.genomes = [:] +} + +profiles { + debug { process.beforeScript = 'echo $HOSTNAME' } + 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" + PYTHONNOUSERSITE = 1 + R_PROFILE_USER = "/.Rprofile" + R_ENVIRON_USER = "/.Renviron" } // Capture exit codes from upstream processes when piping @@ -132,61 +138,61 @@ 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.tracedir}/execution_timeline_${trace_timestamp}.html" + enabled = true + file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" } report { - enabled = true - file = "${params.tracedir}/execution_report_${trace_timestamp}.html" + enabled = true + file = "${params.tracedir}/execution_report_${trace_timestamp}.html" } trace { - enabled = true - file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" + enabled = true + file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" } dag { - enabled = true - file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.svg" + enabled = true + file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.svg" } manifest { - name = 'nf-core/cutandrun' - author = 'Chris Cheshire and Charlotte West' - homePage = 'https://github.com/nf-core/cutandrun' - description = 'Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.' - mainScript = 'main.nf' - nextflowVersion = '>=20.04.0' - version = '1.0dev' + name = 'nf-core/cutandrun' + author = 'Chris Cheshire and Charlotte West' + homePage = 'https://github.com/nf-core/cutandrun' + description = 'Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.' + mainScript = 'main.nf' + nextflowVersion = '!>=21.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 + 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 + } } - } } diff --git a/nextflow_schema.json b/nextflow_schema.json index 5129d4d5..401a9783 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -16,19 +16,17 @@ "properties": { "input": { "type": "string", - "fa_icon": "fas fa-dna", - "description": "Input FastQ files.", - "help_text": "Use this to specify the location of your input FastQ files. For example:\n\n```bash\n--input 'path/to/data/sample_*_{1,2}.fastq'\n```\n\nPlease note the following requirements:\n\n1. The path must be enclosed in quotes\n2. The path must have at least one `*` wildcard character\n3. When using the pipeline with paired end data, the path must use `{1,2}` notation to specify read pairs.\n\nIf left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz`" - }, - "single_end": { - "type": "boolean", - "description": "Specifies that the input is single-end reads.", - "fa_icon": "fas fa-align-center", - "help_text": "By default, the pipeline expects paired-end data. If you have single-end data, you need to specify `--single_end` on the command line when you launch the pipeline. A normal glob pattern, enclosed in quotation marks, can then be used for `--input`. For example:\n\n```bash\n--single_end --input '*.fastq'\n```\n\nIt is not possible to run a mixture of single-end and paired-end files in one run." + "format": "file-path", + "mimetype": "text/csv", + "pattern": "\\.csv$", + "schema": "assets/schema_input.json", + "description": "Path to comma-separated file containing information about the samples in the experiment.", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/cutandrun/usage#samplesheet-input).", + "fa_icon": "fas fa-file-csv" }, "outdir": { "type": "string", - "description": "The output directory where the results will be saved.", + "description": "Path to the output directory where the results will be saved.", "default": "./results", "fa_icon": "fas fa-folder-open" }, @@ -38,6 +36,11 @@ "fa_icon": "fas fa-envelope", "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + }, + "multiqc_title": { + "type": "string", + "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", + "fa_icon": "fas fa-file-signature" } } }, @@ -45,22 +48,26 @@ "title": "Reference genome options", "type": "object", "fa_icon": "fas fa-dna", - "description": "Options for the reference genome indices used to align reads.", + "description": "Reference genome related files and options required for the workflow.", "properties": { "genome": { "type": "string", "description": "Name of iGenomes reference.", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`.\n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." }, "fasta": { "type": "string", - "fa_icon": "fas fa-font", + "format": "file-path", + "mimetype": "text/plain", + "pattern": "\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", - "help_text": "If you have no genome reference available, the pipeline can build one using a FASTA file. This requires additional time and resources, so it's better to use a pre-build index if possible." + "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", + "fa_icon": "far fa-file-code" }, "igenomes_base": { "type": "string", + "format": "directory-path", "description": "Directory / URL base for iGenomes references.", "default": "s3://ngi-igenomes/igenomes", "fa_icon": "fas fa-cloud-download-alt", @@ -75,91 +82,57 @@ } } }, - "generic_options": { - "title": "Generic options", + "institutional_config_options": { + "title": "Institutional config options", "type": "object", - "fa_icon": "fas fa-file-import", - "description": "Less common options for the pipeline, typically set in a config file.", - "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", + "fa_icon": "fas fa-university", + "description": "Parameters used to describe centralised config profiles. These should not be edited.", + "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "hidden": true, - "fa_icon": "fas fa-question-circle" - }, - "publish_dir_mode": { + "custom_config_version": { "type": "string", - "default": "copy", + "description": "Git commit id for Institutional configs.", + "default": "master", "hidden": true, - "description": "Method used to save pipeline results to output directory.", - "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", - "fa_icon": "fas fa-copy", - "enum": [ - "symlink", - "rellink", - "link", - "copy", - "copyNoFollow", - "move" - ] - }, - "validate_params": { - "type": "boolean", - "description": "Boolean whether to validate parameters against the schema at runtime", - "default": true, - "fa_icon": "fas fa-check-square", - "hidden": true + "fa_icon": "fas fa-users-cog" }, - "email_on_fail": { + "custom_config_base": { "type": "string", - "description": "Email address for completion summary, only when pipeline fails.", - "fa_icon": "fas fa-exclamation-triangle", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", + "description": "Base directory for Institutional configs.", + "default": "https://raw.githubusercontent.com/nf-core/configs/master", "hidden": true, - "help_text": "This works exactly as with `--email`, except emails are only sent if the workflow is not successful." + "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", + "fa_icon": "fas fa-users-cog" }, - "plaintext_email": { - "type": "boolean", - "description": "Send plain-text email instead of HTML.", - "fa_icon": "fas fa-remove-format", + "hostnames": { + "type": "string", + "description": "Institutional configs hostname.", "hidden": true, - "help_text": "Set to receive plain-text e-mails instead of HTML formatted." + "fa_icon": "fas fa-users-cog" }, - "max_multiqc_email_size": { + "config_profile_name": { "type": "string", - "description": "File size limit when attaching MultiQC reports to summary emails.", - "default": "25.MB", - "fa_icon": "fas fa-file-upload", + "description": "Institutional config name.", "hidden": true, - "help_text": "If file generated by pipeline exceeds the threshold, it will not be attached." + "fa_icon": "fas fa-users-cog" }, - "monochrome_logs": { - "type": "boolean", - "description": "Do not use coloured log outputs.", - "fa_icon": "fas fa-palette", + "config_profile_description": { + "type": "string", + "description": "Institutional config description.", "hidden": true, - "help_text": "Set to disable colourful command line output and live life in monochrome." + "fa_icon": "fas fa-users-cog" }, - "multiqc_config": { + "config_profile_contact": { "type": "string", - "description": "Custom config file to supply to MultiQC.", - "fa_icon": "fas fa-cog", - "hidden": true + "description": "Institutional config contact information.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "tracedir": { + "config_profile_url": { "type": "string", - "description": "Directory to keep pipeline Nextflow logs and reports.", - "default": "${params.outdir}/pipeline_info", - "fa_icon": "fas fa-cogs", - "hidden": true - }, - "show_hidden_params": { - "type": "boolean", - "fa_icon": "far fa-eye-slash", - "description": "Show all params when using `--help`", + "description": "Institutional config URL link.", "hidden": true, - "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." + "fa_icon": "fas fa-users-cog" } } }, @@ -172,7 +145,7 @@ "properties": { "max_cpus": { "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", + "description": "Maximum number of CPUs that can be requested for any single job.", "default": 16, "fa_icon": "fas fa-microchip", "hidden": true, @@ -198,58 +171,102 @@ } } }, - "institutional_config_options": { - "title": "Institutional config options", + "generic_options": { + "title": "Generic options", "type": "object", - "fa_icon": "fas fa-university", - "description": "Parameters used to describe centralised config profiles. These should not be edited.", - "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", + "fa_icon": "fas fa-file-import", + "description": "Less common options for the pipeline, typically set in a config file.", + "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", "properties": { - "custom_config_version": { + "help": { + "type": "boolean", + "description": "Display help text.", + "fa_icon": "fas fa-question-circle", + "hidden": true + }, + "publish_dir_mode": { "type": "string", - "description": "Git commit id for Institutional configs.", - "default": "master", - "hidden": true, - "fa_icon": "fas fa-users-cog", - "help_text": "Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default: `master`.\n\n```bash\n## Download and use config file with following git commit id\n--custom_config_version d52db660777c4bf36546ddb188ec530c3ada1b96\n```" + "default": "copy", + "description": "Method used to save pipeline results to output directory.", + "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", + "fa_icon": "fas fa-copy", + "enum": [ + "symlink", + "rellink", + "link", + "copy", + "copyNoFollow", + "move" + ], + "hidden": true }, - "custom_config_base": { + "email_on_fail": { "type": "string", - "description": "Base directory for Institutional configs.", - "default": "https://raw.githubusercontent.com/nf-core/configs/master", - "hidden": true, - "help_text": "If you're running offline, nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell nextflow where to find them with the `custom_config_base` option. For example:\n\n```bash\n## Download and unzip the config files\ncd /path/to/my/configs\nwget https://github.com/nf-core/configs/archive/master.zip\nunzip master.zip\n\n## Run the pipeline\ncd /path/to/my/data\nnextflow run /path/to/pipeline/ --custom_config_base /path/to/my/configs/configs-master/\n```\n\n> Note that the nf-core/tools helper package has a `download` command to download all required pipeline files + singularity containers + institutional configs in one go for you, to make this process easier.", - "fa_icon": "fas fa-users-cog" + "description": "Email address for completion summary, only when pipeline fails.", + "fa_icon": "fas fa-exclamation-triangle", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", + "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", + "hidden": true }, - "hostnames": { + "plaintext_email": { + "type": "boolean", + "description": "Send plain-text email instead of HTML.", + "fa_icon": "fas fa-remove-format", + "hidden": true + }, + "max_multiqc_email_size": { "type": "string", - "description": "Institutional configs hostname.", - "hidden": true, - "fa_icon": "fas fa-users-cog" + "description": "File size limit when attaching MultiQC reports to summary emails.", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", + "default": "25.MB", + "fa_icon": "fas fa-file-upload", + "hidden": true }, - "config_profile_name": { + "monochrome_logs": { + "type": "boolean", + "description": "Do not use coloured log outputs.", + "fa_icon": "fas fa-palette", + "hidden": true + }, + "multiqc_config": { "type": "string", - "description": "Institutional config name.", - "hidden": true, - "fa_icon": "fas fa-users-cog" + "description": "Custom config file to supply to MultiQC.", + "fa_icon": "fas fa-cog", + "hidden": true }, - "config_profile_description": { + "tracedir": { "type": "string", - "description": "Institutional config description.", + "description": "Directory to keep pipeline Nextflow logs and reports.", + "default": "${params.outdir}/pipeline_info", + "fa_icon": "fas fa-cogs", + "hidden": true + }, + "validate_params": { + "type": "boolean", + "description": "Boolean whether to validate parameters against the schema at runtime", + "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true + }, + "show_hidden_params": { + "type": "boolean", + "fa_icon": "far fa-eye-slash", + "description": "Show all params when using `--help`", "hidden": true, - "fa_icon": "fas fa-users-cog" + "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." }, - "config_profile_contact": { - "type": "string", - "description": "Institutional config contact information.", + "enable_conda": { + "type": "boolean", + "description": "Run this workflow with Conda. You can also use '-profile conda' instead of providing this parameter.", "hidden": true, - "fa_icon": "fas fa-users-cog" + "fa_icon": "fas fa-bacon" }, - "config_profile_url": { - "type": "string", - "description": "Institutional config URL link.", + "singularity_pull_docker_container": { + "type": "boolean", + "description": "Instead of directly downloading Singularity images for use with Singularity, force the workflow to pull and convert Docker containers instead.", "hidden": true, - "fa_icon": "fas fa-users-cog" + "fa_icon": "fas fa-toolbox", + "help_text": "This may be useful for example if you are unable to directly pull Singularity containers to run the pipeline due to http/https proxy issues." } } } @@ -262,13 +279,13 @@ "$ref": "#/definitions/reference_genome_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/definitions/institutional_config_options" }, { "$ref": "#/definitions/max_job_request_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/definitions/generic_options" } ] } diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf new file mode 100644 index 00000000..b664bc8c --- /dev/null +++ b/subworkflows/local/input_check.nf @@ -0,0 +1,42 @@ +// +// Check input samplesheet and get read channels +// + +params.options = [:] + +include { SAMPLESHEET_CHECK } from '../../modules/local/samplesheet_check' addParams( options: params.options ) + +workflow INPUT_CHECK { + take: + samplesheet // file: /path/to/samplesheet.csv + + main: + SAMPLESHEET_CHECK ( samplesheet ) + .splitCsv ( header:true, sep:',' ) + .map { create_fastq_channels(it) } + .set { reads } + + emit: + reads // channel: [ val(meta), [ reads ] ] +} + +// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] +def create_fastq_channels(LinkedHashMap row) { + def meta = [:] + meta.id = row.sample + meta.single_end = row.single_end.toBoolean() + + def array = [] + if (!file(row.fastq_1).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" + } + if (meta.single_end) { + array = [ meta, [ file(row.fastq_1) ] ] + } else { + if (!file(row.fastq_2).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" + } + array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] + } + return array +} diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf new file mode 100644 index 00000000..854d23ad --- /dev/null +++ b/workflows/cutandrun.nf @@ -0,0 +1,141 @@ +/* +======================================================================================== + VALIDATE INPUTS +======================================================================================== +*/ + +def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) + +// Validate input parameters +WorkflowCutandrun.initialise(params, log) + +// TODO nf-core: Add all file path parameters for the pipeline to the list below +// Check input path parameters to see if they exist +def checkPathParamList = [ params.input, params.multiqc_config, params.fasta ] +for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } + +// Check mandatory parameters +if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } + +/* +======================================================================================== + CONFIG FILES +======================================================================================== +*/ + +ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) +ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() + +/* +======================================================================================== + IMPORT LOCAL MODULES/SUBWORKFLOWS +======================================================================================== +*/ + +// Don't overwrite global params.modules, create a copy instead and use that within the main script. +def modules = params.modules.clone() + +// +// MODULE: Local to the pipeline +// +include { GET_SOFTWARE_VERSIONS } from '../modules/local/get_software_versions' addParams( options: [publish_files : ['tsv':'']] ) + +// +// SUBWORKFLOW: Consisting of a mix of local and nf-core/modules +// +include { INPUT_CHECK } from '../subworkflows/local/input_check' addParams( options: [:] ) + +/* +======================================================================================== + IMPORT NF-CORE MODULES/SUBWORKFLOWS +======================================================================================== +*/ + +def multiqc_options = modules['multiqc'] +multiqc_options.args += params.multiqc_title ? Utils.joinModuleArgs(["--title \"$params.multiqc_title\""]) : '' + +// +// MODULE: Installed directly from nf-core/modules +// +include { FASTQC } from '../modules/nf-core/modules/fastqc/main' addParams( options: modules['fastqc'] ) +include { MULTIQC } from '../modules/nf-core/modules/multiqc/main' addParams( options: multiqc_options ) + +/* +======================================================================================== + RUN MAIN WORKFLOW +======================================================================================== +*/ + +// Info required for completion email and summary +def multiqc_report = [] + +workflow CUTANDRUN { + + ch_software_versions = Channel.empty() + + // + // SUBWORKFLOW: Read in samplesheet, validate and stage input files + // + INPUT_CHECK ( + ch_input + ) + + // + // MODULE: Run FastQC + // + FASTQC ( + INPUT_CHECK.out.reads + ) + ch_software_versions = ch_software_versions.mix(FASTQC.out.version.first().ifEmpty(null)) + + // + // MODULE: Pipeline reporting + // + ch_software_versions + .map { it -> if (it) [ it.baseName, it ] } + .groupTuple() + .map { it[1][0] } + .flatten() + .collect() + .set { ch_software_versions } + + GET_SOFTWARE_VERSIONS ( + ch_software_versions.map { it }.collect() + ) + + // + // MODULE: MultiQC + // + workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) + ch_workflow_summary = Channel.value(workflow_summary) + + ch_multiqc_files = Channel.empty() + ch_multiqc_files = ch_multiqc_files.mix(Channel.from(ch_multiqc_config)) + ch_multiqc_files = ch_multiqc_files.mix(ch_multiqc_custom_config.collect().ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_files = ch_multiqc_files.mix(GET_SOFTWARE_VERSIONS.out.yaml.collect()) + ch_multiqc_files = ch_multiqc_files.mix(FASTQC.out.zip.collect{it[1]}.ifEmpty([])) + + MULTIQC ( + ch_multiqc_files.collect() + ) + multiqc_report = MULTIQC.out.report.toList() + ch_software_versions = ch_software_versions.mix(MULTIQC.out.version.ifEmpty(null)) +} + +/* +======================================================================================== + COMPLETION EMAIL AND SUMMARY +======================================================================================== +*/ + +workflow.onComplete { + NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) + NfcoreTemplate.summary(workflow, params, log) +} + +/* +======================================================================================== + THE END +======================================================================================== +*/ From 184ed7ce99c59be77a5fc0b47d58be68883470d7 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 13 Jul 2021 15:25:48 +0000 Subject: [PATCH 431/675] Template update for nf-core/tools version 2.0.1 --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 13b4fc81..fbde5cf8 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -127,7 +127,7 @@ jobs: GITHUB_COMMENTS_URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_PR_COMMIT: ${{ github.event.pull_request.head.sha }} - run: nf-core -l lint_log.txt lint ${GITHUB_WORKSPACE} --markdown lint_results.md + run: nf-core -l lint_log.txt lint --dir ${GITHUB_WORKSPACE} --markdown lint_results.md - name: Save PR number if: ${{ always() }} From a44dac9e07ece778cc60fe219ef0168a9b56f4fc Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 11:24:20 +0100 Subject: [PATCH 432/675] config updates --- conf/local.config | 1 - nextflow.config | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/local.config b/conf/local.config index 6639ce84..6fc2f59f 100644 --- a/conf/local.config +++ b/conf/local.config @@ -8,5 +8,4 @@ params { max_cpus = 4 max_memory = 8.GB - max_time = "24.h" } diff --git a/nextflow.config b/nextflow.config index f42c22a6..fce44575 100644 --- a/nextflow.config +++ b/nextflow.config @@ -158,11 +158,12 @@ profiles { podman.enabled = false shifter.enabled = false } - local { includeConfig "conf/local.config" } - test { includeConfig "conf/test.config" } + local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run + test { includeConfig "conf/test.config" } + test_no_igg { includeConfig "conf/test_no_igg.config" } test_full { includeConfig "conf/test_full.config" } test_hg38_chr7 { includeConfig "conf/test_hg38_chr7.config" } - test_no_igg { includeConfig "conf/test_no_igg.config" } + test_all_small { includeConfig "conf/igg_flow_tests/test_all_small.config" } test_one_exp_all_igg_small { includeConfig "conf/igg_flow_tests/test_one_exp_all_igg_small.config" } test_all_exp_one_igg_small { includeConfig "conf/igg_flow_tests/test_all_exp_one_igg_small.config" } From ebc01068221f5573512b1cd948ad24a7c058008b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 12:01:39 +0100 Subject: [PATCH 433/675] mass comment --- workflows/cutandrun.nf | 1153 ++++++++++++++++++++-------------------- 1 file changed, 580 insertions(+), 573 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 948cd9d6..91a5c81b 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -4,6 +4,7 @@ ======================================================================================== */ +// Create summary input parameters map for reporting def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) // Validate input parameters in specialised library @@ -45,18 +46,19 @@ ch_dt_frag_to_csv_awk = file("$projectDir/assets/awk/dt_frag_report_to_csv.awk", ======================================================================================== */ +// Load up and check multiqc base config and custom configs ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() // Header files for MultiQC -ch_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_header.txt", checkIfExists: true) -ch_top_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_header.txt", checkIfExists: true) -ch_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_group_header.txt", checkIfExists: true) -ch_top_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_group_header.txt", checkIfExists: true) -ch_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_diagnostic_header.txt", checkIfExists: true) -ch_top_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_diagnostic_header.txt", checkIfExists: true) -ch_clustering_header_multiqc = file("$projectDir/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) -ch_frag_len_header_multiqc = file("$projectDir/assets/multiqc/frag_len_header.txt", checkIfExists: true) +// ch_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_header.txt", checkIfExists: true) +// ch_top_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_header.txt", checkIfExists: true) +// ch_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_group_header.txt", checkIfExists: true) +// ch_top_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_group_header.txt", checkIfExists: true) +// ch_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_diagnostic_header.txt", checkIfExists: true) +// ch_top_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_diagnostic_header.txt", checkIfExists: true) +// ch_clustering_header_multiqc = file("$projectDir/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) +// ch_frag_len_header_multiqc = file("$projectDir/assets/multiqc/frag_len_header.txt", checkIfExists: true) /* ======================================================================================== INIALISE PARAMETERS AND OPTIONS @@ -72,99 +74,99 @@ def spikein_genome_options = params.save_reference ? [publish_dir: "genom def bowtie2_index_options = params.save_reference ? [publish_dir: "genome/target/index"] : [publish_files: false] def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genome/spikein/index"] : [publish_files: false] -// QC -def cat_fastq_options = modules["cat_fastq"] -if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } - -def multiqc_options = modules["multiqc"] -multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" - -// Trimming -def trimgalore_options = modules["trimgalore"] -trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : "" -if (params.save_trimmed) { trimgalore_options.publish_files.put("fq.gz","") } - -// Alignment dedup and filtering -def prepareToolIndices = ["bowtie2"] -def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] -if (params.save_spikein_aligned) { - bowtie2_spikein_align_options.publish_dir = "aligner/${params.aligner}/spikein" - bowtie2_spikein_align_options.publish_files = ["bam":""] -} -def samtools_spikein_sort_options = modules["samtools_spikein_sort"] -if (params.save_spikein_aligned) { - samtools_spikein_sort_options.publish_dir = "aligner/${params.aligner}/spikein" - samtools_spikein_sort_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] -} -def dedup_control_only = true -if(params.dedup_target_reads) { dedup_control_only = false } - -def bowtie2_align_options = null -def samtools_sort_options = null -def samtools_view_options = null -def samtools_qfilter_options = null -def picard_markduplicates_options = null -def picard_markduplicates_samtools_options = null -def picard_deduplicates_options = null -def picard_deduplicates_samtools_options = null - -// if (!params.skip_markduplicates && params.skip_removeduplicates) { -if (!params.skip_markduplicates) { - picard_markduplicates_options = modules["picard_markduplicates_final"] - picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_final"] - if (params.publish_align_intermed) { - bowtie2_align_options = modules["bowtie2_align_intermed"] - samtools_sort_options = modules["samtools_sort_intermed"] - samtools_view_options = modules["samtools_view_qfilter_intermed"] - samtools_qfilter_options = modules["samtools_qfilter_intermed"] - picard_deduplicates_options = modules["picard_dedup_intermed"] - picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] - } else { - bowtie2_align_options = modules["bowtie2_align"] - samtools_sort_options = modules["samtools_sort"] - samtools_view_options = modules["samtools_view_qfilter"] - samtools_qfilter_options = modules["samtools_qfilter"] - picard_deduplicates_options = modules["picard_dedup"] - picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] - } -} else { - samtools_view_options = modules["samtools_view_qfilter_final"] - samtools_qfilter_options = modules["samtools_qfilter_final"] - if (params.publish_align_intermed ) { - bowtie2_align_options = modules["bowtie2_align_intermed"] - samtools_sort_options = modules["samtools_sort_intermed"] - picard_markduplicates_options = modules["picard_markduplicates_intermed"] - picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_intermed"] - picard_deduplicates_options = modules["picard_dedup_intermed"] - picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] - } else { - bowtie2_align_options = modules["bowtie2_align"] - samtools_sort_options = modules["samtools_sort"] - picard_markduplicates_options = modules["picard_markduplicates"] - picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools"] - picard_deduplicates_options = modules["picard_dedup"] - picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] - } -} - -if (params.save_unaligned) { bowtie2_align_options.publish_files.put(".gz","") } -if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put(".gz","") } - -if (params.minimum_alignment_q_score > 0) { - samtools_view_options.args = "-b -q " + params.minimum_alignment_q_score -} - -// Meta annotation options -def awk_bt2_options = modules["awk_bt2"] -def awk_bt2_spikein_options = modules["awk_bt2_spikein"] -def awk_dedup_options = modules["awk_dedup"] -def awk_dt_frag_options = modules["awk_dt_frag"] - -// AWK options -def awk_threshold = modules["awk_threshold"] -awk_threshold.command = "' \$10 >= " + params.replicate_threshold.toString() + " {print \$0}'" -def awk_all_threshold = modules["awk_threshold"] -awk_threshold.command = "' \$10 >= 1 {print \$0}'" +// // QC +// def cat_fastq_options = modules["cat_fastq"] +// if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } + +// def multiqc_options = modules["multiqc"] +// multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" + +// // Trimming +// def trimgalore_options = modules["trimgalore"] +// trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : "" +// if (params.save_trimmed) { trimgalore_options.publish_files.put("fq.gz","") } + +// // Alignment dedup and filtering +// def prepareToolIndices = ["bowtie2"] +// def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] +// if (params.save_spikein_aligned) { +// bowtie2_spikein_align_options.publish_dir = "aligner/${params.aligner}/spikein" +// bowtie2_spikein_align_options.publish_files = ["bam":""] +// } +// def samtools_spikein_sort_options = modules["samtools_spikein_sort"] +// if (params.save_spikein_aligned) { +// samtools_spikein_sort_options.publish_dir = "aligner/${params.aligner}/spikein" +// samtools_spikein_sort_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +// } +// def dedup_control_only = true +// if(params.dedup_target_reads) { dedup_control_only = false } + +// def bowtie2_align_options = null +// def samtools_sort_options = null +// def samtools_view_options = null +// def samtools_qfilter_options = null +// def picard_markduplicates_options = null +// def picard_markduplicates_samtools_options = null +// def picard_deduplicates_options = null +// def picard_deduplicates_samtools_options = null + +// // if (!params.skip_markduplicates && params.skip_removeduplicates) { +// if (!params.skip_markduplicates) { +// picard_markduplicates_options = modules["picard_markduplicates_final"] +// picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_final"] +// if (params.publish_align_intermed) { +// bowtie2_align_options = modules["bowtie2_align_intermed"] +// samtools_sort_options = modules["samtools_sort_intermed"] +// samtools_view_options = modules["samtools_view_qfilter_intermed"] +// samtools_qfilter_options = modules["samtools_qfilter_intermed"] +// picard_deduplicates_options = modules["picard_dedup_intermed"] +// picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] +// } else { +// bowtie2_align_options = modules["bowtie2_align"] +// samtools_sort_options = modules["samtools_sort"] +// samtools_view_options = modules["samtools_view_qfilter"] +// samtools_qfilter_options = modules["samtools_qfilter"] +// picard_deduplicates_options = modules["picard_dedup"] +// picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] +// } +// } else { +// samtools_view_options = modules["samtools_view_qfilter_final"] +// samtools_qfilter_options = modules["samtools_qfilter_final"] +// if (params.publish_align_intermed ) { +// bowtie2_align_options = modules["bowtie2_align_intermed"] +// samtools_sort_options = modules["samtools_sort_intermed"] +// picard_markduplicates_options = modules["picard_markduplicates_intermed"] +// picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_intermed"] +// picard_deduplicates_options = modules["picard_dedup_intermed"] +// picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] +// } else { +// bowtie2_align_options = modules["bowtie2_align"] +// samtools_sort_options = modules["samtools_sort"] +// picard_markduplicates_options = modules["picard_markduplicates"] +// picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools"] +// picard_deduplicates_options = modules["picard_dedup"] +// picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] +// } +// } + +// if (params.save_unaligned) { bowtie2_align_options.publish_files.put(".gz","") } +// if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put(".gz","") } + +// if (params.minimum_alignment_q_score > 0) { +// samtools_view_options.args = "-b -q " + params.minimum_alignment_q_score +// } + +// // Meta annotation options +// def awk_bt2_options = modules["awk_bt2"] +// def awk_bt2_spikein_options = modules["awk_bt2_spikein"] +// def awk_dedup_options = modules["awk_dedup"] +// def awk_dt_frag_options = modules["awk_dt_frag"] + +// // AWK options +// def awk_threshold = modules["awk_threshold"] +// awk_threshold.command = "' \$10 >= " + params.replicate_threshold.toString() + " {print \$0}'" +// def awk_all_threshold = modules["awk_threshold"] +// awk_threshold.command = "' \$10 >= 1 {print \$0}'" /* ======================================================================================== @@ -175,35 +177,35 @@ awk_threshold.command = "' \$10 >= 1 {print \$0}'" /* * MODULES */ -include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) -include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) -include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) -include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) -include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) -include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) -include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) -include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) -include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) -include { DESEQ2_DIFF } from "../modules/local/deseq2_diff" addParams( options: modules["deseq2"], multiqc_label: "deseq2") -include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) -include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) +// include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +// include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) +// include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) +// include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) +// include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) +// include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) +// include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +// include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) +// include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) +// include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) +// include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) +// include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) +// include { DESEQ2_DIFF } from "../modules/local/deseq2_diff" addParams( options: modules["deseq2"], multiqc_label: "deseq2") +// include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +// include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) -include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) -include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "",meta_prefix: "dedup_", script_mode: false ) -include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, meta_suffix: "", meta_prefix: "", script_mode: true ) -include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"]) -include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"]) +// include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) +// include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options ) +// include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) +// include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) +// include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) +// include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) +// include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "",meta_prefix: "dedup_", script_mode: false ) +// include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, meta_suffix: "", meta_prefix: "", script_mode: true ) +// include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"]) +// include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"]) /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -213,20 +215,20 @@ include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflow /* * MODULES */ -include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) -include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) -include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) +// include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) +// include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) +// include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) +// include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) +// include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) +// include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) +// include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { FASTQC_TRIMGALORE } from "../subworkflows/nf-core/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) -include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) +// include { FASTQC_TRIMGALORE } from "../subworkflows/nf-core/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) +// include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +// include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) /* ======================================================================================== @@ -242,98 +244,98 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Uncompress and prepare reference genome files */ - PREPARE_GENOME ( - prepareToolIndices - ) - ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.samtools_version.ifEmpty(null)) + // PREPARE_GENOME ( + // prepareToolIndices + // ) + // ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) + // ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.samtools_version.ifEmpty(null)) /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ - INPUT_CHECK ( - ch_input - ) - .map { - meta, fastq -> - meta.id = meta.id.split("_")[0..-2].join("_") - [ meta, fastq ] } - .groupTuple(by: [0]) - .branch { - meta, fastq -> - single : fastq.size() == 1 - return [ meta, fastq.flatten() ] - multiple: fastq.size() > 1 - return [ meta, fastq.flatten() ] - } - .set { ch_fastq } + // INPUT_CHECK ( + // ch_input + // ) + // .map { + // meta, fastq -> + // meta.id = meta.id.split("_")[0..-2].join("_") + // [ meta, fastq ] } + // .groupTuple(by: [0]) + // .branch { + // meta, fastq -> + // single : fastq.size() == 1 + // return [ meta, fastq.flatten() ] + // multiple: fastq.size() > 1 + // return [ meta, fastq.flatten() ] + // } + // .set { ch_fastq } /* * MODULE: Concatenate FastQ files from same sample if required */ - CAT_FASTQ ( - ch_fastq.multiple - ) - .mix(ch_fastq.single) - .set { ch_cat_fastq } + // CAT_FASTQ ( + // ch_fastq.multiple + // ) + // .mix(ch_fastq.single) + // .set { ch_cat_fastq } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [READS]] //ch_cat_fastq | view /* * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC */ - FASTQC_TRIMGALORE ( - ch_cat_fastq, - params.skip_fastqc || params.skip_qc, - params.skip_trimming - ) - ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads - ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + // FASTQC_TRIMGALORE ( + // ch_cat_fastq, + // params.skip_fastqc || params.skip_qc, + // params.skip_trimming + // ) + // ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads + // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) + // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [READS]] //FASTQC_TRIMGALORE.out.reads | view /* * SUBWORKFLOW: Alignment to target and spikein genome using botwtie2 */ - ch_orig_bam = Channel.empty() - ch_orig_spikein_bam = Channel.empty() - ch_bowtie2_log = Channel.empty() - ch_bowtie2_spikein_log = Channel.empty() - ch_samtools_bam = Channel.empty() - ch_samtools_bai = Channel.empty() - ch_samtools_stats = Channel.empty() - ch_samtools_flagstat = Channel.empty() - ch_samtools_idxstats = Channel.empty() - ch_samtools_spikein_bam = Channel.empty() - ch_samtools_spikein_bai = Channel.empty() - ch_samtools_spikein_stats = Channel.empty() - ch_samtools_spikein_flagstat = Channel.empty() - ch_samtools_spikein_idxstats = Channel.empty() - if (params.aligner == "bowtie2") { - ALIGN_BOWTIE2 ( - ch_trimmed_reads, - PREPARE_GENOME.out.bowtie2_index, - PREPARE_GENOME.out.bowtie2_spikein_index - ) - ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) - ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam - ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam - ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log - ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log - - ch_samtools_bam = ALIGN_BOWTIE2.out.bam - ch_samtools_bai = ALIGN_BOWTIE2.out.bai - ch_samtools_stats = ALIGN_BOWTIE2.out.stats - ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat - ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats - - ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam - ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai - ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats - ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat - ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats - } + // ch_orig_bam = Channel.empty() + // ch_orig_spikein_bam = Channel.empty() + // ch_bowtie2_log = Channel.empty() + // ch_bowtie2_spikein_log = Channel.empty() + // ch_samtools_bam = Channel.empty() + // ch_samtools_bai = Channel.empty() + // ch_samtools_stats = Channel.empty() + // ch_samtools_flagstat = Channel.empty() + // ch_samtools_idxstats = Channel.empty() + // ch_samtools_spikein_bam = Channel.empty() + // ch_samtools_spikein_bai = Channel.empty() + // ch_samtools_spikein_stats = Channel.empty() + // ch_samtools_spikein_flagstat = Channel.empty() + // ch_samtools_spikein_idxstats = Channel.empty() + // if (params.aligner == "bowtie2") { + // ALIGN_BOWTIE2 ( + // ch_trimmed_reads, + // PREPARE_GENOME.out.bowtie2_index, + // PREPARE_GENOME.out.bowtie2_spikein_index + // ) + // ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) + // ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam + // ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam + // ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log + // ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log + + // ch_samtools_bam = ALIGN_BOWTIE2.out.bam + // ch_samtools_bai = ALIGN_BOWTIE2.out.bai + // ch_samtools_stats = ALIGN_BOWTIE2.out.stats + // ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat + // ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats + + // ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam + // ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai + // ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats + // ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat + // ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats + // } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view @@ -341,53 +343,53 @@ workflow CUTANDRUN { * SUBWORKFLOW: Filter reads based on quality metrics * http://biofinysics.blogspot.com/2014/05/how-does-bowtie2-assign-mapq-scores.html */ - if (params.minimum_alignment_q_score > 0) { - SAMTOOLS_VIEW_SORT_STATS ( - ch_samtools_bam - ) - ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam - ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai - ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats - ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat - ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats - } + // if (params.minimum_alignment_q_score > 0) { + // SAMTOOLS_VIEW_SORT_STATS ( + // ch_samtools_bam + // ) + // ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam + // ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai + // ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats + // ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat + // ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats + // } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view /* * SUBWORKFLOW: Mark duplicates on all samples */ - ch_markduplicates_multiqc = Channel.empty() - if (!params.skip_markduplicates) { - MARK_DUPLICATES_PICARD ( - ch_samtools_bam - ) - ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam - ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai - ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats - ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat - ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats - ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics - ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) - } + // ch_markduplicates_multiqc = Channel.empty() + // if (!params.skip_markduplicates) { + // MARK_DUPLICATES_PICARD ( + // ch_samtools_bam + // ) + // ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam + // ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai + // ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats + // ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat + // ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats + // ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics + // ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) + // } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view /* * SUBWORKFLOW: Remove duplicates - default is on IgG controls only */ - ch_dedup_multiqc = Channel.empty() - if (!params.skip_markduplicates && !params.skip_removeduplicates) { - DEDUP_PICARD ( - ch_samtools_bam - ) - ch_samtools_bam = DEDUP_PICARD.out.bam - ch_samtools_bai = DEDUP_PICARD.out.bai - ch_samtools_stats = DEDUP_PICARD.out.stats - ch_samtools_flagstat = DEDUP_PICARD.out.flagstat - ch_samtools_idxstats = DEDUP_PICARD.out.idxstats - ch_dedup_multiqc = DEDUP_PICARD.out.metrics - } + // ch_dedup_multiqc = Channel.empty() + // if (!params.skip_markduplicates && !params.skip_removeduplicates) { + // DEDUP_PICARD ( + // ch_samtools_bam + // ) + // ch_samtools_bam = DEDUP_PICARD.out.bam + // ch_samtools_bai = DEDUP_PICARD.out.bai + // ch_samtools_stats = DEDUP_PICARD.out.stats + // ch_samtools_flagstat = DEDUP_PICARD.out.flagstat + // ch_samtools_idxstats = DEDUP_PICARD.out.idxstats + // ch_dedup_multiqc = DEDUP_PICARD.out.metrics + // } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view @@ -395,20 +397,20 @@ workflow CUTANDRUN { * SUBWORKFLOW: Annotate meta-data with aligner stats for target and spike-in * the meta-data is annotated additivley so we only need to track the final channel output */ - if (params.aligner == "bowtie2") { - ANNOTATE_BT2_META ( - ch_samtools_bam, - ch_bowtie2_log, - ch_bt2_to_csv_awk - ) - - ANNOTATE_BT2_SPIKEIN_META ( - ANNOTATE_BT2_META.out.output, - ch_bowtie2_spikein_log, - ch_bt2_to_csv_awk - ) - ch_samtools_bam = ANNOTATE_BT2_SPIKEIN_META.out.output - } + // if (params.aligner == "bowtie2") { + // ANNOTATE_BT2_META ( + // ch_samtools_bam, + // ch_bowtie2_log, + // ch_bt2_to_csv_awk + // ) + + // ANNOTATE_BT2_SPIKEIN_META ( + // ANNOTATE_BT2_META.out.output, + // ch_bowtie2_spikein_log, + // ch_bt2_to_csv_awk + // ) + // ch_samtools_bam = ANNOTATE_BT2_SPIKEIN_META.out.output + // } // META-DATA example state: //[[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -420,20 +422,20 @@ workflow CUTANDRUN { * CHANNEL: Calculate scale factor for each sample based on a constant devided by the number * of reads aligned to the spike-in genome. Optionally skipped. */ - if (!params.skip_scale) { - ch_samtools_bam - .map { row -> - def denominator = row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger() - [ row[0].id, params.normalisation_c / (denominator != 0 ? denominator : 1) ] - } - .set { ch_scale_factor } - } else { - ch_samtools_bam - .map { row -> - [ row[0].id, 1 ] - } - .set { ch_scale_factor } - } + // if (!params.skip_scale) { + // ch_samtools_bam + // .map { row -> + // def denominator = row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger() + // [ row[0].id, params.normalisation_c / (denominator != 0 ? denominator : 1) ] + // } + // .set { ch_scale_factor } + // } else { + // ch_samtools_bam + // .map { row -> + // [ row[0].id, 1 ] + // } + // .set { ch_scale_factor } + // } // EXAMPLE CHANNEL STRUCT: [id, scale_factor] //ch_scale_factor | view @@ -441,14 +443,14 @@ workflow CUTANDRUN { /* * CHANNEL: Create a channel with the scale factor as a seperate value */ - ch_samtools_bam - .map { row -> [row[0].id, row ].flatten()} - .join ( ch_scale_factor ) - .map { row -> row[1..(row.size() - 1)] } - .map { row -> - row[0].put("scale_factor", row[2]) - [ row[0], row[1], row[2] ] } - .set { ch_samtools_bam_scale } + // ch_samtools_bam + // .map { row -> [row[0].id, row ].flatten()} + // .join ( ch_scale_factor ) + // .map { row -> row[1..(row.size() - 1)] } + // .map { row -> + // row[0].put("scale_factor", row[2]) + // [ row[0], row[1], row[2] ] } + // .set { ch_samtools_bam_scale } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -458,10 +460,10 @@ workflow CUTANDRUN { /* * CHANNEL: Add the scale factor values to the main meta-data stream */ - ch_samtools_bam_scale - .map { row -> [ row[0], row[1] ] } - .set { ch_samtools_bam_sf } - ch_samtools_bam = ch_samtools_bam_sf + // ch_samtools_bam_scale + // .map { row -> [ row[0], row[1] ] } + // .set { ch_samtools_bam_sf } + // ch_samtools_bam = ch_samtools_bam_sf //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -475,19 +477,19 @@ workflow CUTANDRUN { * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp * - Only extract the fragment related columns using cut */ - CALCULATE_FRAGMENTS ( - ch_samtools_bam - ) - ch_software_versions = ch_software_versions.mix(CALCULATE_FRAGMENTS.out.bedtools_version.first().ifEmpty(null)) + // CALCULATE_FRAGMENTS ( + // ch_samtools_bam + // ) + // ch_software_versions = ch_software_versions.mix(CALCULATE_FRAGMENTS.out.bedtools_version.first().ifEmpty(null)) //EXAMPLE CHANNEL STRUCT: NO CHANGE //CALCULATE_FRAGMENTS.out.bed | view /* * MODULE: Convert bam files to bedgraph */ - BEDTOOLS_GENOMECOV_SCALE ( - ch_samtools_bam_scale - ) + // BEDTOOLS_GENOMECOV_SCALE ( + // ch_samtools_bam_scale + // ) //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -497,37 +499,37 @@ workflow CUTANDRUN { /* * MODULE: Clip off bedgraphs so none overlap beyond chromosome edge */ - UCSC_BEDCLIP ( - BEDTOOLS_GENOMECOV_SCALE.out.bedgraph, - PREPARE_GENOME.out.chrom_sizes - ) + // UCSC_BEDCLIP ( + // BEDTOOLS_GENOMECOV_SCALE.out.bedgraph, + // PREPARE_GENOME.out.chrom_sizes + // ) //EXAMPLE CHANNEL STRUCT: NO CHANGE //UCSC_BEDCLIP.out.bedgraph | view /* * MODULE: Convert bedgraph to bigwig */ - UCSC_BEDGRAPHTOBIGWIG ( - UCSC_BEDCLIP.out.bedgraph, - PREPARE_GENOME.out.chrom_sizes - ) - ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) + // UCSC_BEDGRAPHTOBIGWIG ( + // UCSC_BEDCLIP.out.bedgraph, + // PREPARE_GENOME.out.chrom_sizes + // ) + // ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // scale_factor:10000], BIGWIG] //UCSC_BEDGRAPHTOBIGWIG.out.bigwig | view - ch_seacr_bed = Channel.empty() + // ch_seacr_bed = Channel.empty() if(!params.skip_peakcalling) { /* * CHANNEL: Separate bedgraphs into target/control pairings for each replicate */ - BEDTOOLS_GENOMECOV_SCALE.out.bedgraph.branch { it -> - target: it[0].group != "igg" - control: it[0].group == "igg" - } - .set { ch_bedgraph_split } + // BEDTOOLS_GENOMECOV_SCALE.out.bedgraph.branch { it -> + // target: it[0].group != "igg" + // control: it[0].group == "igg" + // } + // .set { ch_bedgraph_split } //EXAMPLE CHANNEL STRUCT: NO CHANGE //ch_bedgraph_split.target | view //ch_bedgraph_split.control | view @@ -537,83 +539,83 @@ workflow CUTANDRUN { /* * CHANNEL: Collect experimental replicate numbers */ - ch_bedgraph_split.target - .combine( ch_bedgraph_split.control ) - .map { row -> [ row[0].replicate ] } - .collect() - .map { row -> [ 0, row ] } - .set { ch_experimental_reps } + // ch_bedgraph_split.target + // .combine( ch_bedgraph_split.control ) + // .map { row -> [ row[0].replicate ] } + // .collect() + // .map { row -> [ 0, row ] } + // .set { ch_experimental_reps } // ch_experimental_reps | view /* * CHANNEL: Collect IgG control replicate numbers */ - ch_bedgraph_split.target - .combine(ch_bedgraph_split.control) - .map { row -> [ row[2].replicate ] } - .collect() - .map { row -> [ 0, row ] } - .set { ch_control_reps } + // ch_bedgraph_split.target + // .combine(ch_bedgraph_split.control) + // .map { row -> [ row[2].replicate ] } + // .collect() + // .map { row -> [ 0, row ] } + // .set { ch_control_reps } // ch_control_reps | view /* * CHANNEL: Combine experimental and control replicate numbers, each nested separately in array */ - ch_control_reps - .combine( ch_experimental_reps, by: 0 ) - .map { row -> row[1..-1] } - .set{ ch_replicate_numbers } + // ch_control_reps + // .combine( ch_experimental_reps, by: 0 ) + // .map { row -> row[1..-1] } + // .set{ ch_replicate_numbers } // ch_replicate_numbers | view /* * CHANNEL: Create channel with elements of the following structure */ // Make channels [[exp_rep,igg_rep][meta],[experimental_bedgraph],[igg_bedgraph],[[igg_rep_number],[exp_rep_number]]] - ch_bedgraph_split.target - .combine( ch_bedgraph_split.control ) - .map { row -> [ [row[0].replicate, row[2].replicate], [row[0], row[1], row[3]] ] } - .combine( ch_replicate_numbers ) - .set { ch_exp_control_reps } + // ch_bedgraph_split.target + // .combine( ch_bedgraph_split.control ) + // .map { row -> [ [row[0].replicate, row[2].replicate], [row[0], row[1], row[3]] ] } + // .combine( ch_replicate_numbers ) + // .set { ch_exp_control_reps } // ch_exp_control_reps | view /* * CHANNEL: Emit relevant channel elements based on replicate numbers */ - ch_exp_control_reps - .map { row -> - def exp_reps = row.last() - def igg_reps = row[row.size() - 2] - def current_reps = row[0] - def unique_exp_reps = exp_reps.unique(false) - def unique_igg_reps = igg_reps.unique(false) - def exp_rep_freq = [0] * unique_exp_reps.size() - def output = row[1] - def final_output = [] - def all_same = false - def i_freq = 0 - - // check if exp rep numbers are occuring an equal number of times - for (i=0; i + // def exp_reps = row.last() + // def igg_reps = row[row.size() - 2] + // def current_reps = row[0] + // def unique_exp_reps = exp_reps.unique(false) + // def unique_igg_reps = igg_reps.unique(false) + // def exp_rep_freq = [0] * unique_exp_reps.size() + // def output = row[1] + // def final_output = [] + // def all_same = false + // def i_freq = 0 + + // // check if exp rep numbers are occuring an equal number of times + // for (i=0; i [ row[0].group, row[1] ] } - .groupTuple(by: [0]) - .map { row -> - new_meta = [:] - new_meta.put( "id", row[0] ) - [ new_meta, row[1].flatten() ] - } - .branch { it -> - single : it[1].size() == 1 - multiple: it[1].size() > 1 - } - .set { ch_seacr_bed_group } + // AWK_NAME_PEAK_BED.out.file + // .map { row -> [ row[0].group, row[1] ] } + // .groupTuple(by: [0]) + // .map { row -> + // new_meta = [:] + // new_meta.put( "id", row[0] ) + // [ new_meta, row[1].flatten() ] + // } + // .branch { it -> + // single : it[1].size() == 1 + // multiple: it[1].size() > 1 + // } + // .set { ch_seacr_bed_group } // ch_seacr_bed_group | view /* * SUBWORKFLOW: Construct group consensus peaks */ - CONSENSUS_PEAKS ( ch_seacr_bed_group.multiple ) + // CONSENSUS_PEAKS ( + // ch_seacr_bed_group.multiple + // ) /* * CHANNEL: Group all samples */ - AWK_NAME_PEAK_BED.out.file - .map { row -> [ 1, row[1] ] } - .groupTuple(by: [0]) - .map { row -> - new_meta = [:] - new_meta.put( "id", "all_peaks" ) - [ new_meta, row[1].flatten() ] - } - .branch { it -> - single : it[1].size() == 1 - multiple: it[1].size() > 1 - } - .set { ch_seacr_bed_all } + // AWK_NAME_PEAK_BED.out.file + // .map { row -> [ 1, row[1] ] } + // .groupTuple(by: [0]) + // .map { row -> + // new_meta = [:] + // new_meta.put( "id", "all_peaks" ) + // [ new_meta, row[1].flatten() ] + // } + // .branch { it -> + // single : it[1].size() == 1 + // multiple: it[1].size() > 1 + // } + // .set { ch_seacr_bed_all } /* * SUBWORKFLOW: Construct group consensus peaks */ - CONSENSUS_PEAKS_ALL ( ch_seacr_bed_all.multiple ) - + // CONSENSUS_PEAKS_ALL ( + // ch_seacr_bed_all.multiple + // ) } - if(!params.skip_igv) { - /* - * MODULE: Create igv session - */ - IGV_SESSION ( - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.gtf, - ch_seacr_bed.collect{it[1]}.ifEmpty([]), - UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) - ) - } + // if(!params.skip_igv) { + // /* + // * MODULE: Create igv session + // */ + // IGV_SESSION ( + // PREPARE_GENOME.out.fasta, + // PREPARE_GENOME.out.gtf, + // ch_seacr_bed.collect{it[1]}.ifEmpty([]), + // UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) + // ) + // } if(!params.skip_reporting && !params.skip_peakcalling) { /* * CHANNEL: Collect SEACR group names that are not igg for reporting */ - ch_seacr_bed - .map{ row -> row[0].group} - .unique() - .collect() - .set { ch_groups_no_igg } + // ch_seacr_bed + // .map{ row -> row[0].group} + // .unique() + // .collect() + // .set { ch_groups_no_igg } //ch_groups_no_igg | view /* * CHANNEL: Remove IgG from bigwig channel */ - UCSC_BEDGRAPHTOBIGWIG.out.bigwig - .filter { it[0].group != "igg" } - .set { ch_bigwig_no_igg } + // UCSC_BEDGRAPHTOBIGWIG.out.bigwig + // .filter { it[0].group != "igg" } + // .set { ch_bigwig_no_igg } //ch_bigwig_no_igg | view /* * CHANNEL: Remove IgG from bam channel */ - ch_samtools_bam - .filter { it[0].group != "igg" } - .set { ch_samtools_bam_no_igg } + // ch_samtools_bam + // .filter { it[0].group != "igg" } + // .set { ch_samtools_bam_no_igg } /* * MODULE: DESeq2 QC Analysis */ - ch_pca_multiqc = Channel.empty() - ch_top_pca_multiqc = Channel.empty() - ch_pca_group_multiqc = Channel.empty() - ch_top_pca_group_multiqc = Channel.empty() - ch_pca_diagnostic_multiqc = Channel.empty() - ch_top_pca_diagnostic_multiqc = Channel.empty() - ch_clustering_multiqc = Channel.empty() - if (!params.skip_deseq2) { - DESEQ2_DIFF ( - ch_groups_no_igg, - ch_seacr_bed.collect{it[1]}, - ch_samtools_bam_no_igg.collect{it[1]}, - ch_pca_header_multiqc, - ch_top_pca_header_multiqc, - ch_pca_group_header_multiqc, - ch_top_pca_group_header_multiqc, - ch_diagnostic_header_multiqc, - ch_top_diagnostic_header_multiqc, - ch_clustering_header_multiqc - ) - ch_pca_multiqc = DESEQ2_DIFF.out.pca_multiqc - ch_top_pca_multiqc = DESEQ2_DIFF.out.top_pca_multiqc - ch_pca_group_multiqc = DESEQ2_DIFF.out.pca_group_multiqc - ch_top_pca_group_multiqc = DESEQ2_DIFF.out.top_pca_group_multiqc - ch_pca_diagnostic_multiqc = DESEQ2_DIFF.out.pca_diagnostic_multiqc - ch_top_pca_diagnostic_multiqc = DESEQ2_DIFF.out.top_pca_diagnostic_multiqc - ch_clustering_multiqc = DESEQ2_DIFF.out.dists_multiqc - ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) - } - - /* - * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes - */ - if (params.gene_bed){ - DEEPTOOLS_COMPUTEMATRIX_GENE ( - ch_bigwig_no_igg, - PREPARE_GENOME.out.bed - ) - ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_GENE.out.version.first().ifEmpty(null)) - - /* - * MODULE: Calculate DeepTools heatmap - */ - DEEPTOOLS_PLOTHEATMAP_GENE ( - DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix - ) - } + // ch_pca_multiqc = Channel.empty() + // ch_top_pca_multiqc = Channel.empty() + // ch_pca_group_multiqc = Channel.empty() + // ch_top_pca_group_multiqc = Channel.empty() + // ch_pca_diagnostic_multiqc = Channel.empty() + // ch_top_pca_diagnostic_multiqc = Channel.empty() + // ch_clustering_multiqc = Channel.empty() + // if (!params.skip_deseq2) { + // DESEQ2_DIFF ( + // ch_groups_no_igg, + // ch_seacr_bed.collect{it[1]}, + // ch_samtools_bam_no_igg.collect{it[1]}, + // ch_pca_header_multiqc, + // ch_top_pca_header_multiqc, + // ch_pca_group_header_multiqc, + // ch_top_pca_group_header_multiqc, + // ch_diagnostic_header_multiqc, + // ch_top_diagnostic_header_multiqc, + // ch_clustering_header_multiqc + // ) + // ch_pca_multiqc = DESEQ2_DIFF.out.pca_multiqc + // ch_top_pca_multiqc = DESEQ2_DIFF.out.top_pca_multiqc + // ch_pca_group_multiqc = DESEQ2_DIFF.out.pca_group_multiqc + // ch_top_pca_group_multiqc = DESEQ2_DIFF.out.top_pca_group_multiqc + // ch_pca_diagnostic_multiqc = DESEQ2_DIFF.out.pca_diagnostic_multiqc + // ch_top_pca_diagnostic_multiqc = DESEQ2_DIFF.out.top_pca_diagnostic_multiqc + // ch_clustering_multiqc = DESEQ2_DIFF.out.dists_multiqc + // ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) + // } + + // if (params.gene_bed){ + // /* + // * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes + // */ + // DEEPTOOLS_COMPUTEMATRIX_GENE ( + // ch_bigwig_no_igg, + // PREPARE_GENOME.out.bed + // ) + // ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_GENE.out.version.first().ifEmpty(null)) + + // /* + // * MODULE: Calculate DeepTools heatmap + // */ + // DEEPTOOLS_PLOTHEATMAP_GENE ( + // DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix + // ) + // } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, @@ -806,9 +813,9 @@ workflow CUTANDRUN { /* * MODULE: Extract max signal from peak beds */ - AWK_EDIT_PEAK_BED ( - ch_seacr_bed - ) + // AWK_EDIT_PEAK_BED ( + // ch_seacr_bed + // ) //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -818,37 +825,37 @@ workflow CUTANDRUN { /* * CHANNEL: Structure output for join on id */ - AWK_EDIT_PEAK_BED.out.file - .map { row -> [row[0].id, row ].flatten()} - .set { ch_seacr_bed_id } - //ch_seacr_bed_id | view - - /* - * CHANNEL: Join beds and bigwigs on id - */ - ch_bigwig_no_igg - .map { row -> [row[0].id, row ].flatten()} - .join ( ch_seacr_bed_id ) - .set { ch_dt_peaks } - //ch_dt_peaks | view - - ch_dt_peaks - .map { row -> row[1,2] } - .set { ch_ordered_bigwig } - //ch_ordered_bigwig | view - - ch_dt_peaks - .map { row -> row[-1] } - .set { ch_ordered_seacr_max } - //ch_ordered_seacr_max | view + // AWK_EDIT_PEAK_BED.out.file + // .map { row -> [row[0].id, row ].flatten()} + // .set { ch_seacr_bed_id } + // //ch_seacr_bed_id | view + + // /* + // * CHANNEL: Join beds and bigwigs on id + // */ + // ch_bigwig_no_igg + // .map { row -> [row[0].id, row ].flatten()} + // .join ( ch_seacr_bed_id ) + // .set { ch_dt_peaks } + // //ch_dt_peaks | view + + // ch_dt_peaks + // .map { row -> row[1,2] } + // .set { ch_ordered_bigwig } + // //ch_ordered_bigwig | view + + // ch_dt_peaks + // .map { row -> row[-1] } + // .set { ch_ordered_seacr_max } + // //ch_ordered_seacr_max | view /* * MODULE: Compute DeepTools matrix used in heatmap plotting for Peaks */ - DEEPTOOLS_COMPUTEMATRIX_PEAKS ( - ch_ordered_bigwig, - ch_ordered_seacr_max - ) + // DEEPTOOLS_COMPUTEMATRIX_PEAKS ( + // ch_ordered_bigwig, + // ch_ordered_seacr_max + // ) //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -858,21 +865,21 @@ workflow CUTANDRUN { /* * MODULE: Calculate DeepTools heatmap */ - DEEPTOOLS_PLOTHEATMAP_PEAKS ( - DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix - ) + // DEEPTOOLS_PLOTHEATMAP_PEAKS ( + // DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix + // ) /* * SUBWORKFLOW: Annotate meta-data with duplication stats */ - if (!params.skip_markduplicates) { - ANNOTATE_DEDUP_META( - ch_samtools_bam, - ch_markduplicates_multiqc, - ch_dummy_file.collect() - ) - ch_samtools_bam = ANNOTATE_DEDUP_META.out.output - } + // if (!params.skip_markduplicates) { + // ANNOTATE_DEDUP_META( + // ch_samtools_bam, + // ch_markduplicates_multiqc, + // ch_dummy_file.collect() + // ) + // ch_samtools_bam = ANNOTATE_DEDUP_META.out.output + // } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -884,91 +891,91 @@ workflow CUTANDRUN { /* * MODULE: Bin the fragments into 500bp bins ready for downstream reporting */ - AWK_FRAG_BIN( - CALCULATE_FRAGMENTS.out.bed - ) + // AWK_FRAG_BIN( + // CALCULATE_FRAGMENTS.out.bed + // ) //AWK_FRAG_BIN.out.file | view /* * MODULE: Calculate fragment lengths */ - SAMTOOLS_CUSTOMVIEW ( - ch_samtools_bam, - ch_samtools_bai - ) + // SAMTOOLS_CUSTOMVIEW ( + // ch_samtools_bam, + // ch_samtools_bai + // ) //SAMTOOLS_CUSTOMVIEW.out.tsv | view /* * MODULE: Export meta-data to csv file */ - EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) - ) + // EXPORT_META ( + // ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) + // ) /* * MODULE: Generate python reporting using mixture of meta-data and direct file processing */ - ch_frag_len_multiqc = Channel.empty() - GENERATE_REPORTS( - EXPORT_META.out.csv, // meta-data report stats - SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments - AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments - ch_seacr_bed.collect{it[1]}, // peak beds - ch_samtools_bam.collect{it[1]}, // bam files sorted by mate pair ids - ch_frag_len_header_multiqc // multiqc config header for fragment length distribution plot - ) - ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc - ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) + // ch_frag_len_multiqc = Channel.empty() + // GENERATE_REPORTS( + // EXPORT_META.out.csv, // meta-data report stats + // SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments + // AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments + // ch_seacr_bed.collect{it[1]}, // peak beds + // ch_samtools_bam.collect{it[1]}, // bam files sorted by mate pair ids + // ch_frag_len_header_multiqc // multiqc config header for fragment length distribution plot + // ) + // ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc + // ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) } /* * MODULE: Collect software versions used in pipeline */ - ch_software_versions - .map { it -> if (it) [ it.baseName, it ] } - .groupTuple() - .map { it[1][0] } - .flatten() - .collect() - .set { ch_software_versions } + // ch_software_versions + // .map { it -> if (it) [ it.baseName, it ] } + // .groupTuple() + // .map { it[1][0] } + // .flatten() + // .collect() + // .set { ch_software_versions } - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() - ) + // GET_SOFTWARE_VERSIONS ( + // ch_software_versions.map { it }.collect() + // ) /* * MODULE: Multiqc */ - if (!params.skip_multiqc) { - workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) - ch_workflow_summary = Channel.value(workflow_summary) - - MULTIQC ( - ch_multiqc_config, - ch_multiqc_custom_config.collect().ifEmpty([]), - GET_SOFTWARE_VERSIONS.out.yaml.collect(), - ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml"), - FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), - FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), - FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), - ch_bowtie2_log.collect{it[1]}.ifEmpty([]), - ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), - ch_samtools_stats.collect{it[1]}.ifEmpty([]), - ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), - ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), - ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]), - ch_pca_multiqc.collect().ifEmpty([]), - ch_top_pca_multiqc.collect().ifEmpty([]), - ch_pca_group_multiqc.collect().ifEmpty([]), - ch_top_pca_group_multiqc.collect().ifEmpty([]), - ch_pca_diagnostic_multiqc.collect().ifEmpty([]), - ch_top_pca_diagnostic_multiqc.collect().ifEmpty([]), - ch_clustering_multiqc.collect().ifEmpty([]), - ch_frag_len_multiqc.collect().ifEmpty([]) - ) - multiqc_report = MULTIQC.out.report.toList() - } + // if (!params.skip_multiqc) { + // workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) + // ch_workflow_summary = Channel.value(workflow_summary) + + // MULTIQC ( + // ch_multiqc_config, + // ch_multiqc_custom_config.collect().ifEmpty([]), + // GET_SOFTWARE_VERSIONS.out.yaml.collect(), + // ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml"), + // FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), + // FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), + // FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), + // ch_bowtie2_log.collect{it[1]}.ifEmpty([]), + // ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), + // ch_samtools_stats.collect{it[1]}.ifEmpty([]), + // ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), + // ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), + // ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]), + // ch_pca_multiqc.collect().ifEmpty([]), + // ch_top_pca_multiqc.collect().ifEmpty([]), + // ch_pca_group_multiqc.collect().ifEmpty([]), + // ch_top_pca_group_multiqc.collect().ifEmpty([]), + // ch_pca_diagnostic_multiqc.collect().ifEmpty([]), + // ch_top_pca_diagnostic_multiqc.collect().ifEmpty([]), + // ch_clustering_multiqc.collect().ifEmpty([]), + // ch_frag_len_multiqc.collect().ifEmpty([]) + // ) + // multiqc_report = MULTIQC.out.report.toList() + // } } //////////////////////////////////////////////////// From d04106c94cec5b305515288b0ee67c52a29fc32c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 12:01:47 +0100 Subject: [PATCH 434/675] setup testing --- .gitignore | 1 - nextflow_schema.json | 2 +- tests/_template.yml | 47 +++++++++++++++++++++++++++ tests/test_verify_output_save_ref.yml | 7 ++++ 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 tests/_template.yml create mode 100644 tests/test_verify_output_save_ref.yml diff --git a/.gitignore b/.gitignore index 815cd078..54f38a93 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ work/ data/ results/ .DS_Store -tests/ testing/ testing* *.pyc diff --git a/nextflow_schema.json b/nextflow_schema.json index e116da48..dd8c9a63 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -72,7 +72,7 @@ "hidden": true }, "save_reference": { - "type": "string", + "type": "boolean", "description": "If generated by the pipeline save the aligner index in the results directory." }, "igenomes_ignore": { diff --git a/tests/_template.yml b/tests/_template.yml new file mode 100644 index 00000000..0e975705 --- /dev/null +++ b/tests/_template.yml @@ -0,0 +1,47 @@ +- name: moo file # The name of the workflow (required) + command: bash moo_workflow.sh # The command to execute the workflow (required) + files: # A list of files to check (optional) + - path: "moo.txt" # File path. (Required for each file) + contains: # A list of strings that should be in the file (optional) + - "moo" + must_not_contain: # A list of strings that should NOT be in the file (optional) + - "Cock a doodle doo" + md5sum: e583af1f8b00b53cda87ae9ead880224 # Md5sum of the file (optional) + +- name: simple echo # A second workflow. Notice the starting `-` which means + command: "echo moo" # that workflow items are in a list. You can add as much workflows as you want + files: + - path: "moo.txt" + should_exist: false # Whether a file should be there or not. (optional, if not given defaults to true) + stdout: # Options for testing stdout (optional) + contains: # List of strings which should be in stdout (optional) + - "moo" + must_not_contain: # List of strings that should NOT be in stout (optional) + - "Cock a doodle doo" + +- name: mission impossible # Also failing workflows can be tested + tags: # A list of tags that can be used to select which test + - should fail # is run with pytest using the `--tag` flag. + command: bash impossible.sh + exit_code: 2 # What the exit code should be (optional, if not given defaults to 0) + files: + - path: "fail.log" # Multiple files can be tested for each workflow + - path: "TomCruise.txt.gz" # Gzipped files can also be searched, provided their extension is '.gz' + contains: + - "starring" + stderr: # Options for testing stderr (optional) + contains: # A list of strings which should be in stderr (optional) + - "BSOD error, please contact the IT crowd" + must_not_contain: # A list of strings which should NOT be in stderr (optional) + - "Mission accomplished!" + +- name: regex tests + command: echo Hello, world + stdout: + contains_regex: # A list of regex patterns that should be in stdout (optional) + - 'Hello.*' # Note the single quotes,these are required for complex regexes + - 'Hello .*' # This will fail, since there is a comma after Hello, not a space + + must_not_contain_regex: # A list of regex patterns that should not be in stdout (optional) + - '^He.*' # This will fail, since the regex matches Hello, world + - '^Hello .*' # Complex regexes will break yaml if double quotes are used \ No newline at end of file diff --git a/tests/test_verify_output_save_ref.yml b/tests/test_verify_output_save_ref.yml new file mode 100644 index 00000000..83b5b816 --- /dev/null +++ b/tests/test_verify_output_save_ref.yml @@ -0,0 +1,7 @@ +- name: Verify Output -- Save References + command: nextflow run main.nf -profile docker,test --save_reference true + tags: + - verify/output/save_ref + - verify/output + files: + - path: results/crosslinks/sample1.bedgraph.gz From 3a725a9c06b015770e18b2dbbf86ee985f3ddb0b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 12:40:02 +0100 Subject: [PATCH 435/675] save ref implimented --- conf/modules.config | 12 ++--- nextflow.config | 22 +++++--- tests/test_verify_output_save_ref.yml | 18 +++++-- workflows/cutandrun.nf | 76 ++++++++++++++++----------- 4 files changed, 79 insertions(+), 49 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 83d0f889..bc0716eb 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -22,14 +22,8 @@ params { modules { - "bowtie2_index" { - publish_dir = "genome/index" - } - "bowtie2_spikein_index" { - publish_dir = "genome/spikein_index" - } "cat_fastq" { - publish_dir = "fastq" + publish_dir = "01_prealign/merged_fastq" } "fastqc" { args = "--quiet" @@ -38,6 +32,10 @@ params { args = "--fastqc" publish_files = ["txt":"", "html":"fastqc", "zip":"fastqc"] } + + + + "deseq2" { publish_dir = "deseq2_qc" } diff --git a/nextflow.config b/nextflow.config index fce44575..72aa16fc 100644 --- a/nextflow.config +++ b/nextflow.config @@ -5,24 +5,32 @@ * Default config options for all environments. */ +/* +*** Flow switching and result output *** +There are three keywords for controling program flow and results output: + - save_* - Specifies whether to save information to output + - skip_* - Specifies whether to skip a process of group of processes + - only_* - Only run the pipeline up to this point +*/ + // Global default params, used in configs params { - - // Input options - input = null - // References genome = null - save_reference = false spikein_genome = "K12-MG1655" + save_reference = false + only_genome = false + + // Input and merging + input = null + save_merged_fastq = false // QC skip_qc = false skip_fastqc = false skip_multiqc = false - // Sample handling - save_merged_fastq = false + // Trimming clip_r1 = 0 diff --git a/tests/test_verify_output_save_ref.yml b/tests/test_verify_output_save_ref.yml index 83b5b816..64f2073f 100644 --- a/tests/test_verify_output_save_ref.yml +++ b/tests/test_verify_output_save_ref.yml @@ -1,7 +1,15 @@ -- name: Verify Output -- Save References - command: nextflow run main.nf -profile docker,test --save_reference true +- name: test_verify_output_save_ref + command: nextflow run main.nf -profile docker,test --save_reference true --only_genome true tags: - - verify/output/save_ref - - verify/output + - verify_output + - verify_output/save_ref files: - - path: results/crosslinks/sample1.bedgraph.gz + - path: results/genome/target/hg38-chr20-genes.bed + - path: results/genome/target/hg38-chr20-genes.gtf + - path: results/genome/target/hg38-chr20.fa + - path: results/genome/target/hg38-chr20.fa.fai + - path: results/genome/target/hg38-chr20.fa.sizes + - path: results/genome/target/index/hg38-chr20-bowtie2/hg38-chr20.1.bt2 + - path: results/genome/spikein/e_coli_U00096_3.fa + - path: results/genome/spikein/e_coli_U00096_3.fa.sizes + - path: results/genome/spikein/index/e_coli_U00096_3/e_coli_U00096_3.1.bt2 \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 91a5c81b..16cf8a24 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -68,15 +68,18 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // Don"t overwrite global params.modules, create a copy instead and use that within the main script. def modules = params.modules.clone() +// Init +def prepare_tool_indices = ["bowtie2"] + // Genome def genome_options = params.save_reference ? [publish_dir: "genome/target"] : [publish_files: false] def spikein_genome_options = params.save_reference ? [publish_dir: "genome/spikein"] : [publish_files: false] def bowtie2_index_options = params.save_reference ? [publish_dir: "genome/target/index"] : [publish_files: false] def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genome/spikein/index"] : [publish_files: false] -// // QC -// def cat_fastq_options = modules["cat_fastq"] -// if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } +// Replicate merging +def cat_fastq_options = modules["cat_fastq"] +if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } // def multiqc_options = modules["multiqc"] // multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" @@ -87,7 +90,6 @@ def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genom // if (params.save_trimmed) { trimgalore_options.publish_files.put("fq.gz","") } // // Alignment dedup and filtering -// def prepareToolIndices = ["bowtie2"] // def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] // if (params.save_spikein_aligned) { // bowtie2_spikein_align_options.publish_dir = "aligner/${params.aligner}/spikein" @@ -168,6 +170,18 @@ def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genom // def awk_all_threshold = modules["awk_threshold"] // awk_threshold.command = "' \$10 >= 1 {print \$0}'" +/* +======================================================================================== + RESOLVE FLOW SWITCHING +======================================================================================== +*/ + +def run_input_check = true + +if(params.only_genome) { + run_input_check = false +} + /* ======================================================================================== IMPORT LOCAL MODULES/SUBWORKFLOWS @@ -177,10 +191,8 @@ def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genom /* * MODULES */ -// include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) -// include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) -// include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -// include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) +include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) +include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) // include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) // include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) // include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) @@ -192,11 +204,13 @@ def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genom // include { DESEQ2_DIFF } from "../modules/local/deseq2_diff" addParams( options: modules["deseq2"], multiqc_label: "deseq2") // include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) // include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) +// include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +// include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -// include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) +include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) // include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options ) // include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) // include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) @@ -244,31 +258,33 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Uncompress and prepare reference genome files */ - // PREPARE_GENOME ( - // prepareToolIndices - // ) - // ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) - // ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.samtools_version.ifEmpty(null)) + PREPARE_GENOME ( + prepare_tool_indices + ) + ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.samtools_version.ifEmpty(null)) /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files */ - // INPUT_CHECK ( - // ch_input - // ) - // .map { - // meta, fastq -> - // meta.id = meta.id.split("_")[0..-2].join("_") - // [ meta, fastq ] } - // .groupTuple(by: [0]) - // .branch { - // meta, fastq -> - // single : fastq.size() == 1 - // return [ meta, fastq.flatten() ] - // multiple: fastq.size() > 1 - // return [ meta, fastq.flatten() ] - // } - // .set { ch_fastq } + if(run_input_check) { + INPUT_CHECK ( + ch_input + ) + .map { + meta, fastq -> + meta.id = meta.id.split("_")[0..-2].join("_") + [ meta, fastq ] } + .groupTuple(by: [0]) + .branch { + meta, fastq -> + single : fastq.size() == 1 + return [ meta, fastq.flatten() ] + multiple: fastq.size() > 1 + return [ meta, fastq.flatten() ] + } + .set { ch_fastq } + } /* * MODULE: Concatenate FastQ files from same sample if required From d51cf471e559125dd9f32860a9a3f9dd030593e1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 13:00:02 +0100 Subject: [PATCH 436/675] Added saved merged fastq tests --- conf/test_tech_reps.config | 35 ++++++++++++++++++++++++ nextflow.config | 14 +++++----- nextflow_schema.json | 2 +- tests/test_verify_output_save_merged.yml | 8 ++++++ workflows/cutandrun.nf | 21 ++++++++++---- 5 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 conf/test_tech_reps.config create mode 100644 tests/test_verify_output_save_merged.yml diff --git a/conf/test_tech_reps.config b/conf/test_tech_reps.config new file mode 100644 index 00000000..b6e74233 --- /dev/null +++ b/conf/test_tech_reps.config @@ -0,0 +1,35 @@ +/* +======================================================================================== + Nextflow config file for running minimal tests +======================================================================================== + Defines input files and everything required to run a fast and simple pipeline test with merged technical replicates + + Use as follows: + nextflow run nf-core/cutandrun -profile test_tech_reps, + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function with merged technical replicates' + + // Limit resources so that this can run CI + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h + + // Input data + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-small-tech-reps.csv' + + // Genome references + fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' + gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + + minimum_alignment_q_score = 10 +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 72aa16fc..f4f92b3e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -25,12 +25,9 @@ params { input = null save_merged_fastq = false - // QC - skip_qc = false + // Pre-align QC skip_fastqc = false - skip_multiqc = false - - + only_preqc = false // Trimming clip_r1 = 0 @@ -65,6 +62,7 @@ params { skip_igv = false skip_reporting = false skip_deseq2 = false + skip_multiqc = false // Boilerplate options outdir = "./results" @@ -166,13 +164,15 @@ profiles { podman.enabled = false shifter.enabled = false } + local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run - test { includeConfig "conf/test.config" } + test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control + test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control test_no_igg { includeConfig "conf/test_no_igg.config" } test_full { includeConfig "conf/test_full.config" } test_hg38_chr7 { includeConfig "conf/test_hg38_chr7.config" } - test_all_small { includeConfig "conf/igg_flow_tests/test_all_small.config" } + test_all_small { includeConfig "conf/igg_flow_tests/test_all_small.config" } test_one_exp_all_igg_small { includeConfig "conf/igg_flow_tests/test_one_exp_all_igg_small.config" } test_all_exp_one_igg_small { includeConfig "conf/igg_flow_tests/test_all_exp_one_igg_small.config" } test_some_exp_all_igg_small { includeConfig "conf/igg_flow_tests/test_some_exp_all_igg_small.config" } diff --git a/nextflow_schema.json b/nextflow_schema.json index dd8c9a63..80ad11fe 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -31,7 +31,7 @@ "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" }, "save_merged_fastq": { - "type": "string", + "type": "boolean", "description": "Save FastQ files after merging re-sequenced libraries in the results directory." }, "multiqc_title": { diff --git a/tests/test_verify_output_save_merged.yml b/tests/test_verify_output_save_merged.yml new file mode 100644 index 00000000..f1e28e93 --- /dev/null +++ b/tests/test_verify_output_save_merged.yml @@ -0,0 +1,8 @@ +- name: test_verify_output_save_merged + command: nextflow run main.nf -profile docker,test --save_merged_fastq true --only_preqc true + tags: + - verify_output + - verify_output/save_merged + files: + - path: results/01_prealign/merged_fastq/h3k27me3_R1_1.merged.fastq.gz + - path: results/01_prealign/merged_fastq/h3k27me3_R1_2.merged.fastq.gz \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 16cf8a24..ad679558 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -177,11 +177,19 @@ if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } */ def run_input_check = true +def run_cat_fastq = true if(params.only_genome) { run_input_check = false + run_cat_fastq = false } + // save_merged_fastq = false + + // // Pre-align QC + // skip_fastqc = false + // only_preqc = false + /* ======================================================================================== IMPORT LOCAL MODULES/SUBWORKFLOWS @@ -285,15 +293,18 @@ workflow CUTANDRUN { } .set { ch_fastq } } + //ch_fastq | view /* * MODULE: Concatenate FastQ files from same sample if required */ - // CAT_FASTQ ( - // ch_fastq.multiple - // ) - // .mix(ch_fastq.single) - // .set { ch_cat_fastq } + if(run_cat_fastq) { + CAT_FASTQ ( + ch_fastq.multiple + ) + .mix(ch_fastq.single) + .set { ch_cat_fastq } + } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [READS]] //ch_cat_fastq | view From dee80d139927e092c41c91309667cad037b87311 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 15:07:55 +0100 Subject: [PATCH 437/675] Updated trim galore for better file naming --- modules/nf-core/software/trimgalore/main.nf | 33 ++++++++++++++------- subworkflows/nf-core/fastqc_trimgalore.nf | 8 +++-- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/modules/nf-core/software/trimgalore/main.nf b/modules/nf-core/software/trimgalore/main.nf index 79cc7456..daf29e70 100644 --- a/modules/nf-core/software/trimgalore/main.nf +++ b/modules/nf-core/software/trimgalore/main.nf @@ -2,14 +2,14 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process TRIMGALORE { tag "$meta.id" label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::trim-galore=0.6.6" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { @@ -22,9 +22,9 @@ process TRIMGALORE { tuple val(meta), path(reads) output: - tuple val(meta), path("*.fq.gz") , emit: reads - tuple val(meta), path("*report.txt"), emit: log - path "*.version.txt" , emit: version + tuple val(meta), path("*trimmed.fastq.gz") , emit: reads + tuple val(meta), path("*report.txt") , emit: log + path "*.version.txt" , emit: version tuple val(meta), path("*.html"), emit: html optional true tuple val(meta), path("*.zip") , emit: zip optional true @@ -49,7 +49,9 @@ process TRIMGALORE { // Added soft-links to original fastqs for consistent naming in MultiQC def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def suffix = options.suffix ? "${options.suffix}.trimmed" : ".trimmed" + def prefix_1 = "${meta.id}_1${suffix}" + def prefix_2 = "${meta.id}_2${suffix}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz @@ -64,8 +66,8 @@ process TRIMGALORE { """ } else { """ - [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz - [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz + [ ! -f ${meta.id}_1.fastq.gz ] && ln -s ${reads[0]} ${meta.id}_1.fastq.gz + [ ! -f ${meta.id}_2.fastq.gz ] && ln -s ${reads[1]} ${meta.id}_2.fastq.gz trim_galore \\ $options.args \\ --cores $cores \\ @@ -75,9 +77,18 @@ process TRIMGALORE { $c_r2 \\ $tpc_r1 \\ $tpc_r2 \\ - ${prefix}_1.fastq.gz \\ - ${prefix}_2.fastq.gz + ${meta.id}_1.fastq.gz \\ + ${meta.id}_2.fastq.gz echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//' > ${software}.version.txt + + mv ${meta.id}_1_val_1.fq.gz ${prefix_1}.fastq.gz + mv ${meta.id}_2_val_2.fq.gz ${prefix_2}.fastq.gz + + [ ! -f ${meta.id}_1_val_1_fastqc.html ] || mv ${meta.id}_1_val_1_fastqc.html ${meta.id}_1_fastqc${suffix}.html + [ ! -f ${meta.id}_2_val_2_fastqc.html ] || mv ${meta.id}_2_val_2_fastqc.html ${meta.id}_2_fastqc${suffix}.html + + [ ! -f ${meta.id}_1_val_1_fastqc.zip ] || mv ${meta.id}_1_val_1_fastqc.zip ${meta.id}_1_fastqc${suffix}.zip + [ ! -f ${meta.id}_2_val_2_fastqc.zip ] || mv ${meta.id}_2_val_2_fastqc.zip ${meta.id}_2_fastqc${suffix}.zip """ } -} +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastqc_trimgalore.nf b/subworkflows/nf-core/fastqc_trimgalore.nf index 9c896468..ad460c20 100644 --- a/subworkflows/nf-core/fastqc_trimgalore.nf +++ b/subworkflows/nf-core/fastqc_trimgalore.nf @@ -28,8 +28,12 @@ workflow FASTQC_TRIMGALORE { trim_zip = Channel.empty() trim_log = Channel.empty() trimgalore_version = Channel.empty() + ch_output_reads = reads if (!skip_trimming) { - TRIMGALORE ( reads ).reads.set { trim_reads } + TRIMGALORE ( + reads + ) + ch_output_reads = TRIMGALORE.out.reads trim_html = TRIMGALORE.out.html trim_zip = TRIMGALORE.out.zip trim_log = TRIMGALORE.out.log @@ -37,7 +41,7 @@ workflow FASTQC_TRIMGALORE { } emit: - reads = trim_reads // channel: [ val(meta), [ reads ] ] + reads = ch_output_reads // channel: [ val(meta), [ reads ] ] fastqc_html // channel: [ val(meta), [ html ] ] fastqc_zip // channel: [ val(meta), [ zip ] ] From 11d0fa9c1652899d532cc28df40d79fd855443bb Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 15:08:10 +0100 Subject: [PATCH 438/675] Added trimming and fastqc testing --- conf/modules.config | 7 +++- nextflow_schema.json | 2 +- tests/test_verify_output_save_merged.yml | 2 +- tests/test_verify_output_save_trimmed.yml | 7 ++++ tests/test_verify_output_skip_fastqc.yml | 21 ++++++++++ workflows/cutandrun.nf | 51 +++++++++++++---------- 6 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 tests/test_verify_output_save_trimmed.yml create mode 100644 tests/test_verify_output_skip_fastqc.yml diff --git a/conf/modules.config b/conf/modules.config index bc0716eb..25e620b0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -22,15 +22,20 @@ params { modules { + /* PRE-ALIGN*/ + "cat_fastq" { publish_dir = "01_prealign/merged_fastq" } "fastqc" { args = "--quiet" + publish_dir = "01_prealign/pretrim_fastqc" } "trimgalore" { - args = "--fastqc" + args = "" + publish_dir = "01_prealign/trimgalore" publish_files = ["txt":"", "html":"fastqc", "zip":"fastqc"] + //suffix = ".trimmed" } diff --git a/nextflow_schema.json b/nextflow_schema.json index 80ad11fe..fd2bfbdd 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -305,7 +305,7 @@ "description": "Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails." }, "save_trimmed": { - "type": "string", + "type": "boolean", "description": "Save the trimmed FastQ files in the results directory." } } diff --git a/tests/test_verify_output_save_merged.yml b/tests/test_verify_output_save_merged.yml index f1e28e93..b41562f4 100644 --- a/tests/test_verify_output_save_merged.yml +++ b/tests/test_verify_output_save_merged.yml @@ -1,5 +1,5 @@ - name: test_verify_output_save_merged - command: nextflow run main.nf -profile docker,test --save_merged_fastq true --only_preqc true + command: nextflow run main.nf -profile docker,test_tech_reps --save_merged_fastq true --only_preqc true tags: - verify_output - verify_output/save_merged diff --git a/tests/test_verify_output_save_trimmed.yml b/tests/test_verify_output_save_trimmed.yml new file mode 100644 index 00000000..a2944572 --- /dev/null +++ b/tests/test_verify_output_save_trimmed.yml @@ -0,0 +1,7 @@ +- name: test_verify_output_save_trimmed + command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true + tags: + - verify_output + - verify_output/save_trimmed + files: + - path: results/01_prealign/trimgalore/h3k27me3_R1_1.trimmed.fastq.gz \ No newline at end of file diff --git a/tests/test_verify_output_skip_fastqc.yml b/tests/test_verify_output_skip_fastqc.yml new file mode 100644 index 00000000..029427b2 --- /dev/null +++ b/tests/test_verify_output_skip_fastqc.yml @@ -0,0 +1,21 @@ +- name: test_verify_output_skip_fastqc_true + command: nextflow run main.nf -profile docker,test --only_preqc true --skip_fastqc true + tags: + - verify_output + - verify_output/skip_fastqc + - verify_output/skip_fastqc/true + files: + - path: results/01_prealign/pretrim_fastqc/h3k27me3_R1_1_fastqc.html + should_exist: false + - path: results/01_prealign/trimgalore/fastqc/h3k27me3_R1_1_fastqc.trimmed.html + should_exist: false + +- name: test_verify_output_skip_fastqc_false + command: nextflow run main.nf -profile docker,test --only_preqc true --skip_fastqc false + tags: + - verify_output + - verify_output/skip_fastqc + - verify_output/skip_fastqc/false + files: + - path: results/01_prealign/pretrim_fastqc/h3k27me3_R1_1_fastqc.html + - path: results/01_prealign/trimgalore/fastqc/h3k27me3_R1_1_fastqc.trimmed.html \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ad679558..d11e39e1 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -81,13 +81,13 @@ def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genom def cat_fastq_options = modules["cat_fastq"] if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } -// def multiqc_options = modules["multiqc"] -// multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" +// Pre QC +def trimgalore_options = modules["trimgalore"] +if(!params.skip_fastqc) { trimgalore_options.args += " --fastqc" } -// // Trimming -// def trimgalore_options = modules["trimgalore"] -// trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : "" -// if (params.save_trimmed) { trimgalore_options.publish_files.put("fq.gz","") } +// Trimming +trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : "" +if (params.save_trimmed) { trimgalore_options.publish_files.put("fastq.gz","") } // // Alignment dedup and filtering // def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] @@ -164,6 +164,9 @@ if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } // def awk_dedup_options = modules["awk_dedup"] // def awk_dt_frag_options = modules["awk_dt_frag"] +// def multiqc_options = modules["multiqc"] +// multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" + // // AWK options // def awk_threshold = modules["awk_threshold"] // awk_threshold.command = "' \$10 >= " + params.replicate_threshold.toString() + " {print \$0}'" @@ -176,19 +179,19 @@ if (!params.save_merged_fastq) { cat_fastq_options["publish_files"] = false } ======================================================================================== */ -def run_input_check = true -def run_cat_fastq = true +def run_input_check = true +def run_cat_fastq = true +def run_trim_galore_fastqc = true if(params.only_genome) { - run_input_check = false - run_cat_fastq = false + run_input_check = false + run_cat_fastq = false + run_trim_galore_fastqc = false } - // save_merged_fastq = false +if(params.only_preqc) { - // // Pre-align QC - // skip_fastqc = false - // only_preqc = false +} /* ======================================================================================== @@ -248,7 +251,7 @@ include { PREPARE_GENOME } from "../subworkflow /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -// include { FASTQC_TRIMGALORE } from "../subworkflows/nf-core/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) +include { FASTQC_TRIMGALORE } from "../subworkflows/nf-core/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) // include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) // include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) @@ -311,14 +314,16 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Read QC, trim adapters and perform post-trim read QC */ - // FASTQC_TRIMGALORE ( - // ch_cat_fastq, - // params.skip_fastqc || params.skip_qc, - // params.skip_trimming - // ) - // ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads - // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) - // ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + if(run_trim_galore_fastqc) { + FASTQC_TRIMGALORE ( + ch_cat_fastq, + params.skip_fastqc, + params.skip_trimming + ) + ch_trimmed_reads = FASTQC_TRIMGALORE.out.reads + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.fastqc_version.first().ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(FASTQC_TRIMGALORE.out.trimgalore_version.first().ifEmpty(null)) + } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [READS]] //FASTQC_TRIMGALORE.out.reads | view From a59f5ccc2a93d825c75d4b6f677a3883085a244e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 20:55:32 +0100 Subject: [PATCH 439/675] added align only tests --- conf/modules.config | 300 +++++++++++++----------- nextflow.config | 11 +- tests/test_verify_output_only_align.yml | 9 + tests/test_verify_output_save_ref.yml | 18 +- workflows/cutandrun.nf | 195 ++++++++------- 5 files changed, 294 insertions(+), 239 deletions(-) create mode 100644 tests/test_verify_output_only_align.yml diff --git a/conf/modules.config b/conf/modules.config index 25e620b0..4e83ccd8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -22,8 +22,12 @@ params { modules { - /* PRE-ALIGN*/ - + /* + ======================================================================================== + PRE-ALIGNMENT + ======================================================================================== + */ + "cat_fastq" { publish_dir = "01_prealign/merged_fastq" } @@ -38,12 +42,158 @@ params { //suffix = ".trimmed" } + /* + ======================================================================================== + ALIGNMENT + ======================================================================================== + */ + // ALIGN BT2 - SPIKE-IN + "bowtie2_spikein_align" { + args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" + suffix = ".spikein" + publish_files = false + } + "samtools_spikein_sort" { + suffix = ".spikein.sorted" + publish_files = false + } + // ALIGN BT2 + "bowtie2_align" { + args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" + suffix = ".target" + publish_files = false + } + "samtools_sort" { + suffix = ".target.sorted" + publish_files = false + } + + // "bowtie2_align_intermed" { + // args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" + // suffix = ".target" + // publish_dir = "aligner/${params.aligner}/intermediate" + // publish_files = ["bam":""] + // } - "deseq2" { - publish_dir = "deseq2_qc" + + // "samtools_sort_intermed" { + // suffix = ".target.sorted" + // publish_dir = "aligner/${params.aligner}/intermediate" + // publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + // } + + + + + + + + // SAMTOOLS Q FILTER + "samtools_view_qfilter" { + args = "-q 0 -b" + suffix = ".filtered" + publish_files = false + // publish_files = [:] + // publish_dir = "" + } + "samtools_view_qfilter_intermed" { + args = "-q 0 -b" + suffix = ".filtered" + publish_files = ["bam":""] + publish_dir = "aligner/${params.aligner}/intermediate" + } + "samtools_view_qfilter_final" { + args = "-q 0 -b" + suffix = ".filtered" + publish_files = ["bam":""] + publish_dir = "aligner/${params.aligner}" + } + "samtools_qfilter" { + suffix = ".filtered" + publish_files = false + // publish_files = [:] + // publish_dir = "" + } + "samtools_qfilter_intermed" { + suffix = ".filtered" + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + publish_dir = "aligner/${params.aligner}/intermediate" + } + "samtools_qfilter_final" { + suffix = ".filtered" + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + publish_dir = "aligner/${params.aligner}" + } + + // MARK DUPS + "picard_markduplicates" { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".markdup" + // publish_files = [:] + // publish_dir = "" + publish_files = false + } + "picard_markduplicates_intermed" { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".markdup" + publish_files = ["bam":"","metrics.txt":"picard_metrics"] + publish_dir = "aligner/${params.aligner}/intermediate" + } + "picard_markduplicates_final" { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".markdup" + publish_files = ["bam":"","metrics.txt":"picard_metrics"] + publish_dir = "aligner/${params.aligner}" + } + "picard_markduplicates_samtools" { + suffix = ".markdup.sorted" + publish_files = false + // publish_files = [:] + // publish_dir = "" + } + "picard_markduplicates_samtools_intermed" { + suffix = ".markdup.sorted" + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + publish_dir = "aligner/${params.aligner}/intermediate" + } + "picard_markduplicates_samtools_final" { + suffix = ".markdup.sorted" + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + publish_dir = "aligner/${params.aligner}" + } + + // DEDUP + "picard_dedup" { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".dedup" + // publish_files = [:] + // publish_dir = "" + publish_files = false } + "picard_dedup_intermed" { + args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" + suffix = ".dedup" + publish_files = ["bam":"","metrics.txt":"picard_metrics"] + publish_dir = "aligner/${params.aligner}/intermediate" + } + "picard_dedup_samtools" { + suffix = ".dedup.sorted" + // publish_files = [:] + // publish_dir = "" + publish_files = false + } + "picard_dedup_samtools_intermed" { + suffix = ".dedup.sorted" + publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + publish_dir = "aligner/${params.aligner}/intermediate" + } + + + + + "bedtools_merge_groups" { args = " -c 2,3,4,5,6,7,7 -o collapse,collapse,collapse,collapse,collapse,collapse,count_distinct" // args = " -c 7 -o collapse" @@ -206,146 +356,10 @@ params { suffix = ".rep_thresh" } - /* - ======================================================================================== - ALIGNMENT FILE MODULE OPTIONS - ======================================================================================== - */ - // ALIGN BT2 - "bowtie2_align" { - args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" - suffix = ".target" - publish_files = false - // publish_dir = "" - // publish_files = [:] - } - "bowtie2_align_intermed" { - args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" - suffix = ".target" - publish_dir = "aligner/${params.aligner}/intermediate" - publish_files = ["bam":""] - } - "samtools_sort" { - suffix = ".target.sorted" - publish_files = false - // publish_dir = "" - // publish_files = [:] - } - "samtools_sort_intermed" { - suffix = ".target.sorted" - publish_dir = "aligner/${params.aligner}/intermediate" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - } - - // ALIGN BT2 - SPIKE-IN - "bowtie2_spikein_align" { - args = "--end-to-end --very-sensitive --no-overlap --no-dovetail --no-mixed --no-discordant --phred33 -I 10 -X 700" - suffix = ".spikein" - publish_files = false - } - "samtools_spikein_sort" { - suffix = ".spikein.sorted" - publish_files = false - } - - // SAMTOOLS Q FILTER - "samtools_view_qfilter" { - args = "-q 0 -b" - suffix = ".filtered" - publish_files = false - // publish_files = [:] - // publish_dir = "" - } - "samtools_view_qfilter_intermed" { - args = "-q 0 -b" - suffix = ".filtered" - publish_files = ["bam":""] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "samtools_view_qfilter_final" { - args = "-q 0 -b" - suffix = ".filtered" - publish_files = ["bam":""] - publish_dir = "aligner/${params.aligner}" - } - "samtools_qfilter" { - suffix = ".filtered" - publish_files = false - // publish_files = [:] - // publish_dir = "" - } - "samtools_qfilter_intermed" { - suffix = ".filtered" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "samtools_qfilter_final" { - suffix = ".filtered" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}" - } - - // MARK DUPS - "picard_markduplicates" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".markdup" - // publish_files = [:] - // publish_dir = "" - publish_files = false - } - "picard_markduplicates_intermed" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".markdup" - publish_files = ["bam":"","metrics.txt":"picard_metrics"] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "picard_markduplicates_final" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".markdup" - publish_files = ["bam":"","metrics.txt":"picard_metrics"] - publish_dir = "aligner/${params.aligner}" - } - "picard_markduplicates_samtools" { - suffix = ".markdup.sorted" - publish_files = false - // publish_files = [:] - // publish_dir = "" - } - "picard_markduplicates_samtools_intermed" { - suffix = ".markdup.sorted" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "picard_markduplicates_samtools_final" { - suffix = ".markdup.sorted" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}" + "deseq2" { + publish_dir = "deseq2_qc" } - // DEDUP - "picard_dedup" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".dedup" - // publish_files = [:] - // publish_dir = "" - publish_files = false - } - "picard_dedup_intermed" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".dedup" - publish_files = ["bam":"","metrics.txt":"picard_metrics"] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "picard_dedup_samtools" { - suffix = ".dedup.sorted" - // publish_files = [:] - // publish_dir = "" - publish_files = false - } - "picard_dedup_samtools_intermed" { - suffix = ".dedup.sorted" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}/intermediate" - } + } } diff --git a/nextflow.config b/nextflow.config index f4f92b3e..5a179ced 100644 --- a/nextflow.config +++ b/nextflow.config @@ -40,13 +40,18 @@ params { // Alignment aligner = "bowtie2" - save_unaligned = false save_spikein_aligned = false - publish_align_intermed = false + save_unaligned = false + save_align_intermed = false + only_alignment = false + + // Filtering + minimum_alignment_q_score = 0 + + // Deduplication skip_markduplicates = false skip_removeduplicates = false dedup_target_reads = false - minimum_alignment_q_score = 0 // Coverage skip_scale = false diff --git a/tests/test_verify_output_only_align.yml b/tests/test_verify_output_only_align.yml new file mode 100644 index 00000000..3ad02a9c --- /dev/null +++ b/tests/test_verify_output_only_align.yml @@ -0,0 +1,9 @@ +- name: test_verify_output_only_align + command: nextflow run main.nf -profile docker,test --only_alignment true + tags: + - verify_output + - verify_output/align + - verify_output/align/only_align + files: + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.bam \ No newline at end of file diff --git a/tests/test_verify_output_save_ref.yml b/tests/test_verify_output_save_ref.yml index 64f2073f..cbfbf400 100644 --- a/tests/test_verify_output_save_ref.yml +++ b/tests/test_verify_output_save_ref.yml @@ -4,12 +4,12 @@ - verify_output - verify_output/save_ref files: - - path: results/genome/target/hg38-chr20-genes.bed - - path: results/genome/target/hg38-chr20-genes.gtf - - path: results/genome/target/hg38-chr20.fa - - path: results/genome/target/hg38-chr20.fa.fai - - path: results/genome/target/hg38-chr20.fa.sizes - - path: results/genome/target/index/hg38-chr20-bowtie2/hg38-chr20.1.bt2 - - path: results/genome/spikein/e_coli_U00096_3.fa - - path: results/genome/spikein/e_coli_U00096_3.fa.sizes - - path: results/genome/spikein/index/e_coli_U00096_3/e_coli_U00096_3.1.bt2 \ No newline at end of file + - path: results/00_genome/target/hg38-chr20-genes.bed + - path: results/00_genome/target/hg38-chr20-genes.gtf + - path: results/00_genome/target/hg38-chr20.fa + - path: results/00_genome/target/hg38-chr20.fa.fai + - path: results/00_genome/target/hg38-chr20.fa.sizes + - path: results/00_genome/target/index/hg38-chr20-bowtie2/hg38-chr20.1.bt2 + - path: results/00_genome/spikein/e_coli_U00096_3.fa + - path: results/00_genome/spikein/e_coli_U00096_3.fa.sizes + - path: results/00_genome/spikein/index/e_coli_U00096_3/e_coli_U00096_3.1.bt2 \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index d11e39e1..91d2d13b 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -59,6 +59,40 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi // ch_top_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_diagnostic_header.txt", checkIfExists: true) // ch_clustering_header_multiqc = file("$projectDir/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) // ch_frag_len_header_multiqc = file("$projectDir/assets/multiqc/frag_len_header.txt", checkIfExists: true) + +/* +======================================================================================== + RESOLVE FLOW SWITCHING +======================================================================================== +*/ + +def run_input_check = true +def run_cat_fastq = true +def run_trim_galore_fastqc = true +def run_alignment = true +def run_q_filter = true +def run_mark_dups = true +def run_remove_dups = true + +if(params.only_genome) { + run_input_check = false + run_cat_fastq = false + run_trim_galore_fastqc = false +} + +if(params.only_preqc) { + run_alignment = false + run_q_filter = false + run_mark_dups = false + run_remove_dups = false +} + +if(params.only_alignment) { + run_q_filter = false + run_mark_dups = false + run_remove_dups = false +} + /* ======================================================================================== INIALISE PARAMETERS AND OPTIONS @@ -72,10 +106,10 @@ def modules = params.modules.clone() def prepare_tool_indices = ["bowtie2"] // Genome -def genome_options = params.save_reference ? [publish_dir: "genome/target"] : [publish_files: false] -def spikein_genome_options = params.save_reference ? [publish_dir: "genome/spikein"] : [publish_files: false] -def bowtie2_index_options = params.save_reference ? [publish_dir: "genome/target/index"] : [publish_files: false] -def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "genome/spikein/index"] : [publish_files: false] +def genome_options = params.save_reference ? [publish_dir: "00_genome/target"] : [publish_files: false] +def spikein_genome_options = params.save_reference ? [publish_dir: "00_genome/spikein"] : [publish_files: false] +def bowtie2_index_options = params.save_reference ? [publish_dir: "00_genome/target/index"] : [publish_files: false] +def bowtie2_spikein_index_options = params.save_reference ? [publish_dir: "00_genome/spikein/index"] : [publish_files: false] // Replicate merging def cat_fastq_options = modules["cat_fastq"] @@ -89,17 +123,28 @@ if(!params.skip_fastqc) { trimgalore_options.args += " --fastqc" } trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_nextseq}" : "" if (params.save_trimmed) { trimgalore_options.publish_files.put("fastq.gz","") } -// // Alignment dedup and filtering -// def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] -// if (params.save_spikein_aligned) { -// bowtie2_spikein_align_options.publish_dir = "aligner/${params.aligner}/spikein" -// bowtie2_spikein_align_options.publish_files = ["bam":""] -// } -// def samtools_spikein_sort_options = modules["samtools_spikein_sort"] -// if (params.save_spikein_aligned) { -// samtools_spikein_sort_options.publish_dir = "aligner/${params.aligner}/spikein" -// samtools_spikein_sort_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] -// } +// Spikein alignment options +def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] +if (params.save_spikein_aligned) { + bowtie2_spikein_align_options.publish_dir = "02_alignment/${params.aligner}/spikein" + bowtie2_spikein_align_options.publish_files = ["bam":""] +} +def samtools_spikein_sort_options = modules["samtools_spikein_sort"] +if (params.save_spikein_aligned) { + samtools_spikein_sort_options.publish_dir = "02_alignment/${params.aligner}/spikein" + samtools_spikein_sort_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} + +// Main alignment options +def bowtie2_align_options = modules["bowtie2_align"] +def samtools_sort_options = modules["samtools_sort"] +if(params.only_alignment || (!run_q_filter && !run_mark_dups && !run_remove_dups)) { + bowtie2_align_options.publish_dir = "02_alignment/${params.aligner}/target" + bowtie2_align_options.publish_files = ["bam":""] + samtools_sort_options.publish_dir = "02_alignment/${params.aligner}/target" + samtools_sort_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} + // def dedup_control_only = true // if(params.dedup_target_reads) { dedup_control_only = false } @@ -173,26 +218,6 @@ if (params.save_trimmed) { trimgalore_options.publish_files.put("fastq.gz","") } // def awk_all_threshold = modules["awk_threshold"] // awk_threshold.command = "' \$10 >= 1 {print \$0}'" -/* -======================================================================================== - RESOLVE FLOW SWITCHING -======================================================================================== -*/ - -def run_input_check = true -def run_cat_fastq = true -def run_trim_galore_fastqc = true - -if(params.only_genome) { - run_input_check = false - run_cat_fastq = false - run_trim_galore_fastqc = false -} - -if(params.only_preqc) { - -} - /* ======================================================================================== IMPORT LOCAL MODULES/SUBWORKFLOWS @@ -222,7 +247,7 @@ include { CAT_FASTQ } from "../modules/local/cat_fastq" * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) -// include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options ) +include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options ) // include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) // include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) // include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) @@ -328,46 +353,48 @@ workflow CUTANDRUN { //FASTQC_TRIMGALORE.out.reads | view /* - * SUBWORKFLOW: Alignment to target and spikein genome using botwtie2 - */ - // ch_orig_bam = Channel.empty() - // ch_orig_spikein_bam = Channel.empty() - // ch_bowtie2_log = Channel.empty() - // ch_bowtie2_spikein_log = Channel.empty() - // ch_samtools_bam = Channel.empty() - // ch_samtools_bai = Channel.empty() - // ch_samtools_stats = Channel.empty() - // ch_samtools_flagstat = Channel.empty() - // ch_samtools_idxstats = Channel.empty() - // ch_samtools_spikein_bam = Channel.empty() - // ch_samtools_spikein_bai = Channel.empty() - // ch_samtools_spikein_stats = Channel.empty() - // ch_samtools_spikein_flagstat = Channel.empty() - // ch_samtools_spikein_idxstats = Channel.empty() - // if (params.aligner == "bowtie2") { - // ALIGN_BOWTIE2 ( - // ch_trimmed_reads, - // PREPARE_GENOME.out.bowtie2_index, - // PREPARE_GENOME.out.bowtie2_spikein_index - // ) - // ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) - // ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam - // ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam - // ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log - // ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log - - // ch_samtools_bam = ALIGN_BOWTIE2.out.bam - // ch_samtools_bai = ALIGN_BOWTIE2.out.bai - // ch_samtools_stats = ALIGN_BOWTIE2.out.stats - // ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat - // ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats - - // ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam - // ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai - // ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats - // ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat - // ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats - // } + * SUBWORKFLOW: Alignment to target and spikein genome using botwtie2 + */ + if(run_alignment) { + ch_orig_bam = Channel.empty() + ch_orig_spikein_bam = Channel.empty() + ch_bowtie2_log = Channel.empty() + ch_bowtie2_spikein_log = Channel.empty() + ch_samtools_bam = Channel.empty() + ch_samtools_bai = Channel.empty() + ch_samtools_stats = Channel.empty() + ch_samtools_flagstat = Channel.empty() + ch_samtools_idxstats = Channel.empty() + ch_samtools_spikein_bam = Channel.empty() + ch_samtools_spikein_bai = Channel.empty() + ch_samtools_spikein_stats = Channel.empty() + ch_samtools_spikein_flagstat = Channel.empty() + ch_samtools_spikein_idxstats = Channel.empty() + if (params.aligner == "bowtie2") { + ALIGN_BOWTIE2 ( + ch_trimmed_reads, + PREPARE_GENOME.out.bowtie2_index, + PREPARE_GENOME.out.bowtie2_spikein_index + ) + ch_software_versions = ch_software_versions.mix(ALIGN_BOWTIE2.out.bowtie2_version.first().ifEmpty(null)) + ch_orig_bam = ALIGN_BOWTIE2.out.orig_bam + ch_orig_spikein_bam = ALIGN_BOWTIE2.out.orig_spikein_bam + ch_bowtie2_log = ALIGN_BOWTIE2.out.bowtie2_log + ch_bowtie2_spikein_log = ALIGN_BOWTIE2.out.bowtie2_spikein_log + + ch_samtools_bam = ALIGN_BOWTIE2.out.bam + ch_samtools_bai = ALIGN_BOWTIE2.out.bai + ch_samtools_stats = ALIGN_BOWTIE2.out.stats + ch_samtools_flagstat = ALIGN_BOWTIE2.out.flagstat + ch_samtools_idxstats = ALIGN_BOWTIE2.out.idxstats + + ch_samtools_spikein_bam = ALIGN_BOWTIE2.out.spikein_bam + ch_samtools_spikein_bai = ALIGN_BOWTIE2.out.spikein_bai + ch_samtools_spikein_stats = ALIGN_BOWTIE2.out.spikein_stats + ch_samtools_spikein_flagstat = ALIGN_BOWTIE2.out.spikein_flagstat + ch_samtools_spikein_idxstats = ALIGN_BOWTIE2.out.spikein_idxstats + } + } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view @@ -553,7 +580,7 @@ workflow CUTANDRUN { //UCSC_BEDGRAPHTOBIGWIG.out.bigwig | view // ch_seacr_bed = Channel.empty() - if(!params.skip_peakcalling) { + //if(!params.skip_peakcalling) { /* * CHANNEL: Separate bedgraphs into target/control pairings for each replicate */ @@ -566,7 +593,7 @@ workflow CUTANDRUN { //ch_bedgraph_split.target | view //ch_bedgraph_split.control | view - if (params.igg_control) { + // if (params.igg_control) { /* * CHANNEL: Collect experimental replicate numbers @@ -667,8 +694,8 @@ workflow CUTANDRUN { // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // scale_factor:10000], BED] //SEACR_CALLPEAK.out.bed | view - } - else { + //} + //else { /* * CHANNEL: Load peak threshold into channel */ @@ -688,7 +715,7 @@ workflow CUTANDRUN { // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // scale_factor:10000], BED] //SEACR_NO_IGG.out.bed | view - } + //} /* * MODULE: Add sample identifier column to peak beds @@ -745,7 +772,7 @@ workflow CUTANDRUN { // CONSENSUS_PEAKS_ALL ( // ch_seacr_bed_all.multiple // ) - } + //} // if(!params.skip_igv) { // /* @@ -759,7 +786,7 @@ workflow CUTANDRUN { // ) // } - if(!params.skip_reporting && !params.skip_peakcalling) { + //if(!params.skip_reporting && !params.skip_peakcalling) { /* * CHANNEL: Collect SEACR group names that are not igg for reporting */ @@ -958,7 +985,7 @@ workflow CUTANDRUN { // ) // ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc // ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) - } + //} /* * MODULE: Collect software versions used in pipeline From c5d37e61953f72c088558ee30e628bbad977f1bc Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 21:41:51 +0100 Subject: [PATCH 440/675] fixed alignment tests --- tests/test_verify_output_only_align.yml | 10 +++++++--- tests/test_verify_output_save_spikein_align.yml | 13 +++++++++++++ workflows/cutandrun.nf | 12 +++--------- 3 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 tests/test_verify_output_save_spikein_align.yml diff --git a/tests/test_verify_output_only_align.yml b/tests/test_verify_output_only_align.yml index 3ad02a9c..361a0307 100644 --- a/tests/test_verify_output_only_align.yml +++ b/tests/test_verify_output_only_align.yml @@ -1,9 +1,13 @@ - name: test_verify_output_only_align - command: nextflow run main.nf -profile docker,test --only_alignment true + command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true tags: - verify_output - verify_output/align - verify_output/align/only_align files: - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.bam - - path: results/02_alignment/bowtie2/target/igg_R1.target.bam \ No newline at end of file + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.sorted.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.sorted.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.sorted.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.sorted.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.sorted.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.sorted.bam.flagstat \ No newline at end of file diff --git a/tests/test_verify_output_save_spikein_align.yml b/tests/test_verify_output_save_spikein_align.yml new file mode 100644 index 00000000..93a91a9f --- /dev/null +++ b/tests/test_verify_output_save_spikein_align.yml @@ -0,0 +1,13 @@ +- name: test_verify_output_save_spikein_align + command: nextflow run main.nf -profile docker,test --only_alignment true --save_spikein_aligned true --skip_fastqc true + tags: + - verify_output + - verify_output/align + - verify_output/align/save_spikein_align + files: + - path: results/02_alignment/bowtie2/spikein/h3k27me3_R1.spikein.sorted.bam + - path: results/02_alignment/bowtie2/spikein/igg_R1.spikein.sorted.bam + - path: results/02_alignment/bowtie2/spikein/h3k27me3_R1.spikein.sorted.bam.bai + - path: results/02_alignment/bowtie2/spikein/igg_R1.spikein.sorted.bam.bai + - path: results/02_alignment/bowtie2/spikein/samtools_stats/h3k27me3_R1.spikein.sorted.bam.flagstat + - path: results/02_alignment/bowtie2/spikein/samtools_stats/igg_R1.spikein.sorted.bam.flagstat \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 91d2d13b..ae464657 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -125,24 +125,18 @@ if (params.save_trimmed) { trimgalore_options.publish_files.put("fastq.gz","") } // Spikein alignment options def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] -if (params.save_spikein_aligned) { - bowtie2_spikein_align_options.publish_dir = "02_alignment/${params.aligner}/spikein" - bowtie2_spikein_align_options.publish_files = ["bam":""] -} def samtools_spikein_sort_options = modules["samtools_spikein_sort"] if (params.save_spikein_aligned) { samtools_spikein_sort_options.publish_dir = "02_alignment/${params.aligner}/spikein" - samtools_spikein_sort_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + samtools_spikein_sort_options.publish_files = ["bai":"","bam":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } // Main alignment options def bowtie2_align_options = modules["bowtie2_align"] def samtools_sort_options = modules["samtools_sort"] if(params.only_alignment || (!run_q_filter && !run_mark_dups && !run_remove_dups)) { - bowtie2_align_options.publish_dir = "02_alignment/${params.aligner}/target" - bowtie2_align_options.publish_files = ["bam":""] samtools_sort_options.publish_dir = "02_alignment/${params.aligner}/target" - samtools_sort_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + samtools_sort_options.publish_files = ["bai":"","bam":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } // def dedup_control_only = true @@ -247,7 +241,7 @@ include { CAT_FASTQ } from "../modules/local/cat_fastq" * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) -include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options ) +include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options, samtools_options: samtools_sort_options ) // include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) // include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) // include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) From 5f0bd8509ee66a074f818e1f3ee81870893ae435 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 21:56:47 +0100 Subject: [PATCH 441/675] added save unaligned test --- nextflow_schema.json | 2 +- tests/test_verify_output_save_unaligned.yml | 11 +++++++++++ workflows/cutandrun.nf | 6 +++++- 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 tests/test_verify_output_save_unaligned.yml diff --git a/nextflow_schema.json b/nextflow_schema.json index fd2bfbdd..7a6bbcfc 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -108,7 +108,7 @@ "description": "Specifies the alignment algorithm to use - current available options is Bowtie2" }, "save_unaligned": { - "type": "string", + "type": "boolean", "description": "Where possible, save unaligned reads from the alignment algorithm to the results directory." }, "minimum_alignment_q_score": { diff --git a/tests/test_verify_output_save_unaligned.yml b/tests/test_verify_output_save_unaligned.yml new file mode 100644 index 00000000..b55acbc4 --- /dev/null +++ b/tests/test_verify_output_save_unaligned.yml @@ -0,0 +1,11 @@ +- name: test_verify_output_only_align + command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true --save_unaligned true + tags: + - verify_output + - verify_output/align + - verify_output/align/save_unaligned + files: + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.unmapped_1.fastq.gz + - path: results/02_alignment/bowtie2/target/igg_R1.target.unmapped_2.fastq.gz + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.unmapped_1.fastq.gz + - path: results/02_alignment/bowtie2/target/igg_R1.target.unmapped_2.fastq.gz \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ae464657..ceedb5fc 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -124,7 +124,7 @@ trimgalore_options.args += params.trim_nextseq > 0 ? " --nextseq ${params.trim_ if (params.save_trimmed) { trimgalore_options.publish_files.put("fastq.gz","") } // Spikein alignment options -def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] +def bowtie2_spikein_align_options = modules["bowtie2_spikein_align"] def samtools_spikein_sort_options = modules["samtools_spikein_sort"] if (params.save_spikein_aligned) { samtools_spikein_sort_options.publish_dir = "02_alignment/${params.aligner}/spikein" @@ -138,6 +138,10 @@ if(params.only_alignment || (!run_q_filter && !run_mark_dups && !run_remove_dups samtools_sort_options.publish_dir = "02_alignment/${params.aligner}/target" samtools_sort_options.publish_files = ["bai":"","bam":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } +if(params.save_unaligned) { + bowtie2_align_options.publish_dir = "02_alignment/${params.aligner}/target" + bowtie2_align_options.publish_files = ["gz":""] +} // def dedup_control_only = true // if(params.dedup_target_reads) { dedup_control_only = false } From 2f2bf19cb4bc968054a87d829311a99069f3bec1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 15 Jul 2021 22:43:18 +0100 Subject: [PATCH 442/675] Added q filter tests --- conf/modules.config | 57 ++++-------------- nextflow.config | 3 +- tests/test_verify_output_only_q_filter.yml | 13 ++++ tests/test_verify_output_save_unaligned.yml | 2 +- workflows/cutandrun.nf | 66 +++++++++++---------- 5 files changed, 64 insertions(+), 77 deletions(-) create mode 100644 tests/test_verify_output_only_q_filter.yml diff --git a/conf/modules.config b/conf/modules.config index 4e83ccd8..0a47ada0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -42,7 +42,7 @@ params { //suffix = ".trimmed" } - /* + /* ======================================================================================== ALIGNMENT ======================================================================================== @@ -69,58 +69,25 @@ params { suffix = ".target.sorted" publish_files = false } - - // "bowtie2_align_intermed" { - // args = "--end-to-end --very-sensitive --no-mixed --no-discordant --phred33 -I 10 -X 700" - // suffix = ".target" - // publish_dir = "aligner/${params.aligner}/intermediate" - // publish_files = ["bam":""] - // } - - - // "samtools_sort_intermed" { - // suffix = ".target.sorted" - // publish_dir = "aligner/${params.aligner}/intermediate" - // publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - // } - - - - - + /* + ======================================================================================== + Q Filtering + ======================================================================================== + */ - // SAMTOOLS Q FILTER "samtools_view_qfilter" { - args = "-q 0 -b" - suffix = ".filtered" + suffix = ".target.filtered" publish_files = false - // publish_files = [:] - // publish_dir = "" - } - "samtools_view_qfilter_intermed" { - args = "-q 0 -b" - suffix = ".filtered" - publish_files = ["bam":""] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "samtools_view_qfilter_final" { - args = "-q 0 -b" - suffix = ".filtered" - publish_files = ["bam":""] - publish_dir = "aligner/${params.aligner}" } "samtools_qfilter" { - suffix = ".filtered" + suffix = ".target.filtered" publish_files = false - // publish_files = [:] - // publish_dir = "" - } - "samtools_qfilter_intermed" { - suffix = ".filtered" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}/intermediate" } + + + + "samtools_qfilter_final" { suffix = ".filtered" publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] diff --git a/nextflow.config b/nextflow.config index 5a179ced..8d9fd663 100644 --- a/nextflow.config +++ b/nextflow.config @@ -42,8 +42,8 @@ params { aligner = "bowtie2" save_spikein_aligned = false save_unaligned = false - save_align_intermed = false only_alignment = false + save_align_intermed = false // Filtering minimum_alignment_q_score = 0 @@ -52,6 +52,7 @@ params { skip_markduplicates = false skip_removeduplicates = false dedup_target_reads = false + only_filtering = false // Coverage skip_scale = false diff --git a/tests/test_verify_output_only_q_filter.yml b/tests/test_verify_output_only_q_filter.yml new file mode 100644 index 00000000..fb78109d --- /dev/null +++ b/tests/test_verify_output_only_q_filter.yml @@ -0,0 +1,13 @@ +- name: test_verify_output_only_q_filter + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true minimum_alignment_q_score 10 --skip_markduplicates true --skip_removeduplicates true + tags: + - verify_output + - verify_output/align + - verify_output/align/only_q_filter + files: + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.filtered.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.filtered.bam.flagstat \ No newline at end of file diff --git a/tests/test_verify_output_save_unaligned.yml b/tests/test_verify_output_save_unaligned.yml index b55acbc4..fa651b5b 100644 --- a/tests/test_verify_output_save_unaligned.yml +++ b/tests/test_verify_output_save_unaligned.yml @@ -1,4 +1,4 @@ -- name: test_verify_output_only_align +- name: test_verify_output_save_unaligned command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true --save_unaligned true tags: - verify_output diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ceedb5fc..51ce6599 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -70,7 +70,7 @@ def run_input_check = true def run_cat_fastq = true def run_trim_galore_fastqc = true def run_alignment = true -def run_q_filter = true +def run_q_filter = false def run_mark_dups = true def run_remove_dups = true @@ -93,6 +93,14 @@ if(params.only_alignment) { run_remove_dups = false } +if(params.minimum_alignment_q_score > 0) { run_q_filter = true } +if(params.skip_markduplicates) { run_mark_dups = false } +if(params.skip_removeduplicates) { run_remove_dups = false } + +if(params.only_filtering) { + +} + /* ======================================================================================== INIALISE PARAMETERS AND OPTIONS @@ -138,23 +146,29 @@ if(params.only_alignment || (!run_q_filter && !run_mark_dups && !run_remove_dups samtools_sort_options.publish_dir = "02_alignment/${params.aligner}/target" samtools_sort_options.publish_files = ["bai":"","bam":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } +else if(params.save_align_intermed) { + samtools_sort_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/align" + samtools_sort_options.publish_files = ["bai":"","bam":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} if(params.save_unaligned) { bowtie2_align_options.publish_dir = "02_alignment/${params.aligner}/target" bowtie2_align_options.publish_files = ["gz":""] } +// Q Filter options +samtools_qfilter_options = modules["samtools_qfilter"] +samtools_view_options = modules["samtools_view_qfilter"] +samtools_view_options.args = "-b -q " + params.minimum_alignment_q_score +if(!run_mark_dups && !run_remove_dups) { + samtools_view_options.publish_dir = "02_alignment/${params.aligner}/target" + samtools_view_options.publish_files = ["bam":""] + samtools_qfilter_options.publish_dir = "02_alignment/${params.aligner}/target" + samtools_qfilter_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} + // def dedup_control_only = true // if(params.dedup_target_reads) { dedup_control_only = false } -// def bowtie2_align_options = null -// def samtools_sort_options = null -// def samtools_view_options = null -// def samtools_qfilter_options = null -// def picard_markduplicates_options = null -// def picard_markduplicates_samtools_options = null -// def picard_deduplicates_options = null -// def picard_deduplicates_samtools_options = null - // // if (!params.skip_markduplicates && params.skip_removeduplicates) { // if (!params.skip_markduplicates) { // picard_markduplicates_options = modules["picard_markduplicates_final"] @@ -178,8 +192,7 @@ if(params.save_unaligned) { // samtools_view_options = modules["samtools_view_qfilter_final"] // samtools_qfilter_options = modules["samtools_qfilter_final"] // if (params.publish_align_intermed ) { -// bowtie2_align_options = modules["bowtie2_align_intermed"] -// samtools_sort_options = modules["samtools_sort_intermed"] + // picard_markduplicates_options = modules["picard_markduplicates_intermed"] // picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_intermed"] // picard_deduplicates_options = modules["picard_dedup_intermed"] @@ -194,13 +207,6 @@ if(params.save_unaligned) { // } // } -// if (params.save_unaligned) { bowtie2_align_options.publish_files.put(".gz","") } -// if (params.save_unaligned) { bowtie2_spikein_align_options.publish_files.put(".gz","") } - -// if (params.minimum_alignment_q_score > 0) { -// samtools_view_options.args = "-b -q " + params.minimum_alignment_q_score -// } - // // Meta annotation options // def awk_bt2_options = modules["awk_bt2"] // def awk_bt2_spikein_options = modules["awk_bt2_spikein"] @@ -246,7 +252,7 @@ include { CAT_FASTQ } from "../modules/local/cat_fastq" */ include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options, samtools_options: samtools_sort_options ) -// include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) +include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) // include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) // include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) // include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) @@ -400,16 +406,16 @@ workflow CUTANDRUN { * SUBWORKFLOW: Filter reads based on quality metrics * http://biofinysics.blogspot.com/2014/05/how-does-bowtie2-assign-mapq-scores.html */ - // if (params.minimum_alignment_q_score > 0) { - // SAMTOOLS_VIEW_SORT_STATS ( - // ch_samtools_bam - // ) - // ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam - // ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai - // ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats - // ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat - // ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats - // } + if (run_q_filter) { + SAMTOOLS_VIEW_SORT_STATS ( + ch_samtools_bam + ) + ch_samtools_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam + ch_samtools_bai = SAMTOOLS_VIEW_SORT_STATS.out.bai + ch_samtools_stats = SAMTOOLS_VIEW_SORT_STATS.out.stats + ch_samtools_flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat + ch_samtools_idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats + } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view From f79a90758d0f8915df2a00da6ff7758711771fa1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 16 Jul 2021 09:32:28 +0100 Subject: [PATCH 443/675] Added mark/remove dups tests --- conf/modules.config | 68 ++------- nextflow_schema.json | 2 +- tests/test_verify_output_align_intermed.yml | 13 ++ tests/test_verify_output_duplicates.yml | 46 ++++++ workflows/cutandrun.nf | 157 +++++++++++--------- 5 files changed, 159 insertions(+), 127 deletions(-) create mode 100644 tests/test_verify_output_align_intermed.yml create mode 100644 tests/test_verify_output_duplicates.yml diff --git a/conf/modules.config b/conf/modules.config index 0a47ada0..7dd7994e 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -72,7 +72,7 @@ params { /* ======================================================================================== - Q Filtering + Q-FILTERTING ======================================================================================== */ @@ -85,77 +85,33 @@ params { publish_files = false } + /* + ======================================================================================== + DUPLICATES + ======================================================================================== + */ - - - "samtools_qfilter_final" { - suffix = ".filtered" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}" - } - - // MARK DUPS "picard_markduplicates" { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".markdup" - // publish_files = [:] - // publish_dir = "" + suffix = ".target.markdup" publish_files = false } - "picard_markduplicates_intermed" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".markdup" - publish_files = ["bam":"","metrics.txt":"picard_metrics"] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "picard_markduplicates_final" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=false VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".markdup" - publish_files = ["bam":"","metrics.txt":"picard_metrics"] - publish_dir = "aligner/${params.aligner}" - } "picard_markduplicates_samtools" { - suffix = ".markdup.sorted" + suffix = ".target.markdup" publish_files = false - // publish_files = [:] - // publish_dir = "" - } - "picard_markduplicates_samtools_intermed" { - suffix = ".markdup.sorted" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}/intermediate" - } - "picard_markduplicates_samtools_final" { - suffix = ".markdup.sorted" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}" } - // DEDUP "picard_dedup" { args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".dedup" - // publish_files = [:] - // publish_dir = "" + suffix = ".target.dedup" publish_files = false } - "picard_dedup_intermed" { - args = "ASSUME_SORTED=true REMOVE_DUPLICATES=true VALIDATION_STRINGENCY=LENIENT TMP_DIR=tmp" - suffix = ".dedup" - publish_files = ["bam":"","metrics.txt":"picard_metrics"] - publish_dir = "aligner/${params.aligner}/intermediate" - } "picard_dedup_samtools" { - suffix = ".dedup.sorted" - // publish_files = [:] - // publish_dir = "" + suffix = ".target.dedup" + publish_files = false } - "picard_dedup_samtools_intermed" { - suffix = ".dedup.sorted" - publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] - publish_dir = "aligner/${params.aligner}/intermediate" - } + diff --git a/nextflow_schema.json b/nextflow_schema.json index 7a6bbcfc..4613f8e0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -430,7 +430,7 @@ "default": "", "properties": { "dedup_target_reads": { - "type": "string", + "type": "boolean", "default": "False", "description": "Deduplicate target reads. This is NOT recommended since fragments that share exact starting and ending positions are expected to be common, and such \u2018duplicates\u2019 may not be due to duplication during PCR." } diff --git a/tests/test_verify_output_align_intermed.yml b/tests/test_verify_output_align_intermed.yml new file mode 100644 index 00000000..95528ad2 --- /dev/null +++ b/tests/test_verify_output_align_intermed.yml @@ -0,0 +1,13 @@ +- name: test_verify_output_align_intermed + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --save_align_intermed true + tags: + - verify_output + - verify_output/align + - verify_output/align/intermed + files: + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.filtered.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.filtered.bam.flagstat \ No newline at end of file diff --git a/tests/test_verify_output_duplicates.yml b/tests/test_verify_output_duplicates.yml new file mode 100644 index 00000000..9b67651a --- /dev/null +++ b/tests/test_verify_output_duplicates.yml @@ -0,0 +1,46 @@ +- name: test_verify_output_duplicates_mark + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --skip_removeduplicates true + tags: + - verify_output + - verify_output/align + - verify_output/align/duplicates + - verify_output/align/duplicates/mark + files: + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.markdup.bam.flagstat + +- name: test_verify_output_duplicates_remove + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --dedup_target_reads false + tags: + - verify_output + - verify_output/align + - verify_output/align/duplicates + - verify_output/align/duplicates/remove + files: + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.dedup.bam.flagstat + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.dedup.bam + should_exist: false + +- name: test_verify_output_duplicates_remove_target + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --dedup_target_reads true + tags: + - verify_output + - verify_output/align + - verify_output/align/duplicates + - verify_output/align/duplicates/remove_target + files: + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.dedup.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.dedup.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.dedup.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.dedup.bam.flagstat \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 51ce6599..4af6b990 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -74,10 +74,16 @@ def run_q_filter = false def run_mark_dups = true def run_remove_dups = true +if(params.minimum_alignment_q_score > 0) { run_q_filter = true } + if(params.only_genome) { run_input_check = false run_cat_fastq = false run_trim_galore_fastqc = false + run_alignment = false + run_q_filter = false + run_mark_dups = false + run_remove_dups = false } if(params.only_preqc) { @@ -93,9 +99,8 @@ if(params.only_alignment) { run_remove_dups = false } -if(params.minimum_alignment_q_score > 0) { run_q_filter = true } -if(params.skip_markduplicates) { run_mark_dups = false } -if(params.skip_removeduplicates) { run_remove_dups = false } +if(params.skip_markduplicates) { run_mark_dups = false } +if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } if(params.only_filtering) { @@ -165,47 +170,59 @@ if(!run_mark_dups && !run_remove_dups) { samtools_qfilter_options.publish_dir = "02_alignment/${params.aligner}/target" samtools_qfilter_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } +else if(params.save_align_intermed) { + samtools_view_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/qfilter" + samtools_view_options.publish_files = ["bam":""] + samtools_qfilter_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/qfilter" + samtools_qfilter_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} + +// Mark duplicates options +picard_markduplicates_options = modules["picard_markduplicates"] +picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools"] +if(!run_remove_dups) { + picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] + picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} +else if(params.save_align_intermed) { + picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/mark_dup" + picard_markduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] + picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/mark_dup" + picard_markduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} + +// Removed duplicates options +def dedup_control_only = true +if(params.dedup_target_reads) { dedup_control_only = false } + +picard_deduplicates_options = modules["picard_dedup"] +picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] +if(run_remove_dups) { + picard_deduplicates_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_deduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] + picard_deduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_deduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + + if(dedup_control_only) { + picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] + picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] + } +} +else if(params.save_align_intermed) { + picard_deduplicates_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/dedup" + picard_deduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] + picard_deduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/dedup" + picard_deduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] +} + + + + -// def dedup_control_only = true -// if(params.dedup_target_reads) { dedup_control_only = false } - -// // if (!params.skip_markduplicates && params.skip_removeduplicates) { -// if (!params.skip_markduplicates) { -// picard_markduplicates_options = modules["picard_markduplicates_final"] -// picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_final"] -// if (params.publish_align_intermed) { -// bowtie2_align_options = modules["bowtie2_align_intermed"] -// samtools_sort_options = modules["samtools_sort_intermed"] -// samtools_view_options = modules["samtools_view_qfilter_intermed"] -// samtools_qfilter_options = modules["samtools_qfilter_intermed"] -// picard_deduplicates_options = modules["picard_dedup_intermed"] -// picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] -// } else { -// bowtie2_align_options = modules["bowtie2_align"] -// samtools_sort_options = modules["samtools_sort"] -// samtools_view_options = modules["samtools_view_qfilter"] -// samtools_qfilter_options = modules["samtools_qfilter"] -// picard_deduplicates_options = modules["picard_dedup"] -// picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] -// } -// } else { -// samtools_view_options = modules["samtools_view_qfilter_final"] -// samtools_qfilter_options = modules["samtools_qfilter_final"] -// if (params.publish_align_intermed ) { - -// picard_markduplicates_options = modules["picard_markduplicates_intermed"] -// picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools_intermed"] -// picard_deduplicates_options = modules["picard_dedup_intermed"] -// picard_deduplicates_samtools_options = modules["picard_dedup_samtools_intermed"] -// } else { -// bowtie2_align_options = modules["bowtie2_align"] -// samtools_sort_options = modules["samtools_sort"] -// picard_markduplicates_options = modules["picard_markduplicates"] -// picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools"] -// picard_deduplicates_options = modules["picard_dedup"] -// picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] -// } -// } // // Meta annotation options // def awk_bt2_options = modules["awk_bt2"] @@ -281,8 +298,8 @@ include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflow * SUBWORKFLOW: Consisting entirely of nf-core/modules */ include { FASTQC_TRIMGALORE } from "../subworkflows/nf-core/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) -// include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -// include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) +include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) /* ======================================================================================== @@ -422,37 +439,37 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Mark duplicates on all samples */ - // ch_markduplicates_multiqc = Channel.empty() - // if (!params.skip_markduplicates) { - // MARK_DUPLICATES_PICARD ( - // ch_samtools_bam - // ) - // ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam - // ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai - // ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats - // ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat - // ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats - // ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics - // ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) - // } + ch_markduplicates_multiqc = Channel.empty() + if (run_mark_dups) { + MARK_DUPLICATES_PICARD ( + ch_samtools_bam + ) + ch_samtools_bam = MARK_DUPLICATES_PICARD.out.bam + ch_samtools_bai = MARK_DUPLICATES_PICARD.out.bai + ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats + ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat + ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats + ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics + ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) + } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view /* * SUBWORKFLOW: Remove duplicates - default is on IgG controls only */ - // ch_dedup_multiqc = Channel.empty() - // if (!params.skip_markduplicates && !params.skip_removeduplicates) { - // DEDUP_PICARD ( - // ch_samtools_bam - // ) - // ch_samtools_bam = DEDUP_PICARD.out.bam - // ch_samtools_bai = DEDUP_PICARD.out.bai - // ch_samtools_stats = DEDUP_PICARD.out.stats - // ch_samtools_flagstat = DEDUP_PICARD.out.flagstat - // ch_samtools_idxstats = DEDUP_PICARD.out.idxstats - // ch_dedup_multiqc = DEDUP_PICARD.out.metrics - // } + ch_dedup_multiqc = Channel.empty() + if (run_remove_dups) { + DEDUP_PICARD ( + ch_samtools_bam + ) + ch_samtools_bam = DEDUP_PICARD.out.bam + ch_samtools_bai = DEDUP_PICARD.out.bai + ch_samtools_stats = DEDUP_PICARD.out.stats + ch_samtools_flagstat = DEDUP_PICARD.out.flagstat + ch_samtools_idxstats = DEDUP_PICARD.out.idxstats + ch_dedup_multiqc = DEDUP_PICARD.out.metrics + } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] //ch_samtools_bam | view From cfc4f700c0214281f6a21e63551f5695fc5f1cf2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 16 Jul 2021 09:46:23 +0100 Subject: [PATCH 444/675] added intermed tests --- tests/test_verify_output_align_intermed.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/test_verify_output_align_intermed.yml b/tests/test_verify_output_align_intermed.yml index 95528ad2..97217a11 100644 --- a/tests/test_verify_output_align_intermed.yml +++ b/tests/test_verify_output_align_intermed.yml @@ -5,9 +5,11 @@ - verify_output/align - verify_output/align/intermed files: - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam - - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam.bai - - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam.bai - - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.filtered.bam.flagstat - - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.filtered.bam.flagstat \ No newline at end of file + - path: results/02_alignment/bowtie2/target/intermed/align/h3k27me3_R1.target.sorted.bam + - path: results/02_alignment/bowtie2/target/intermed/qfilter/h3k27me3_R1.target.filtered.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.markdup.bam.flagstat From db3171ac30df696543d10ec55eafab6521b4fe62 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 16 Jul 2021 10:01:45 +0100 Subject: [PATCH 445/675] added alignment metadata annotation --- conf/modules.config | 26 +++++++++++----------- workflows/cutandrun.nf | 49 ++++++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7dd7994e..88f0ad37 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -112,7 +112,20 @@ params { publish_files = false } + /* + ======================================================================================== + ANNOTATE META WITH ALIGN + ======================================================================================== + */ + "awk_bt2" { + suffix = ".target" + publish_files = false + } + "awk_bt2_spikein" { + suffix = ".spikein" + publish_files = false + } @@ -230,18 +243,7 @@ params { ======================================================================================== */ - "awk_bt2" { - args = "" - suffix = ".target" - publish_dir = "" - publish_files = false - } - "awk_bt2_spikein" { - args = "" - suffix = ".spikein" - publish_dir = "" - publish_files = false - } + "awk_dedup" { args = "" suffix = ".awk" diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 4af6b990..b237ebbf 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -219,16 +219,11 @@ else if(params.save_align_intermed) { picard_deduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } - - - - - -// // Meta annotation options -// def awk_bt2_options = modules["awk_bt2"] -// def awk_bt2_spikein_options = modules["awk_bt2_spikein"] -// def awk_dedup_options = modules["awk_dedup"] -// def awk_dt_frag_options = modules["awk_dt_frag"] +// Meta annotation options +def awk_bt2_options = modules["awk_bt2"] +def awk_bt2_spikein_options = modules["awk_bt2_spikein"] +def awk_dedup_options = modules["awk_dedup"] +def awk_dt_frag_options = modules["awk_dt_frag"] // def multiqc_options = modules["multiqc"] // multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" @@ -270,9 +265,11 @@ include { CAT_FASTQ } from "../modules/local/cat_fastq" include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options, samtools_options: samtools_sort_options ) include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) + // include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) -// include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) -// include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) + // include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "",meta_prefix: "dedup_", script_mode: false ) // include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, meta_suffix: "", meta_prefix: "", script_mode: true ) // include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"]) @@ -477,25 +474,25 @@ workflow CUTANDRUN { * SUBWORKFLOW: Annotate meta-data with aligner stats for target and spike-in * the meta-data is annotated additivley so we only need to track the final channel output */ - // if (params.aligner == "bowtie2") { - // ANNOTATE_BT2_META ( - // ch_samtools_bam, - // ch_bowtie2_log, - // ch_bt2_to_csv_awk - // ) + if (params.aligner == "bowtie2" && run_alignment) { + ANNOTATE_BT2_META ( + ch_samtools_bam, + ch_bowtie2_log, + ch_bt2_to_csv_awk + ) - // ANNOTATE_BT2_SPIKEIN_META ( - // ANNOTATE_BT2_META.out.output, - // ch_bowtie2_spikein_log, - // ch_bt2_to_csv_awk - // ) - // ch_samtools_bam = ANNOTATE_BT2_SPIKEIN_META.out.output - // } + ANNOTATE_BT2_SPIKEIN_META ( + ANNOTATE_BT2_META.out.output, + ch_bowtie2_spikein_log, + ch_bt2_to_csv_awk + ) + ch_samtools_bam = ANNOTATE_BT2_SPIKEIN_META.out.output + } // META-DATA example state: //[[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764], BAM] - //ch_samtools_bam | view + ch_samtools_bam | view //EXPORT_META ( ch_annotated_meta.collect{ it[0] } ) /* From c3d76ea1b18da54d2acc9392a95af28ffcc9ab0e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 16 Jul 2021 12:49:41 +0100 Subject: [PATCH 446/675] Added bam t bed graph and fixed long standing issue in mark dups --- conf/modules.config | 93 +++++----- nextflow.config | 3 +- .../nf-core/mark_duplicates_picard.nf | 14 +- ...OMPLETE_test_only_switches_run_through.yml | 0 workflows/cutandrun.nf | 166 ++++++++++-------- 5 files changed, 155 insertions(+), 121 deletions(-) create mode 100644 tests/_INCOMPLETE_test_only_switches_run_through.yml diff --git a/conf/modules.config b/conf/modules.config index 88f0ad37..ddd735b3 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -127,6 +127,57 @@ params { publish_files = false } + /* + ======================================================================================== + SCALING/CONVERSION AND PEAK CALLING + ======================================================================================== + */ + + "bedtools_genomecov_bedgraph" { + publish_dir = "03_peak_calling/01_bam_to_bedgraph" + } + + /* + ======================================================================================== + CALCULATE BAM->BED FRAGMENTS + ======================================================================================== + */ + + "calc_frag_samtools_view" { + args = "-F 0x04 -b" + suffix = ".mapped" + publish_dir = "" + publish_files = false + } + "calc_frag_samtools" { + args = "" + suffix = ".mapped" + publish_dir = "" + publish_files = false + } + "calc_frag_bamtobed" { + args = "-bedpe" + suffix = "" + publish_dir = "" + publish_files = false + } + "calc_frag_awk" { + args = "" + suffix = ".clean" + ext = "bed" + publish_dir = "" + command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" + command2 = "" + publish_files = false + } + "calc_frag_cut" { + args = "-f 1,2,6" + suffix = ".frags" + ext = "bed" + publish_dir = "" + command = "| sort -k1,1 -k2,2n -k3,3n" + publish_files = false + } @@ -136,11 +187,7 @@ params { publish_dir = "seacr/consensus_peaks" suffix = ".consensus.peaks" } - "bedtools_genomecov_bedgraph" { - args = "" - suffix = "" - publish_dir = "genomecov" - } + "seacr" { args = "non stringent" suffix = ".peaks.bed" @@ -173,41 +220,7 @@ params { "generate_reports" { publish_dir = "reports" } - "calc_frag_samtools_view" { - args = "-F 0x04 -b" - suffix = ".mapped" - publish_dir = "" - publish_files = false - } - "calc_frag_samtools" { - args = "" - suffix = ".mapped" - publish_dir = "" - publish_files = false - } - "calc_frag_bamtobed" { - args = "-bedpe" - suffix = "" - publish_dir = "" - publish_files = false - } - "calc_frag_awk" { - args = "" - suffix = ".clean" - ext = "bed" - publish_dir = "" - command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" - command2 = "" - publish_files = false - } - "calc_frag_cut" { - args = "-f 1,2,6" - suffix = ".frags" - ext = "bed" - publish_dir = "" - command = "| sort -k1,1 -k2,2n -k3,3n" - publish_files = false - } + "samtools_frag_len" { args = "-F 0x04" args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" diff --git a/nextflow.config b/nextflow.config index 8d9fd663..d7ccefdd 100644 --- a/nextflow.config +++ b/nextflow.config @@ -54,7 +54,7 @@ params { dedup_target_reads = false only_filtering = false - // Coverage + // Read Normalisation skip_scale = false normalisation_c = 10000 @@ -63,6 +63,7 @@ params { peak_threshold = 0.05 skip_peakcalling = false replicate_threshold = 1 + only_peak_calling = false // Reporting and Visualisation skip_igv = false diff --git a/subworkflows/nf-core/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf index ee7de5cd..96d40d7d 100644 --- a/subworkflows/nf-core/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -41,12 +41,22 @@ workflow MARK_DUPLICATES_PICARD { out_bam = out_bam.mix ( ch_split.target ) } + //out_bam | view /* - * Index BAM file and run samtools stats, flagstat and idxstats + * Index BAM file */ SAMTOOLS_INDEX ( out_bam ) - BAM_STATS_SAMTOOLS ( out_bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) + + // Join bam/bai + ch_bam_sample_id = out_bam.map { row -> [row[0].id, row] } + ch_bai_sample_id = SAMTOOLS_INDEX.out.bai.map { row -> [row[0].id, row] } + ch_bam_bai = ch_bam_sample_id.join(ch_bai_sample_id, by: [0]).map {row -> [row[1][0], row[1][1], row[2][1]]} + + /* + * Run samtools stats, flagstat and idxstats + */ + BAM_STATS_SAMTOOLS ( ch_bam_bai ) emit: bam = out_bam // channel: [ val(meta), [ bam ] ] diff --git a/tests/_INCOMPLETE_test_only_switches_run_through.yml b/tests/_INCOMPLETE_test_only_switches_run_through.yml new file mode 100644 index 00000000..e69de29b diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index b237ebbf..f85027df 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -73,8 +73,9 @@ def run_alignment = true def run_q_filter = false def run_mark_dups = true def run_remove_dups = true +def run_peak_calling = true -if(params.minimum_alignment_q_score > 0) { run_q_filter = true } +if(params.minimum_alignment_q_score > 0) { run_q_filter = true } if(params.only_genome) { run_input_check = false @@ -84,26 +85,32 @@ if(params.only_genome) { run_q_filter = false run_mark_dups = false run_remove_dups = false + run_peak_calling = false } if(params.only_preqc) { - run_alignment = false - run_q_filter = false - run_mark_dups = false - run_remove_dups = false + run_alignment = false + run_q_filter = false + run_mark_dups = false + run_remove_dups = false + run_peak_calling = false } if(params.only_alignment) { - run_q_filter = false - run_mark_dups = false - run_remove_dups = false + run_q_filter = false + run_mark_dups = false + run_remove_dups = false + run_peak_calling = false } if(params.skip_markduplicates) { run_mark_dups = false } if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } if(params.only_filtering) { + run_peak_calling = false +} +if(params.only_peak_calling) { } /* @@ -245,7 +252,7 @@ def awk_dt_frag_options = modules["awk_dt_frag"] */ include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) -// include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) +include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) // include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) // include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) // include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) @@ -268,6 +275,7 @@ include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflow include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) + // include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) // include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "",meta_prefix: "dedup_", script_mode: false ) @@ -373,21 +381,22 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Alignment to target and spikein genome using botwtie2 */ + ch_orig_bam = Channel.empty() + ch_orig_spikein_bam = Channel.empty() + ch_bowtie2_log = Channel.empty() + ch_bowtie2_spikein_log = Channel.empty() + ch_samtools_bam = Channel.empty() + ch_samtools_bai = Channel.empty() + ch_samtools_stats = Channel.empty() + ch_samtools_flagstat = Channel.empty() + ch_samtools_idxstats = Channel.empty() + ch_samtools_spikein_bam = Channel.empty() + ch_samtools_spikein_bai = Channel.empty() + ch_samtools_spikein_stats = Channel.empty() + ch_samtools_spikein_flagstat = Channel.empty() + ch_samtools_spikein_idxstats = Channel.empty() if(run_alignment) { - ch_orig_bam = Channel.empty() - ch_orig_spikein_bam = Channel.empty() - ch_bowtie2_log = Channel.empty() - ch_bowtie2_spikein_log = Channel.empty() - ch_samtools_bam = Channel.empty() - ch_samtools_bai = Channel.empty() - ch_samtools_stats = Channel.empty() - ch_samtools_flagstat = Channel.empty() - ch_samtools_idxstats = Channel.empty() - ch_samtools_spikein_bam = Channel.empty() - ch_samtools_spikein_bai = Channel.empty() - ch_samtools_spikein_stats = Channel.empty() - ch_samtools_spikein_flagstat = Channel.empty() - ch_samtools_spikein_idxstats = Channel.empty() + if (params.aligner == "bowtie2") { ALIGN_BOWTIE2 ( ch_trimmed_reads, @@ -492,42 +501,41 @@ workflow CUTANDRUN { //[[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764], BAM] - ch_samtools_bam | view + //ch_samtools_bam | view //EXPORT_META ( ch_annotated_meta.collect{ it[0] } ) /* * CHANNEL: Calculate scale factor for each sample based on a constant devided by the number - * of reads aligned to the spike-in genome. Optionally skipped. + * of reads aligned to the spike-in genome. */ - // if (!params.skip_scale) { - // ch_samtools_bam - // .map { row -> - // def denominator = row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger() - // [ row[0].id, params.normalisation_c / (denominator != 0 ? denominator : 1) ] - // } - // .set { ch_scale_factor } - // } else { - // ch_samtools_bam - // .map { row -> - // [ row[0].id, 1 ] - // } - // .set { ch_scale_factor } - // } - + if (!params.skip_scale) { + ch_samtools_bam + .map { row -> + def denominator = row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger() + [ row[0].id, params.normalisation_c / (denominator != 0 ? denominator : 1) ] + } + .set { ch_scale_factor } + } else { + ch_samtools_bam + .map { row -> + [ row[0].id, 1 ] + } + .set { ch_scale_factor } + } // EXAMPLE CHANNEL STRUCT: [id, scale_factor] //ch_scale_factor | view /* * CHANNEL: Create a channel with the scale factor as a seperate value */ - // ch_samtools_bam - // .map { row -> [row[0].id, row ].flatten()} - // .join ( ch_scale_factor ) - // .map { row -> row[1..(row.size() - 1)] } - // .map { row -> - // row[0].put("scale_factor", row[2]) - // [ row[0], row[1], row[2] ] } - // .set { ch_samtools_bam_scale } + ch_samtools_bam + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_scale_factor ) + .map { row -> row[1..(row.size() - 1)] } + .map { row -> + row[0].put("scale_factor", row[2]) + [ row[0], row[1], row[2] ] } + .set { ch_samtools_bam_scale } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, @@ -537,42 +545,30 @@ workflow CUTANDRUN { /* * CHANNEL: Add the scale factor values to the main meta-data stream */ - // ch_samtools_bam_scale - // .map { row -> [ row[0], row[1] ] } - // .set { ch_samtools_bam_sf } - // ch_samtools_bam = ch_samtools_bam_sf + ch_samtools_bam_scale + .map { row -> [ row[0], row[1] ] } + .set { ch_samtools_bam_sf } + ch_samtools_bam = ch_samtools_bam_sf //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, // scale_factor:10000], BAM] //ch_samtools_bam | view - /* - * SUBWORKFLOW: Calculate fragment bed from bams - * - Filter for mapped reads - * - Convert to bed file - * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp - * - Only extract the fragment related columns using cut - */ - // CALCULATE_FRAGMENTS ( - // ch_samtools_bam - // ) - // ch_software_versions = ch_software_versions.mix(CALCULATE_FRAGMENTS.out.bedtools_version.first().ifEmpty(null)) - //EXAMPLE CHANNEL STRUCT: NO CHANGE - //CALCULATE_FRAGMENTS.out.bed | view - - /* - * MODULE: Convert bam files to bedgraph - */ - // BEDTOOLS_GENOMECOV_SCALE ( - // ch_samtools_bam_scale - // ) - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], BEDGRAPH] - //BEDTOOLS_GENOMECOV_SCALE.out.bedgraph | view - + if(run_peak_calling) { + /* + * MODULE: Convert bam files to bedgraph + */ + BEDTOOLS_GENOMECOV_SCALE ( + ch_samtools_bam_scale + ) + //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, + // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, + // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, + // scale_factor:10000], BEDGRAPH] + //BEDTOOLS_GENOMECOV_SCALE.out.bedgraph | view + } + /* * MODULE: Clip off bedgraphs so none overlap beyond chromosome edge */ @@ -965,6 +961,20 @@ workflow CUTANDRUN { // dedup_estimated_library_size:], BAM] //ch_samtools_bam | view + // /* + // * SUBWORKFLOW: Calculate fragment bed from bams + // * - Filter for mapped reads + // * - Convert to bed file + // * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp + // * - Only extract the fragment related columns using cut + // */ + // CALCULATE_FRAGMENTS ( + // ch_samtools_bam + // ) + // ch_software_versions = ch_software_versions.mix(CALCULATE_FRAGMENTS.out.bedtools_version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: NO CHANGE + //CALCULATE_FRAGMENTS.out.bed | view + /* * MODULE: Bin the fragments into 500bp bins ready for downstream reporting */ From 21bafb1e7646be64f7f107022c3fa4073eda35a4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 27 Jul 2021 09:22:06 +0100 Subject: [PATCH 447/675] added bedclip and big wig back in --- conf/modules.config | 17 ++--- nextflow.config | 2 +- workflows/cutandrun.nf | 138 +++++++++++++++++++---------------------- 3 files changed, 75 insertions(+), 82 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index ddd735b3..22bc43ff 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -137,6 +137,15 @@ params { publish_dir = "03_peak_calling/01_bam_to_bedgraph" } + "ucsc_bedclip" { + suffix = ".clipped" + publish_dir = "03_peak_calling/02_clip_bed" + } + + "ucsc_bedgraphtobigwig" { + publish_dir = "03_peak_calling/03_bed_to_bigwig" + } + /* ======================================================================================== CALCULATE BAM->BED FRAGMENTS @@ -197,13 +206,7 @@ params { args = "-k1,1 -k2,2n" publish_files = false } - "ucsc_bedclip" { - suffix = ".clip" - publish_files = false - } - "ucsc_bedgraphtobigwig" { - publish_dir = "ucsc/bedgraphtobigwig" - } + "deeptools_fragmentsize" { publish_dir = "deeptools" } diff --git a/nextflow.config b/nextflow.config index d7ccefdd..a3d807f0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -61,8 +61,8 @@ params { // SEACR Peak Calling igg_control = true peak_threshold = 0.05 - skip_peakcalling = false replicate_threshold = 1 + skip_peak_calling = false only_peak_calling = false // Reporting and Visualisation diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index f85027df..028fc9d3 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -75,7 +75,10 @@ def run_mark_dups = true def run_remove_dups = true def run_peak_calling = true -if(params.minimum_alignment_q_score > 0) { run_q_filter = true } +if(params.minimum_alignment_q_score > 0) { run_q_filter = true } +if(params.skip_markduplicates) { run_mark_dups = false } +if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } +if(params.skip_peak_calling) { run_peak_calling = false } if(params.only_genome) { run_input_check = false @@ -103,9 +106,6 @@ if(params.only_alignment) { run_peak_calling = false } -if(params.skip_markduplicates) { run_mark_dups = false } -if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } - if(params.only_filtering) { run_peak_calling = false } @@ -291,13 +291,13 @@ include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflow /* * MODULES */ -// include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) +include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) +include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) // include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) // include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) // include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) // include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) // include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) -// include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -536,10 +536,7 @@ workflow CUTANDRUN { row[0].put("scale_factor", row[2]) [ row[0], row[1], row[2] ] } .set { ch_samtools_bam_scale } - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], BAM, SCALE_FACTOR] + //EXAMPLE CHANNEL STRUCT: [[META + scale_factor:10000], BAM, SCALE_FACTOR] //ch_samtools_bam_scale | view /* @@ -549,10 +546,7 @@ workflow CUTANDRUN { .map { row -> [ row[0], row[1] ] } .set { ch_samtools_bam_sf } ch_samtools_bam = ch_samtools_bam_sf - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], BAM] + //EXAMPLE CHANNEL STRUCT: [[META], BAM] //ch_samtools_bam | view if(run_peak_calling) { @@ -562,39 +556,30 @@ workflow CUTANDRUN { BEDTOOLS_GENOMECOV_SCALE ( ch_samtools_bam_scale ) - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], BEDGRAPH] + //EXAMPLE CHANNEL STRUCT: [META], BEDGRAPH] //BEDTOOLS_GENOMECOV_SCALE.out.bedgraph | view - } - - /* - * MODULE: Clip off bedgraphs so none overlap beyond chromosome edge - */ - // UCSC_BEDCLIP ( - // BEDTOOLS_GENOMECOV_SCALE.out.bedgraph, - // PREPARE_GENOME.out.chrom_sizes - // ) - //EXAMPLE CHANNEL STRUCT: NO CHANGE - //UCSC_BEDCLIP.out.bedgraph | view - /* - * MODULE: Convert bedgraph to bigwig - */ - // UCSC_BEDGRAPHTOBIGWIG ( - // UCSC_BEDCLIP.out.bedgraph, - // PREPARE_GENOME.out.chrom_sizes - // ) - // ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], BIGWIG] - //UCSC_BEDGRAPHTOBIGWIG.out.bigwig | view + /* + * MODULE: Clip off bedgraphs so none overlap beyond chromosome edge + */ + UCSC_BEDCLIP ( + BEDTOOLS_GENOMECOV_SCALE.out.bedgraph, + PREPARE_GENOME.out.chrom_sizes + ) + //EXAMPLE CHANNEL STRUCT: [META], BEDGRAPH] + //UCSC_BEDCLIP.out.bedgraph | view + + /* + * MODULE: Convert bedgraph to bigwig + */ + UCSC_BEDGRAPHTOBIGWIG ( + UCSC_BEDCLIP.out.bedgraph, + PREPARE_GENOME.out.chrom_sizes + ) + ch_software_versions = ch_software_versions.mix(UCSC_BEDGRAPHTOBIGWIG.out.version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: [[META], BIGWIG] + //UCSC_BEDGRAPHTOBIGWIG.out.bigwig | view - // ch_seacr_bed = Channel.empty() - //if(!params.skip_peakcalling) { /* * CHANNEL: Separate bedgraphs into target/control pairings for each replicate */ @@ -603,42 +588,47 @@ workflow CUTANDRUN { // control: it[0].group == "igg" // } // .set { ch_bedgraph_split } - //EXAMPLE CHANNEL STRUCT: NO CHANGE //ch_bedgraph_split.target | view //ch_bedgraph_split.control | view - // if (params.igg_control) { + // if(params.igg_control) { + // /* + // * CHANNEL: Collect experimental replicate numbers + // */ + // ch_bedgraph_split.target + // .combine( ch_bedgraph_split.control ) + // .map { row -> [ row[0].replicate ] } + // .collect() + // .map { row -> [ 0, row ] } + // .set { ch_experimental_reps } + // ch_experimental_reps | view - /* - * CHANNEL: Collect experimental replicate numbers - */ - // ch_bedgraph_split.target - // .combine( ch_bedgraph_split.control ) - // .map { row -> [ row[0].replicate ] } - // .collect() - // .map { row -> [ 0, row ] } - // .set { ch_experimental_reps } - // ch_experimental_reps | view + // /* + // * CHANNEL: Collect IgG control replicate numbers + // */ + // ch_bedgraph_split.target + // .combine(ch_bedgraph_split.control) + // .map { row -> [ row[2].replicate ] } + // .collect() + // .map { row -> [ 0, row ] } + // .set { ch_control_reps } + // ch_control_reps | view + + // /* + // * CHANNEL: Combine experimental and control replicate numbers, each nested separately in array + // */ + // ch_control_reps + // .combine( ch_experimental_reps, by: 0 ) + // .map { row -> row[1..-1] } + // .set{ ch_replicate_numbers } + // ch_replicate_numbers | view + // } + } + + + // ch_seacr_bed = Channel.empty() - /* - * CHANNEL: Collect IgG control replicate numbers - */ - // ch_bedgraph_split.target - // .combine(ch_bedgraph_split.control) - // .map { row -> [ row[2].replicate ] } - // .collect() - // .map { row -> [ 0, row ] } - // .set { ch_control_reps } - // ch_control_reps | view - /* - * CHANNEL: Combine experimental and control replicate numbers, each nested separately in array - */ - // ch_control_reps - // .combine( ch_experimental_reps, by: 0 ) - // .map { row -> row[1..-1] } - // .set{ ch_replicate_numbers } - // ch_replicate_numbers | view /* * CHANNEL: Create channel with elements of the following structure From 2bd12f0f447645aa13ba9783319d9b1d89ab633d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 27 Jul 2021 09:37:24 +0100 Subject: [PATCH 448/675] Fixed bam/bai join in bam_sort_samtools --- subworkflows/nf-core/bam_sort_samtools.nf | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/subworkflows/nf-core/bam_sort_samtools.nf b/subworkflows/nf-core/bam_sort_samtools.nf index 42911063..34fce8d2 100644 --- a/subworkflows/nf-core/bam_sort_samtools.nf +++ b/subworkflows/nf-core/bam_sort_samtools.nf @@ -14,9 +14,25 @@ workflow BAM_SORT_SAMTOOLS { ch_bam // channel: [ val(meta), [ bam ] ] main: + /* + * SORT BAM file + */ SAMTOOLS_SORT ( ch_bam ) + + /* + * Index BAM file + */ SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - BAM_STATS_SAMTOOLS ( SAMTOOLS_SORT.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) + + // Join bam/bai + ch_bam_sample_id = SAMTOOLS_SORT.out.bam.map { row -> [row[0].id, row] } + ch_bai_sample_id = SAMTOOLS_INDEX.out.bai.map { row -> [row[0].id, row] } + ch_bam_bai = ch_bam_sample_id.join(ch_bai_sample_id, by: [0]).map {row -> [row[1][0], row[1][1], row[2][1]]} + + /* + * Run samtools stats, flagstat and idxstats + */ + BAM_STATS_SAMTOOLS ( ch_bam_bai ) emit: bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] From d21dc5b6dec04c4e3e4bf8aaa880d26a823da4a4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 27 Jul 2021 11:47:26 +0100 Subject: [PATCH 449/675] added control group and samplesheet testing --- .gitignore | 2 + bin/check_samplesheet.py | 52 +++++++++++--- nextflow.config | 1 + tests/_INOMPLETE_IGG_FLOW_TESTS.yml | 0 .../multiple_sample_multiple_igg.csv | 8 +++ .../multiple_sample_single_igg.csv | 6 ++ tests/data/samplesheets/no_igg.csv | 2 + tests/data/samplesheets/rep_id_start_1.csv | 3 + .../samplesheets/single_sample_single_igg.csv | 3 + .../single_sample_single_igg_neg.csv | 3 + ..._sample_single_igg_non_matching_groups.csv | 4 ++ ...ingle_igg_non_matching_groups_tech_rep.csv | 5 ++ tests/test_samplesheet_check.yml | 72 +++++++++++++++++++ tests/test_verify_output_only_input.yml | 8 +++ workflows/cutandrun.nf | 26 +++++-- 15 files changed, 179 insertions(+), 16 deletions(-) create mode 100644 tests/_INOMPLETE_IGG_FLOW_TESTS.yml create mode 100644 tests/data/samplesheets/multiple_sample_multiple_igg.csv create mode 100644 tests/data/samplesheets/multiple_sample_single_igg.csv create mode 100644 tests/data/samplesheets/no_igg.csv create mode 100644 tests/data/samplesheets/rep_id_start_1.csv create mode 100644 tests/data/samplesheets/single_sample_single_igg.csv create mode 100644 tests/data/samplesheets/single_sample_single_igg_neg.csv create mode 100644 tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv create mode 100644 tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv create mode 100644 tests/test_samplesheet_check.yml create mode 100644 tests/test_verify_output_only_input.yml diff --git a/.gitignore b/.gitignore index 54f38a93..86425ed2 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ dev/docker/static_reports/test_data/* dev/docker/static_reports/test_output/* !dev/docker/static_reports/test_data/_dummy.txt !dev/docker/static_reports/test_output/_dummy.txt + +!tests/data/ diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index d2a523d3..8958ce66 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -43,11 +43,13 @@ def check_samplesheet(file_in, file_out, igg_control): """ This function checks that the samplesheet follows the following structure: - group,replicate,fastq_1,fastq_2 - WT,1,WT_LIB1_REP1_1.fastq.gz,WT_LIB1_REP1_2.fastq.gz - WT,1,WT_LIB2_REP1_1.fastq.gz,WT_LIB2_REP1_2.fastq.gz - WT,2,WT_LIB1_REP2_1.fastq.gz,WT_LIB1_REP2_2.fastq.gz - KO,1,KO_LIB1_REP1_1.fastq.gz,KO_LIB1_REP1_2.fastq.gz + group,replicate,control_group,fastq_1,fastq_2 + WT,1,1,WT_LIB1_REP1_1.fastq.gz,WT_LIB1_REP1_2.fastq.gz + WT,1,1,WT_LIB2_REP1_1.fastq.gz,WT_LIB2_REP1_2.fastq.gz + WT,2,1,WT_LIB1_REP2_1.fastq.gz,WT_LIB1_REP2_2.fastq.gz + KO,1,2,KO_LIB1_REP1_1.fastq.gz,KO_LIB1_REP1_2.fastq.gz + IGG,1,1,KO_LIB1_REP1_1.fastq.gz,IGG_LIB1_REP1_2.fastq.gz + IGG,2,2,KO_LIB1_REP1_1.fastq.gz,IGG_LIB1_REP1_2.fastq.gz """ igg_present = False @@ -57,7 +59,7 @@ def check_samplesheet(file_in, file_out, igg_control): ## Check header MIN_COLS = 3 - HEADER = ["group", "replicate", "fastq_1", "fastq_2"] + HEADER = ["group", "replicate", "control_group", "fastq_1", "fastq_2"] header = [x.strip('"') for x in fin.readline().strip().split(",")] if header[: len(HEADER)] != HEADER: print("ERROR: Please check samplesheet header -> {} != {}".format(",".join(header), ",".join(HEADER))) @@ -87,7 +89,7 @@ def check_samplesheet(file_in, file_out, igg_control): ) ## Check sample name entries - sample, replicate, fastq_1, fastq_2 = lspl[: len(HEADER)] + sample, replicate, control_group, fastq_1, fastq_2 = lspl[: len(HEADER)] if sample: if sample.find(" ") != -1: print_error("Group entry contains spaces!", "Line", line) @@ -114,9 +116,9 @@ def check_samplesheet(file_in, file_out, igg_control): ## Auto-detect paired-end/single-end sample_info = [] if sample and fastq_1 and fastq_2: ## Paired-end short reads - sample_info = [sample, str(replicate), "0", fastq_1, fastq_2] + sample_info = [sample, str(replicate), "0", control_group, fastq_1, fastq_2] elif sample and fastq_1 and not fastq_2: ## Single-end short reads - sample_info = [sample, str(replicate), "1", fastq_1, fastq_2] + sample_info = [sample, str(replicate), "1", control_group, fastq_1, fastq_2] else: print_error("Invalid combination of columns provided!", "Line", line) ## Create sample mapping dictionary = {sample: {replicate : [ single_end, fastq_1, fastq_2 ]}} @@ -139,13 +141,25 @@ def check_samplesheet(file_in, file_out, igg_control): print("ERROR: Parameter --igg_control was set to false, but an 'igg' group was found in " + str(file_in) + ".") sys.exit(1) + ## Check control groups have unique ids that are the same as their replicate ids + control_group_ids = [] + if igg_present: + for key, data in sample_run_dict["igg"].items(): + for tech_rep in data: + if tech_rep[3] not in control_group_ids: + control_group_ids.append(tech_rep[3]) + + if(tech_rep[3] != str(key)): + print("ERROR: IgG groups must have a control id equal to the replicate id") + sys.exit(1) + ## Write validated samplesheet with appropriate columns if len(sample_run_dict) > 0: out_dir = os.path.dirname(file_out) make_dir(out_dir) with open(file_out, "w") as fout: - fout.write(",".join(["id", "group", "replicate", "single_end", "fastq_1", "fastq_2"]) + "\n") + fout.write(",".join(["id", "group", "replicate", "control_group", "single_end", "fastq_1", "fastq_2"]) + "\n") for sample in sorted(sample_run_dict.keys()): ## Check that replicate ids are in format 1.. @@ -158,6 +172,24 @@ def check_samplesheet(file_in, file_out, igg_control): ) for replicate in sorted(sample_run_dict[sample].keys()): + ## Check control group exists + if igg_present: + for tech_rep in sample_run_dict[sample][replicate]: + if tech_rep[3] not in control_group_ids: + print_error( + "Control group does not exist", + tech_rep[3] + ) + + ## Check tech reps have same control group id + check_group = sample_run_dict[sample][replicate][0][3] + for tech_rep in sample_run_dict[sample][replicate]: + if tech_rep[3] != check_group: + print_error( + "Control group must match within technical replicates", + tech_rep[3] + ) + ## Check that multiple runs of the same sample are of the same datatype if not all( x[0] == sample_run_dict[sample][replicate][0][0] for x in sample_run_dict[sample][replicate] diff --git a/nextflow.config b/nextflow.config index a3d807f0..23cac689 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,6 +24,7 @@ params { // Input and merging input = null save_merged_fastq = false + only_input = false // Pre-align QC skip_fastqc = false diff --git a/tests/_INOMPLETE_IGG_FLOW_TESTS.yml b/tests/_INOMPLETE_IGG_FLOW_TESTS.yml new file mode 100644 index 00000000..e69de29b diff --git a/tests/data/samplesheets/multiple_sample_multiple_igg.csv b/tests/data/samplesheets/multiple_sample_multiple_igg.csv new file mode 100644 index 00000000..05450d3d --- /dev/null +++ b/tests/data/samplesheets/multiple_sample_multiple_igg.csv @@ -0,0 +1,8 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +h3k27me3,2,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +h3k27me3_2,1,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +h3k27me3_2,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz +igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz +igg,3,3,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/multiple_sample_single_igg.csv b/tests/data/samplesheets/multiple_sample_single_igg.csv new file mode 100644 index 00000000..95112ed4 --- /dev/null +++ b/tests/data/samplesheets/multiple_sample_single_igg.csv @@ -0,0 +1,6 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +h3k27me3,2,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +h3k27me3_2,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +h3k27me3_2,2,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/no_igg.csv b/tests/data/samplesheets/no_igg.csv new file mode 100644 index 00000000..53ba532e --- /dev/null +++ b/tests/data/samplesheets/no_igg.csv @@ -0,0 +1,2 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/rep_id_start_1.csv b/tests/data/samplesheets/rep_id_start_1.csv new file mode 100644 index 00000000..f4b80aa0 --- /dev/null +++ b/tests/data/samplesheets/rep_id_start_1.csv @@ -0,0 +1,3 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg.csv b/tests/data/samplesheets/single_sample_single_igg.csv new file mode 100644 index 00000000..20107bd9 --- /dev/null +++ b/tests/data/samplesheets/single_sample_single_igg.csv @@ -0,0 +1,3 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg_neg.csv b/tests/data/samplesheets/single_sample_single_igg_neg.csv new file mode 100644 index 00000000..94816697 --- /dev/null +++ b/tests/data/samplesheets/single_sample_single_igg_neg.csv @@ -0,0 +1,3 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +igg,1,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv b/tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv new file mode 100644 index 00000000..f30222fe --- /dev/null +++ b/tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv @@ -0,0 +1,4 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,3,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz +igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv b/tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv new file mode 100644 index 00000000..a717e709 --- /dev/null +++ b/tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv @@ -0,0 +1,5 @@ +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz +h3k27me3,1,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/test_rep1_r2.fastq.gz +igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz +igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/test_samplesheet_check.yml b/tests/test_samplesheet_check.yml new file mode 100644 index 00000000..638b09ea --- /dev/null +++ b/tests/test_samplesheet_check.yml @@ -0,0 +1,72 @@ +- name: test_samplesheet_check_test_id_1 + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/rep_id_start_1.csv + tags: + - samplesheet + - samplesheet/start_1 + exit_code: 1 + +- name: test_samplesheet_check_noigg_pos + command: nextflow run main.nf -profile docker,test --only_input true --igg_control false --input tests/data/samplesheets/no_igg.csv + tags: + - samplesheet + - samplesheet/no_igg + - samplesheet/no_igg/pos + files: + - path: results/pipeline_info/samplesheet.valid.csv + +- name: test_samplesheet_check_noigg_neg + command: nextflow run main.nf -profile docker,test --only_input true --igg_control true --input tests/data/samplesheets/no_igg.csv + tags: + - samplesheet + - samplesheet/no_igg + - samplesheet/no_igg/neg + exit_code: 1 + +- name: test_samplesheet_check_1_1_pos + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg.csv + tags: + - samplesheet + - samplesheet/1_1 + - samplesheet/1_1/pos + files: + - path: results/pipeline_info/samplesheet.valid.csv + +- name: test_samplesheet_check_1_1_neg + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_neg.csv + tags: + - samplesheet + - samplesheet/1_1 + - samplesheet/1_1/neg + exit_code: 1 + +- name: test_samplesheet_check_1_2_group_match + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv + tags: + - samplesheet + - samplesheet/1_2 + - samplesheet/1_2/group_match + exit_code: 1 + +- name: test_samplesheet_check_2_2_group_match_tech_rep + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv + tags: + - samplesheet + - samplesheet/2_2 + - samplesheet/2_2/group_match_tech_rep + exit_code: 1 + +- name: test_samplesheet_check_multiple_sample_single_igg + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_single_igg.csv + tags: + - samplesheet + - samplesheet/M_1 + files: + - path: results/pipeline_info/samplesheet.valid.csv + +- name: test_samplesheet_check_multiple_sample_multiple_igg + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_multiple_igg.csv + tags: + - samplesheet + - samplesheet/M_M + files: + - path: results/pipeline_info/samplesheet.valid.csv \ No newline at end of file diff --git a/tests/test_verify_output_only_input.yml b/tests/test_verify_output_only_input.yml new file mode 100644 index 00000000..1c29d17a --- /dev/null +++ b/tests/test_verify_output_only_input.yml @@ -0,0 +1,8 @@ +- name: test_verify_output_only_input + command: nextflow run main.nf -profile docker,test --only_input true + tags: + - verify_output + - verify_output/input + - verify_output/only_input + files: + - path: results/pipeline_info/samplesheet.valid.csv \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 028fc9d3..8037dbf2 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -66,6 +66,7 @@ ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multi ======================================================================================== */ +def run_genome_prep = true def run_input_check = true def run_cat_fastq = true def run_trim_galore_fastqc = true @@ -80,6 +81,17 @@ if(params.skip_markduplicates) { run_mark_dups = false } if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } if(params.skip_peak_calling) { run_peak_calling = false } +if(params.only_input) { + run_genome_prep = false + run_cat_fastq = false + run_trim_galore_fastqc = false + run_alignment = false + run_q_filter = false + run_mark_dups = false + run_remove_dups = false + run_peak_calling = false +} + if(params.only_genome) { run_input_check = false run_cat_fastq = false @@ -92,6 +104,7 @@ if(params.only_genome) { } if(params.only_preqc) { + run_genome_prep = false run_alignment = false run_q_filter = false run_mark_dups = false @@ -320,11 +333,13 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Uncompress and prepare reference genome files */ - PREPARE_GENOME ( - prepare_tool_indices - ) - ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) - ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.samtools_version.ifEmpty(null)) + if(run_genome_prep) { + PREPARE_GENOME ( + prepare_tool_indices + ) + ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.bowtie2_version.ifEmpty(null)) + ch_software_versions = ch_software_versions.mix(PREPARE_GENOME.out.samtools_version.ifEmpty(null)) + } /* * SUBWORKFLOW: Read in samplesheet, validate and stage input files @@ -347,7 +362,6 @@ workflow CUTANDRUN { } .set { ch_fastq } } - //ch_fastq | view /* * MODULE: Concatenate FastQ files from same sample if required From 790d16be48bc11287e3fc45c813f19661c8e16d1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 27 Jul 2021 12:11:52 +0100 Subject: [PATCH 450/675] fixed sample sheet bugs --- bin/check_samplesheet.py | 20 ++++++++++---------- modules/local/samplesheet_check.nf | 9 +++++---- modules/nf-core/software/trimgalore/main.nf | 2 ++ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 8958ce66..c8a2423d 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -116,9 +116,9 @@ def check_samplesheet(file_in, file_out, igg_control): ## Auto-detect paired-end/single-end sample_info = [] if sample and fastq_1 and fastq_2: ## Paired-end short reads - sample_info = [sample, str(replicate), "0", control_group, fastq_1, fastq_2] + sample_info = [sample, str(replicate), control_group, "0", fastq_1, fastq_2] elif sample and fastq_1 and not fastq_2: ## Single-end short reads - sample_info = [sample, str(replicate), "1", control_group, fastq_1, fastq_2] + sample_info = [sample, str(replicate), control_group, "1", fastq_1, fastq_2] else: print_error("Invalid combination of columns provided!", "Line", line) ## Create sample mapping dictionary = {sample: {replicate : [ single_end, fastq_1, fastq_2 ]}} @@ -146,10 +146,10 @@ def check_samplesheet(file_in, file_out, igg_control): if igg_present: for key, data in sample_run_dict["igg"].items(): for tech_rep in data: - if tech_rep[3] not in control_group_ids: - control_group_ids.append(tech_rep[3]) + if tech_rep[2] not in control_group_ids: + control_group_ids.append(tech_rep[2]) - if(tech_rep[3] != str(key)): + if(tech_rep[2] != str(key)): print("ERROR: IgG groups must have a control id equal to the replicate id") sys.exit(1) @@ -175,19 +175,19 @@ def check_samplesheet(file_in, file_out, igg_control): ## Check control group exists if igg_present: for tech_rep in sample_run_dict[sample][replicate]: - if tech_rep[3] not in control_group_ids: + if tech_rep[2] not in control_group_ids: print_error( "Control group does not exist", - tech_rep[3] + tech_rep[2] ) ## Check tech reps have same control group id - check_group = sample_run_dict[sample][replicate][0][3] + check_group = sample_run_dict[sample][replicate][0][2] for tech_rep in sample_run_dict[sample][replicate]: - if tech_rep[3] != check_group: + if tech_rep[2] != check_group: print_error( "Control group must match within technical replicates", - tech_rep[3] + tech_rep[2] ) ## Check that multiple runs of the same sample are of the same datatype diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 7c4bf769..20d82d4e 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -32,10 +32,11 @@ process SAMPLESHEET_CHECK { // Function to get list of [ meta, [ fastq_1, fastq_2 ] ] def get_samplesheet_paths(LinkedHashMap row) { def meta = [:] - meta.id = row.id - meta.group = row.group - meta.replicate = row.replicate.toInteger() - meta.single_end = row.single_end.toBoolean() + meta.id = row.id + meta.group = row.group + meta.replicate = row.replicate.toInteger() + meta.control_group = row.control_group.toInteger() + meta.single_end = row.single_end.toBoolean() def array = [] if (!file(row.fastq_1).exists()) { diff --git a/modules/nf-core/software/trimgalore/main.nf b/modules/nf-core/software/trimgalore/main.nf index daf29e70..f393cf9e 100644 --- a/modules/nf-core/software/trimgalore/main.nf +++ b/modules/nf-core/software/trimgalore/main.nf @@ -52,6 +52,8 @@ process TRIMGALORE { def suffix = options.suffix ? "${options.suffix}.trimmed" : ".trimmed" def prefix_1 = "${meta.id}_1${suffix}" def prefix_2 = "${meta.id}_2${suffix}" + def prefix = "${meta.id}${suffix}" + if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz From fa00c6128b989d9bd09005ba3323e50dee346b39 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 27 Jul 2021 13:10:34 +0100 Subject: [PATCH 451/675] Finished reviewing the control pairing system --- conf/modules.config | 12 +- ...ll_small.config => test_full_small.config} | 0 conf/test_no_igg.config | 30 ++-- nextflow.config | 17 +- workflows/cutandrun.nf | 169 ++++++------------ 5 files changed, 85 insertions(+), 143 deletions(-) rename conf/{igg_flow_tests/test_all_small.config => test_full_small.config} (100%) diff --git a/conf/modules.config b/conf/modules.config index 22bc43ff..68b5f867 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -146,6 +146,12 @@ params { publish_dir = "03_peak_calling/03_bed_to_bigwig" } + "seacr" { + args = "non stringent" + suffix = ".peaks.bed" + publish_dir = "03_peak_calling/04_called_peaks" + } + /* ======================================================================================== CALCULATE BAM->BED FRAGMENTS @@ -197,11 +203,7 @@ params { suffix = ".consensus.peaks" } - "seacr" { - args = "non stringent" - suffix = ".peaks.bed" - publish_dir = "seacr" - } + "sort_group_peaks" { args = "-k1,1 -k2,2n" publish_files = false diff --git a/conf/igg_flow_tests/test_all_small.config b/conf/test_full_small.config similarity index 100% rename from conf/igg_flow_tests/test_all_small.config rename to conf/test_full_small.config diff --git a/conf/test_no_igg.config b/conf/test_no_igg.config index d3de5bcc..a1d5ea8a 100644 --- a/conf/test_no_igg.config +++ b/conf/test_no_igg.config @@ -11,16 +11,26 @@ */ params { - config_profile_name = 'GSE145187 hg38-chr7' - config_profile_description = 'Runs on full data for GSE145187 but just on chr7 of hg38 and no IgG control' + config_profile_name = 'GSE145187 hg38-chr7' + config_profile_description = 'Runs on full data for GSE145187 but just on chr7 of hg38 and no IgG control' - // Limit resources so that this can run CI - max_cpus = 2 - max_memory = 6.GB - max_time = 6.h + // Limit resources so that this can run CI + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h - genome = 'GRCh38' - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-noigg-small.csv' - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' - igg_control = false + // Input data + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-noigg-small.csv' + + // Genome references + fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' + gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' + blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + + minimum_alignment_q_score = 10 + igg_control = false } diff --git a/nextflow.config b/nextflow.config index 23cac689..4e931d54 100644 --- a/nextflow.config +++ b/nextflow.config @@ -173,17 +173,16 @@ profiles { shifter.enabled = false } - local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run - test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control - test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control - test_no_igg { includeConfig "conf/test_no_igg.config" } + local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run + test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control + test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control + test_full_small { includeConfig "conf/test_full_small.config" } // Runs a full experimental configuration but with a small dataset + test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control + + test_full { includeConfig "conf/test_full.config" } test_hg38_chr7 { includeConfig "conf/test_hg38_chr7.config" } - - test_all_small { includeConfig "conf/igg_flow_tests/test_all_small.config" } - test_one_exp_all_igg_small { includeConfig "conf/igg_flow_tests/test_one_exp_all_igg_small.config" } - test_all_exp_one_igg_small { includeConfig "conf/igg_flow_tests/test_all_exp_one_igg_small.config" } - test_some_exp_all_igg_small { includeConfig "conf/igg_flow_tests/test_some_exp_all_igg_small.config" } + } // Load igenomes.config if required diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 8037dbf2..6385cba1 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -266,6 +266,7 @@ def awk_dt_frag_options = modules["awk_dt_frag"] include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) +include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) // include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) // include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) // include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) @@ -275,7 +276,7 @@ include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genom // include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) // include { DESEQ2_DIFF } from "../modules/local/deseq2_diff" addParams( options: modules["deseq2"], multiqc_label: "deseq2") // include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) -// include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) + // include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) // include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) @@ -306,11 +307,12 @@ include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflow */ include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) +include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) // include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) // include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) // include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) // include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) -// include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) + /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -595,145 +597,74 @@ workflow CUTANDRUN { //UCSC_BEDGRAPHTOBIGWIG.out.bigwig | view /* - * CHANNEL: Separate bedgraphs into target/control pairings for each replicate + * CHANNEL: Separate bedgraphs into target/control */ - // BEDTOOLS_GENOMECOV_SCALE.out.bedgraph.branch { it -> - // target: it[0].group != "igg" - // control: it[0].group == "igg" - // } - // .set { ch_bedgraph_split } + BEDTOOLS_GENOMECOV_SCALE.out.bedgraph.branch { it -> + target: it[0].group != "igg" + control: it[0].group == "igg" + } + .set { ch_bedgraph_split } //ch_bedgraph_split.target | view //ch_bedgraph_split.control | view - // if(params.igg_control) { - // /* - // * CHANNEL: Collect experimental replicate numbers - // */ - // ch_bedgraph_split.target - // .combine( ch_bedgraph_split.control ) - // .map { row -> [ row[0].replicate ] } - // .collect() - // .map { row -> [ 0, row ] } - // .set { ch_experimental_reps } - // ch_experimental_reps | view - - // /* - // * CHANNEL: Collect IgG control replicate numbers - // */ - // ch_bedgraph_split.target - // .combine(ch_bedgraph_split.control) - // .map { row -> [ row[2].replicate ] } - // .collect() - // .map { row -> [ 0, row ] } - // .set { ch_control_reps } - // ch_control_reps | view - - // /* - // * CHANNEL: Combine experimental and control replicate numbers, each nested separately in array - // */ - // ch_control_reps - // .combine( ch_experimental_reps, by: 0 ) - // .map { row -> row[1..-1] } - // .set{ ch_replicate_numbers } - // ch_replicate_numbers | view - // } - } - - - // ch_seacr_bed = Channel.empty() - - - + ch_seacr_bed = Channel.empty() + if(params.igg_control) { /* - * CHANNEL: Create channel with elements of the following structure + * CHANNEL: Pull control groups */ - // Make channels [[exp_rep,igg_rep][meta],[experimental_bedgraph],[igg_bedgraph],[[igg_rep_number],[exp_rep_number]]] - // ch_bedgraph_split.target - // .combine( ch_bedgraph_split.control ) - // .map { row -> [ [row[0].replicate, row[2].replicate], [row[0], row[1], row[3]] ] } - // .combine( ch_replicate_numbers ) - // .set { ch_exp_control_reps } - // ch_exp_control_reps | view + ch_bedgraph_split.target.map{ + row -> [row[0].control_group, row] + } + .set { ch_bg_target_ctrlgrp } + //ch_bg_target_ctrlgrp | view + + ch_bedgraph_split.control.map{ + row -> [row[0].control_group, row] + } + .set { ch_bg_control_ctrlgrp } + //ch_bg_control_ctrlgrp | view /* - * CHANNEL: Emit relevant channel elements based on replicate numbers + * CHANNEL: Create target/control pairings */ - // ch_exp_control_reps - // .map { row -> - // def exp_reps = row.last() - // def igg_reps = row[row.size() - 2] - // def current_reps = row[0] - // def unique_exp_reps = exp_reps.unique(false) - // def unique_igg_reps = igg_reps.unique(false) - // def exp_rep_freq = [0] * unique_exp_reps.size() - // def output = row[1] - // def final_output = [] - // def all_same = false - // def i_freq = 0 - - // // check if exp rep numbers are occuring an equal number of times - // for (i=0; i [row[1][1][0], row[1][1][1], row[0][1][1]] + } + .set{ ch_bedgraph_paired } + // EXAMPLE CHANNEL STRUCT: [[META], TARGET_BEDGRAPH, CONTROL_BEDGRAPH] + //ch_bedgraph_paired | view /* * MODULE: Call peaks with IgG control */ - // SEACR_CALLPEAK ( - // ch_bedgraph_combined - // ) - // ch_seacr_bed = SEACR_CALLPEAK.out.bed - // ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], BED] + SEACR_CALLPEAK ( + ch_bedgraph_paired + ) + ch_seacr_bed = SEACR_CALLPEAK.out.bed + ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + // EXAMPLE CHANNEL STRUCT: [[META], BED] //SEACR_CALLPEAK.out.bed | view - //} - //else { + } + else { /* * CHANNEL: Load peak threshold into channel */ - // ch_peak_threshold = Channel.value(params.peak_threshold) + ch_peak_threshold = Channel.value(params.peak_threshold) /* * MODULE: Call peaks without IgG COntrol */ - // SEACR_NO_IGG ( - // ch_bedgraph_split.target, - // ch_peak_threshold - // ) - // ch_seacr_bed = SEACR_NO_IGG.out.bed - // ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], BED] + SEACR_NO_IGG ( + ch_bedgraph_split.target, + ch_peak_threshold + ) + ch_seacr_bed = SEACR_NO_IGG.out.bed + ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) + // EXAMPLE CHANNEL STRUCT: [[META], BED] //SEACR_NO_IGG.out.bed | view - //} + } + } /* * MODULE: Add sample identifier column to peak beds From f28ced867184847315f5a27333c1eff440e5f78a Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 27 Jul 2021 15:27:54 +0000 Subject: [PATCH 452/675] Template update for nf-core/tools version 2.1 --- .editorconfig | 3 +++ .github/CONTRIBUTING.md | 6 +++--- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/linting.yml | 2 +- README.md | 2 +- bin/scrape_software_versions.py | 2 +- lib/NfcoreTemplate.groovy | 22 +++++++++++++--------- nextflow_schema.json | 4 ++-- workflows/cutandrun.nf | 4 +++- 9 files changed, 28 insertions(+), 19 deletions(-) diff --git a/.editorconfig b/.editorconfig index afb20bb1..95549501 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,6 +11,9 @@ indent_style = space [*.{yml,yaml}] indent_size = 2 +[*.json] +insert_final_newline = unset + # These files are edited and tested upstream in nf-core/modules [/modules/nf-core/**] charset = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 8c0ef668..8054c7bb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/cutandrun, the standard workflow is * If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/cutandrun repository](https://github.com/nf-core/cutandrun) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build .` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -69,7 +69,7 @@ If you wish to contribute a new step, please use the following coding standards: 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new flags/options to `nextflow.config` with a default (see below). -5. Add any new flags/options to `nextflow_schema.json` with help text (with `nf-core schema build .`). +5. Add any new flags/options to `nextflow_schema.json` with help text (with `nf-core schema build`). 6. Add any new flags/options to the help message (for integer/text parameters, print to help the corresponding `nextflow.config` parameter). 7. Add sanity checks for all relevant parameters. 8. Add any new software to the `scrape_software_versions.py` script in `bin/` and the version command to the `scrape_software_versions` process in `main.nf`. @@ -83,7 +83,7 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build .` to add to `nextflow_schema.json`. +Once there, use `nf-core schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ed969430..dcd33217 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,7 +18,7 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/cuta - [ ] If you've fixed a bug or added code that should be tested, add tests! - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/cutandrun _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint .`). +- [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index fbde5cf8..3b448773 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -53,7 +53,7 @@ jobs: - uses: actions/setup-node@v1 with: - node-version: "10" + node-version: '10' - name: Install editorconfig-checker run: npm install -g editorconfig-checker diff --git a/README.md b/README.md index 0dbbb130..2c8b3a96 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ On release, automated continuous integration tests run the pipeline on a full-si ## Quick Start -1. Install [`Nextflow`](https://nf-co.re/usage/installation) (`>=21.04.0`) +1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/), [`Podman`](https://podman.io/), [`Shifter`](https://nersc.gitlab.io/development/shifter/how-to-use/) or [`Charliecloud`](https://hpc.github.io/charliecloud/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 4978b249..b87f78a2 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -30,7 +30,7 @@ print("
    {}
    {}
    ".format(k, v)) print(" ") -# Write out regexes as csv file: +# Write out as tsv file: with open("software_versions.tsv", "w") as f: for k, v in sorted(results.items()): f.write("{}\t{}\n".format(k, v)) diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index b6e689ec..44551e0a 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -24,17 +24,21 @@ class NfcoreTemplate { public static void hostName(workflow, params, log) { Map colors = logColours(params.monochrome_logs) if (params.hostnames) { - def hostname = "hostname".execute().text.trim() - params.hostnames.each { prof, hnames -> - hnames.each { hname -> - if (hostname.contains(hname) && !workflow.profile.contains(prof)) { - log.info "=${colors.yellow}====================================================${colors.reset}=\n" + - "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + - " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + - " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + - "=${colors.yellow}====================================================${colors.reset}=" + try { + def hostname = "hostname".execute().text.trim() + params.hostnames.each { prof, hnames -> + hnames.each { hname -> + if (hostname.contains(hname) && !workflow.profile.contains(prof)) { + log.info "=${colors.yellow}====================================================${colors.reset}=\n" + + "${colors.yellow}WARN: You are running with `-profile $workflow.profile`\n" + + " but your machine hostname is ${colors.white}'$hostname'${colors.reset}.\n" + + " ${colors.yellow_bold}Please use `-profile $prof${colors.reset}`\n" + + "=${colors.yellow}====================================================${colors.reset}=" + } } } + } catch (Exception e) { + log.warn "[$workflow.manifest.name] Could not determine 'hostname' - skipping check. Reason: ${e.message}." } } } diff --git a/nextflow_schema.json b/nextflow_schema.json index 401a9783..d0ffdcd2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -18,7 +18,7 @@ "type": "string", "format": "file-path", "mimetype": "text/csv", - "pattern": "\\.csv$", + "pattern": "^\\S+\\.csv$", "schema": "assets/schema_input.json", "description": "Path to comma-separated file containing information about the samples in the experiment.", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/cutandrun/usage#samplesheet-input).", @@ -60,7 +60,7 @@ "type": "string", "format": "file-path", "mimetype": "text/plain", - "pattern": "\\.fn?a(sta)?(\\.gz)?$", + "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", "fa_icon": "far fa-file-code" diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 854d23ad..2ab7e7a3 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -130,7 +130,9 @@ workflow CUTANDRUN { */ workflow.onComplete { - NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) + if (params.email || params.email_on_fail) { + NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) + } NfcoreTemplate.summary(workflow, params, log) } From 8a88ce2c37f3cfae00c55e00b52f84e6a809f096 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 28 Jul 2021 09:56:49 +0100 Subject: [PATCH 453/675] added concensus peaks --- conf/modules.config | 61 ++++++---- nextflow.config | 5 +- subworkflows/local/consensus_peaks.nf | 20 +++- ..._INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml | 0 workflows/cutandrun.nf | 109 ++++++++++-------- 5 files changed, 117 insertions(+), 78 deletions(-) create mode 100644 tests/_INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml diff --git a/conf/modules.config b/conf/modules.config index 68b5f867..7131ac32 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -152,6 +152,41 @@ params { publish_dir = "03_peak_calling/04_called_peaks" } + /* + ======================================================================================== + CONSENSUS PEAKS + ======================================================================================== + */ + + "awk_name_peak_bed" { + command = "'{OFS = \"\\t\"} {print \$0, FILENAME}'" + publish_files = false + ext = "bed" + } + + "sort_group_peaks" { + args = "-k1,1 -k2,2n" + publish_files = false + ext = "bed" + } + + "bedtools_merge_groups" { + args = " -c 2,3,4,5,6,7,7 -o collapse,collapse,collapse,collapse,collapse,collapse,count_distinct" + // args = " -c 7 -o collapse" + publish_dir = "03_peak_calling/05_consensus_peaks" + suffix = ".consensus.peaks" + } + + "awk_threshold" { + publish_dir = "03_peak_calling/05_consensus_peaks" + suffix = ".consensus.peaks.filtered" + ext = "bed" + } + + "plot_peaks" { + publish_dir = "04_reporting" + } + /* ======================================================================================== CALCULATE BAM->BED FRAGMENTS @@ -196,18 +231,10 @@ params { - "bedtools_merge_groups" { - args = " -c 2,3,4,5,6,7,7 -o collapse,collapse,collapse,collapse,collapse,collapse,count_distinct" - // args = " -c 7 -o collapse" - publish_dir = "seacr/consensus_peaks" - suffix = ".consensus.peaks" - } + - "sort_group_peaks" { - args = "-k1,1 -k2,2n" - publish_files = false - } + "deeptools_fragmentsize" { publish_dir = "deeptools" @@ -251,9 +278,7 @@ params { args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\"" publish_dir = "deeptools/heatmaps/peaks" } - "plot_peaks" { - publish_dir = "seacr" - } + /* ======================================================================================== @@ -290,14 +315,8 @@ params { suffix = ".max_signal" publish_files = false } - "awk_name_peak_bed" { - command = "'{OFS = \"\\t\"} {print \$0, FILENAME}'" - publish_files = false - } - "awk_threshold" { - publish_dir = "seacr/consensus_peaks" - suffix = ".rep_thresh" - } + + "deseq2" { publish_dir = "deseq2_qc" diff --git a/nextflow.config b/nextflow.config index 4e931d54..3cc9ded8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -66,9 +66,12 @@ params { skip_peak_calling = false only_peak_calling = false + // Reporting and Visualisation - skip_igv = false skip_reporting = false + + + skip_igv = false skip_deseq2 = false skip_multiqc = false diff --git a/subworkflows/local/consensus_peaks.nf b/subworkflows/local/consensus_peaks.nf index 0ddd98aa..4ece4af6 100644 --- a/subworkflows/local/consensus_peaks.nf +++ b/subworkflows/local/consensus_peaks.nf @@ -2,10 +2,16 @@ * Create group consensus peaks */ -include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options) -include { BEDTOOLS_MERGE } from "../../modules/nf-core/software/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) -include { AWK } from "../../modules/local/awk" addParams( options: params.awk_threshold_options) -include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" addParams( options: params.plot_peak_options ) +params.bedtools_merge_options = [:] +params.sort_options = [:] +params.plot_peak_options = [:] +params.awk_threshold_options = [:] +params.skip_peak_plot = false + +include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options ) +include { BEDTOOLS_MERGE } from "../../modules/nf-core/software/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) +include { AWK } from "../../modules/local/awk" addParams( options: params.awk_threshold_options ) +include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" addParams( options: params.plot_peak_options ) workflow CONSENSUS_PEAKS { @@ -14,7 +20,7 @@ workflow CONSENSUS_PEAKS { main: - // Sort and merge bed files + // Sort bed files SORT ( bed ) // Merge peaks @@ -24,7 +30,9 @@ workflow CONSENSUS_PEAKS { AWK ( BEDTOOLS_MERGE.out.bed ) // Plot consensus peak sets - PLOT_CONSENSUS_PEAKS ( BEDTOOLS_MERGE.out.bed.collect{it[1]}.ifEmpty([]) ) + if(!params.skip_peak_plot) { + PLOT_CONSENSUS_PEAKS ( BEDTOOLS_MERGE.out.bed.collect{it[1]}.ifEmpty([]) ) + } emit: bed = BEDTOOLS_MERGE.out.bed // channel: [ val(meta), [ bed ] ] diff --git a/tests/_INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml b/tests/_INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml new file mode 100644 index 00000000..e69de29b diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 6385cba1..9934e518 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -239,6 +239,12 @@ else if(params.save_align_intermed) { picard_deduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } +// Consensus peak options +def awk_threshold = modules["awk_threshold"] +awk_threshold.command = "' \$10 >= " + params.replicate_threshold.toString() + " {print \$0}'" +def awk_all_threshold = modules["awk_threshold"] +awk_threshold.command = "' \$10 >= 1 {print \$0}'" + // Meta annotation options def awk_bt2_options = modules["awk_bt2"] def awk_bt2_spikein_options = modules["awk_bt2_spikein"] @@ -248,12 +254,6 @@ def awk_dt_frag_options = modules["awk_dt_frag"] // def multiqc_options = modules["multiqc"] // multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" -// // AWK options -// def awk_threshold = modules["awk_threshold"] -// awk_threshold.command = "' \$10 >= " + params.replicate_threshold.toString() + " {print \$0}'" -// def awk_all_threshold = modules["awk_threshold"] -// awk_threshold.command = "' \$10 >= 1 {print \$0}'" - /* ======================================================================================== IMPORT LOCAL MODULES/SUBWORKFLOWS @@ -267,13 +267,14 @@ include { INPUT_CHECK } from "../subworkflows/local/input_che include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) +include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) // include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) // include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) // include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) // include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) // include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) // include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) -// include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) + // include { DESEQ2_DIFF } from "../modules/local/deseq2_diff" addParams( options: modules["deseq2"], multiqc_label: "deseq2") // include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) @@ -288,14 +289,14 @@ include { ALIGN_BOWTIE2 } from "../subworkflow include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) - +include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"], skip_peak_plot: params.skip_reporting) +include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"], skip_peak_plot: params.skip_reporting) // include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) // include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "",meta_prefix: "dedup_", script_mode: false ) // include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, meta_suffix: "", meta_prefix: "", script_mode: true ) -// include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"]) -// include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"]) + /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -653,7 +654,7 @@ workflow CUTANDRUN { ch_peak_threshold = Channel.value(params.peak_threshold) /* - * MODULE: Call peaks without IgG COntrol + * MODULE: Call peaks without IgG Control */ SEACR_NO_IGG ( ch_bedgraph_split.target, @@ -664,63 +665,71 @@ workflow CUTANDRUN { // EXAMPLE CHANNEL STRUCT: [[META], BED] //SEACR_NO_IGG.out.bed | view } - } /* * MODULE: Add sample identifier column to peak beds */ - // AWK_NAME_PEAK_BED ( - // ch_seacr_bed - // ) + AWK_NAME_PEAK_BED ( + ch_seacr_bed + ) + // EXAMPLE CHANNEL STRUCT: [[META], BED] + //AWK_NAME_PEAK_BED.out.file | view /* - * CHANNEL: Group samples based on group + * CHANNEL: Group all samples */ - // AWK_NAME_PEAK_BED.out.file - // .map { row -> [ row[0].group, row[1] ] } - // .groupTuple(by: [0]) - // .map { row -> - // new_meta = [:] - // new_meta.put( "id", row[0] ) - // [ new_meta, row[1].flatten() ] - // } - // .branch { it -> - // single : it[1].size() == 1 - // multiple: it[1].size() > 1 - // } - // .set { ch_seacr_bed_group } - // ch_seacr_bed_group | view + AWK_NAME_PEAK_BED.out.file + .map { row -> [ 1, row[1] ] } + .groupTuple(by: [0]) + .map { row -> + new_meta = [:] + new_meta.put( "id", "all_samples" ) + [ new_meta, row[1].flatten() ] + } + .set { ch_seacr_bed_all } + // EXAMPLE CHANNEL STRUCT: [[id: all_samples], BED1, BED2, BEDn...] + //ch_seacr_bed_all | view /* * SUBWORKFLOW: Construct group consensus peaks */ - // CONSENSUS_PEAKS ( - // ch_seacr_bed_group.multiple - // ) + CONSENSUS_PEAKS_ALL ( + ch_seacr_bed_all + ) + // EXAMPLE CHANNEL STRUCT: [[META], BED] + //CONSENSUS_PEAKS_ALL.out.bed | view /* - * CHANNEL: Group all samples + * CHANNEL: Group samples based on group */ - // AWK_NAME_PEAK_BED.out.file - // .map { row -> [ 1, row[1] ] } - // .groupTuple(by: [0]) - // .map { row -> - // new_meta = [:] - // new_meta.put( "id", "all_peaks" ) - // [ new_meta, row[1].flatten() ] - // } - // .branch { it -> - // single : it[1].size() == 1 - // multiple: it[1].size() > 1 - // } - // .set { ch_seacr_bed_all } + AWK_NAME_PEAK_BED.out.file + .map { row -> [ row[0].group, row[1] ] } + .groupTuple(by: [0]) + .map { row -> + new_meta = [:] + new_meta.put( "id", row[0] ) + [ new_meta, row[1].flatten() ] + } + .set { ch_seacr_bed_group } + // EXAMPLE CHANNEL STRUCT: [[id: ], BED1, BED2, BEDn...] + //ch_seacr_bed_group | view /* * SUBWORKFLOW: Construct group consensus peaks + * where there is more than 1 replicate in a group */ - // CONSENSUS_PEAKS_ALL ( - // ch_seacr_bed_all.multiple - // ) + CONSENSUS_PEAKS ( + ch_seacr_bed_group + ) + // EXAMPLE CHANNEL STRUCT: [[META], BED] + //CONSENSUS_PEAKS.out.bed | view + } + + + + + + //} // if(!params.skip_igv) { From 054cf2f49999483d7c3551913252f51604cab30b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 28 Jul 2021 12:54:58 +0100 Subject: [PATCH 454/675] Added some reporting --- conf/modules.config | 51 ++++++++++++--------- nextflow.config | 5 +-- workflows/cutandrun.nf | 100 ++++++++++++++++++++++------------------- 3 files changed, 87 insertions(+), 69 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 7131ac32..64187571 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -187,6 +187,36 @@ params { publish_dir = "04_reporting" } + /* + ======================================================================================== + REPORTING + ======================================================================================== + */ + + "igv" { + publish_dir = "04_reporting/igv" + } + + "dt_compute_mat_gene" { + args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZeros" + publish_dir = "04_reporting/heatmaps/gene" + } + + "dt_compute_mat_peaks" { + args = "reference-point -a 3000 -b 3000 --referencePoint center --skipZeros" + publish_dir = "04_reporting/heatmaps/peaks" + } + + "dt_plotheatmap_gene" { + args = "--sortUsing sum" + publish_dir = "04_reporting/heatmaps/gene" + } + + "dt_plotheatmap_peaks" { + args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\"" + publish_dir = "04_reporting/heatmaps/peaks" + } + /* ======================================================================================== CALCULATE BAM->BED FRAGMENTS @@ -239,9 +269,7 @@ params { "deeptools_fragmentsize" { publish_dir = "deeptools" } - "igv" { - publish_dir = "igv" - } + "multiqc" { args = "" publish_dir = "multiqc" @@ -260,24 +288,7 @@ params { publish_dir = "" publish_files = false } - "dt_compute_mat_gene" { - args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZeros" - publish_dir = "deeptools/heatmaps/gene" - } - "dt_compute_mat_peaks" { - args = "reference-point -a 3000 -b 3000 --referencePoint center --skipZeros" - publish_dir = "deeptools/heatmaps/peaks" - } - - "dt_plotheatmap_gene" { - args = "--sortUsing sum" - publish_dir = "deeptools/heatmaps/gene" - } - "dt_plotheatmap_peaks" { - args = "--sortUsing sum --startLabel \"Peak Start\" --endLabel \"Peak End\" --xAxisLabel \"\" --regionsLabel \"Peaks\"" - publish_dir = "deeptools/heatmaps/peaks" - } /* diff --git a/nextflow.config b/nextflow.config index 3cc9ded8..37d15b5a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -66,13 +66,10 @@ params { skip_peak_calling = false only_peak_calling = false - // Reporting and Visualisation skip_reporting = false - - skip_igv = false - skip_deseq2 = false + skip_heatmaps = false skip_multiqc = false // Boilerplate options diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 9934e518..db5759d3 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -75,11 +75,15 @@ def run_q_filter = false def run_mark_dups = true def run_remove_dups = true def run_peak_calling = true +def run_reporting = true +def run_deep_tools = true -if(params.minimum_alignment_q_score > 0) { run_q_filter = true } -if(params.skip_markduplicates) { run_mark_dups = false } -if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } +if(params.minimum_alignment_q_score > 0) { run_q_filter = true } +if(params.skip_markduplicates) { run_mark_dups = false } +if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } if(params.skip_peak_calling) { run_peak_calling = false } +if(params.skip_reporting) { run_reporting = false } +if(!params.gene_bed || params.skip_heatmaps) { run_deep_tools = false } if(params.only_input) { run_genome_prep = false @@ -90,6 +94,7 @@ if(params.only_input) { run_mark_dups = false run_remove_dups = false run_peak_calling = false + run_reporting = false } if(params.only_genome) { @@ -101,6 +106,7 @@ if(params.only_genome) { run_mark_dups = false run_remove_dups = false run_peak_calling = false + run_reporting = false } if(params.only_preqc) { @@ -110,6 +116,7 @@ if(params.only_preqc) { run_mark_dups = false run_remove_dups = false run_peak_calling = false + run_reporting = false } if(params.only_alignment) { @@ -117,13 +124,16 @@ if(params.only_alignment) { run_mark_dups = false run_remove_dups = false run_peak_calling = false + run_reporting = false } if(params.only_filtering) { run_peak_calling = false + run_reporting = false } if(params.only_peak_calling) { + run_reporting = false } /* @@ -268,7 +278,7 @@ include { CAT_FASTQ } from "../modules/local/cat_fastq" include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) -// include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) +include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) // include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) // include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) // include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) @@ -309,10 +319,10 @@ include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflow include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) -// include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) -// include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) -// include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) -// include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) /* @@ -725,25 +735,47 @@ workflow CUTANDRUN { //CONSENSUS_PEAKS.out.bed | view } + if(run_reporting) { + /* + * CHANNEL: Remove IgG from bigwig channel + */ + UCSC_BEDGRAPHTOBIGWIG.out.bigwig + .filter { it[0].group != "igg" } + .set { ch_bigwig_no_igg } + //ch_bigwig_no_igg | view + if(!params.skip_igv) { + /* + * MODULE: Create igv session + */ + IGV_SESSION ( + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.gtf, + ch_seacr_bed.collect{it[1]}.ifEmpty([]), + UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) + ) + } + if (run_deep_tools){ + /* + * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes + */ + DEEPTOOLS_COMPUTEMATRIX_GENE ( + ch_bigwig_no_igg, + PREPARE_GENOME.out.bed + ) + ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_GENE.out.version.first().ifEmpty(null)) + /* + * MODULE: Calculate DeepTools heatmap + */ + DEEPTOOLS_PLOTHEATMAP_GENE ( + DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix + ) + } + } - //} - - // if(!params.skip_igv) { - // /* - // * MODULE: Create igv session - // */ - // IGV_SESSION ( - // PREPARE_GENOME.out.fasta, - // PREPARE_GENOME.out.gtf, - // ch_seacr_bed.collect{it[1]}.ifEmpty([]), - // UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) - // ) - // } - //if(!params.skip_reporting && !params.skip_peakcalling) { /* * CHANNEL: Collect SEACR group names that are not igg for reporting @@ -755,13 +787,7 @@ workflow CUTANDRUN { // .set { ch_groups_no_igg } //ch_groups_no_igg | view - /* - * CHANNEL: Remove IgG from bigwig channel - */ - // UCSC_BEDGRAPHTOBIGWIG.out.bigwig - // .filter { it[0].group != "igg" } - // .set { ch_bigwig_no_igg } - //ch_bigwig_no_igg | view + /* * CHANNEL: Remove IgG from bam channel @@ -803,23 +829,7 @@ workflow CUTANDRUN { // ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) // } - // if (params.gene_bed){ - // /* - // * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes - // */ - // DEEPTOOLS_COMPUTEMATRIX_GENE ( - // ch_bigwig_no_igg, - // PREPARE_GENOME.out.bed - // ) - // ch_software_versions = ch_software_versions.mix(DEEPTOOLS_COMPUTEMATRIX_GENE.out.version.first().ifEmpty(null)) - // /* - // * MODULE: Calculate DeepTools heatmap - // */ - // DEEPTOOLS_PLOTHEATMAP_GENE ( - // DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix - // ) - // } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, From 9a5b25392981ae412da0ec1f9b2a4fbe5e72b82c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 28 Jul 2021 21:28:19 +0100 Subject: [PATCH 455/675] Completed code uncommenting --- conf/modules.config | 104 +++++---- modules/local/multiqc.nf | 7 - workflows/cutandrun.nf | 447 ++++++++++++++++----------------------- 3 files changed, 232 insertions(+), 326 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 64187571..79310d39 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -112,6 +112,15 @@ params { publish_files = false } + "awk_dedup" { + args = "" + suffix = ".awk" + publish_dir = false + command = "'/^[^#]/{print}'" + command2 = " > int1.txt && head -2 int1.txt > int2.txt && sed 's/\\t/,/g' int2.txt > int3.txt && sed 's/.*/\\L&/g' int3.txt " + publish_files = false + } + /* ======================================================================================== ANNOTATE META WITH ALIGN @@ -217,45 +226,71 @@ params { publish_dir = "04_reporting/heatmaps/peaks" } + "awk_edit_peak_bed" { + command = "'{split(\$6, summit, \":\"); split(summit[2], region, \"-\"); print summit[1]\"\\t\"region[1]\"\\t\"region[2]}'" + suffix = ".max_signal" + publish_files = false + } + + "export_meta" { + publish_dir = "04_reporting" + } + + "generate_reports" { + publish_dir = "04_reporting/qc" + } + + "multiqc" { + args = "" + publish_dir = "04_reporting/multiqc" + } + /* ======================================================================================== - CALCULATE BAM->BED FRAGMENTS + CALCULATE FRAGMENTS ======================================================================================== */ "calc_frag_samtools_view" { args = "-F 0x04 -b" suffix = ".mapped" - publish_dir = "" publish_files = false } "calc_frag_samtools" { - args = "" suffix = ".mapped" - publish_dir = "" publish_files = false } "calc_frag_bamtobed" { args = "-bedpe" - suffix = "" - publish_dir = "" publish_files = false } "calc_frag_awk" { - args = "" suffix = ".clean" ext = "bed" - publish_dir = "" command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" - command2 = "" publish_files = false } "calc_frag_cut" { args = "-f 1,2,6" suffix = ".frags" ext = "bed" - publish_dir = "" command = "| sort -k1,1 -k2,2n -k3,3n" + publish_dir = "03_peak_calling/06_fragments" + } + + "awk_frag_bin" { + args = "-v w=500" + suffix = ".frags.bin500" + ext = "bed" + publish_dir = "03_peak_calling/06_fragments" + command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" + command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" + } + + "samtools_frag_len" { + args = "-F 0x04" + args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" + suffix = ".frag_len" publish_files = false } @@ -270,24 +305,11 @@ params { publish_dir = "deeptools" } - "multiqc" { - args = "" - publish_dir = "multiqc" - } - "export_meta" { - publish_dir = "meta" - } - "generate_reports" { - publish_dir = "reports" - } - "samtools_frag_len" { - args = "-F 0x04" - args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" - suffix = ".frag_len" - publish_dir = "" - publish_files = false - } + + + + @@ -298,40 +320,14 @@ params { */ - "awk_dedup" { - args = "" - suffix = ".awk" - publish_dir = "" - command = "'/^[^#]/{print}'" - command2 = " > int1.txt && head -2 int1.txt > int2.txt && sed 's/\\t/,/g' int2.txt > int3.txt && sed 's/.*/\\L&/g' int3.txt " - publish_files = false - } + "awk_dt_frag" { args = "" suffix = ".dt.frag" publish_dir = "" publish_files = false } - "awk_frag_bin" { - args = "-v w=500" - suffix = ".frags.bin500" - ext = "bed" - publish_dir = "binned_fragment_counts" - command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" - command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" - publish_files = false - } - "awk_edit_peak_bed" { - command = "'{split(\$6, summit, \":\"); split(summit[2], region, \"-\"); print summit[1]\"\\t\"region[1]\"\\t\"region[2]}'" - suffix = ".max_signal" - publish_files = false - } - - - "deseq2" { - publish_dir = "deseq2_qc" - } } diff --git a/modules/local/multiqc.nf b/modules/local/multiqc.nf index 60518a47..c9118b37 100644 --- a/modules/local/multiqc.nf +++ b/modules/local/multiqc.nf @@ -31,13 +31,6 @@ process MULTIQC { path ('samtools/flagstat/*') path ('samtools/idxstats/*') path ('picard/markduplicates/*') - path ('deseq2_qc/*') - path ('deseq2_qc/*') - path ('deseq2_qc/*') - path ('deseq2_qc/*') - path ('deseq2_qc/*') - path ('deseq2_qc/*') - path ('deseq2_qc/*') path ('reports/*') output: diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index db5759d3..cce124c9 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -51,14 +51,14 @@ ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkI ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() // Header files for MultiQC -// ch_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_header.txt", checkIfExists: true) -// ch_top_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_header.txt", checkIfExists: true) -// ch_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_group_header.txt", checkIfExists: true) -// ch_top_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_group_header.txt", checkIfExists: true) -// ch_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_diagnostic_header.txt", checkIfExists: true) -// ch_top_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_diagnostic_header.txt", checkIfExists: true) -// ch_clustering_header_multiqc = file("$projectDir/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) -// ch_frag_len_header_multiqc = file("$projectDir/assets/multiqc/frag_len_header.txt", checkIfExists: true) +ch_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_header.txt", checkIfExists: true) +ch_top_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_header.txt", checkIfExists: true) +ch_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_group_header.txt", checkIfExists: true) +ch_top_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_group_header.txt", checkIfExists: true) +ch_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_diagnostic_header.txt", checkIfExists: true) +ch_top_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_diagnostic_header.txt", checkIfExists: true) +ch_clustering_header_multiqc = file("$projectDir/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) +ch_frag_len_header_multiqc = file("$projectDir/assets/multiqc/frag_len_header.txt", checkIfExists: true) /* ======================================================================================== @@ -261,8 +261,8 @@ def awk_bt2_spikein_options = modules["awk_bt2_spikein"] def awk_dedup_options = modules["awk_dedup"] def awk_dt_frag_options = modules["awk_dt_frag"] -// def multiqc_options = modules["multiqc"] -// multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" +def multiqc_options = modules["multiqc"] +multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" /* ======================================================================================== @@ -279,17 +279,15 @@ include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genom include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) -// include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -// include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) -// include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) -// include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) -// include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) - -// include { DESEQ2_DIFF } from "../modules/local/deseq2_diff" addParams( options: modules["deseq2"], multiqc_label: "deseq2") -// include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) +include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) +include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) -// include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) -// include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) +// include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -301,10 +299,10 @@ include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflow include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"], skip_peak_plot: params.skip_reporting) include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"], skip_peak_plot: params.skip_reporting) +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", meta_prefix: "dedup_", script_mode: false ) +include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) -// include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) -// include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "",meta_prefix: "dedup_", script_mode: false ) // include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, meta_suffix: "", meta_prefix: "", script_mode: true ) /* @@ -472,7 +470,7 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Mark duplicates on all samples */ - ch_markduplicates_multiqc = Channel.empty() + ch_markduplicates_metrics = Channel.empty() if (run_mark_dups) { MARK_DUPLICATES_PICARD ( ch_samtools_bam @@ -482,7 +480,7 @@ workflow CUTANDRUN { ch_samtools_stats = MARK_DUPLICATES_PICARD.out.stats ch_samtools_flagstat = MARK_DUPLICATES_PICARD.out.flagstat ch_samtools_idxstats = MARK_DUPLICATES_PICARD.out.idxstats - ch_markduplicates_multiqc = MARK_DUPLICATES_PICARD.out.metrics + ch_markduplicates_metrics = MARK_DUPLICATES_PICARD.out.metrics ch_software_versions = ch_software_versions.mix(MARK_DUPLICATES_PICARD.out.picard_version.first().ifEmpty(null)) } //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false], [BAM]] @@ -531,23 +529,39 @@ workflow CUTANDRUN { //ch_samtools_bam | view //EXPORT_META ( ch_annotated_meta.collect{ it[0] } ) + /* + * SUBWORKFLOW: Annotate meta-data with duplication stats + */ + if (run_mark_dups) { + ANNOTATE_DEDUP_META( + ch_samtools_bam, + ch_markduplicates_metrics, + ch_dummy_file.collect() + ) + ch_samtools_bam = ANNOTATE_DEDUP_META.out.output + } + //EXAMPLE CHANNEL STRUCT: [[META + dedup_library:unknown library, dedup_unpaired_reads_examined:0, dedup_read_pairs_examined:350, dedup_secondary_or_supplementary_rds:0, + // dedup_unmapped_reads:0, dedup_unpaired_read_duplicates:0, dedup_read_pair_duplicates:0, dedup_read_pair_optical_duplicates:0, dedup_percent_duplication:0, + // dedup_estimated_library_size:], BAM] + //ch_samtools_bam | view + /* * CHANNEL: Calculate scale factor for each sample based on a constant devided by the number * of reads aligned to the spike-in genome. */ if (!params.skip_scale) { - ch_samtools_bam - .map { row -> - def denominator = row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger() - [ row[0].id, params.normalisation_c / (denominator != 0 ? denominator : 1) ] - } - .set { ch_scale_factor } + ch_samtools_bam + .map { row -> + def denominator = row[0].find{ it.key == "bt2_total_aligned_spikein" }?.value.toInteger() + [ row[0].id, params.normalisation_c / (denominator != 0 ? denominator : 1) ] + } + .set { ch_scale_factor } } else { - ch_samtools_bam - .map { row -> - [ row[0].id, 1 ] - } - .set { ch_scale_factor } + ch_samtools_bam + .map { row -> + [ row[0].id, 1 ] + } + .set { ch_scale_factor } } // EXAMPLE CHANNEL STRUCT: [id, scale_factor] //ch_scale_factor | view @@ -733,6 +747,37 @@ workflow CUTANDRUN { ) // EXAMPLE CHANNEL STRUCT: [[META], BED] //CONSENSUS_PEAKS.out.bed | view + + /* + * SUBWORKFLOW: Calculate fragment bed from bams + * - Filter for mapped reads + * - Convert to bed file + * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp + * - Only extract the fragment related columns using cut + */ + CALCULATE_FRAGMENTS ( + ch_samtools_bam + ) + ch_software_versions = ch_software_versions.mix(CALCULATE_FRAGMENTS.out.bedtools_version.first().ifEmpty(null)) + //EXAMPLE CHANNEL STRUCT: NO CHANGE + //CALCULATE_FRAGMENTS.out.bed | view + + /* + * MODULE: Bin the fragments into 500bp bins ready for downstream reporting + */ + AWK_FRAG_BIN( + CALCULATE_FRAGMENTS.out.bed + ) + //AWK_FRAG_BIN.out.file | view + + /* + * MODULE: Calculate fragment lengths + */ + SAMTOOLS_CUSTOMVIEW ( + ch_samtools_bam, + ch_samtools_bai + ) + //SAMTOOLS_CUSTOMVIEW.out.tsv | view } if(run_reporting) { @@ -772,251 +817,123 @@ workflow CUTANDRUN { DEEPTOOLS_PLOTHEATMAP_GENE ( DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix ) - } - } - - - //if(!params.skip_reporting && !params.skip_peakcalling) { - /* - * CHANNEL: Collect SEACR group names that are not igg for reporting - */ - // ch_seacr_bed - // .map{ row -> row[0].group} - // .unique() - // .collect() - // .set { ch_groups_no_igg } - //ch_groups_no_igg | view - - - - /* - * CHANNEL: Remove IgG from bam channel - */ - // ch_samtools_bam - // .filter { it[0].group != "igg" } - // .set { ch_samtools_bam_no_igg } - - /* - * MODULE: DESeq2 QC Analysis - */ - // ch_pca_multiqc = Channel.empty() - // ch_top_pca_multiqc = Channel.empty() - // ch_pca_group_multiqc = Channel.empty() - // ch_top_pca_group_multiqc = Channel.empty() - // ch_pca_diagnostic_multiqc = Channel.empty() - // ch_top_pca_diagnostic_multiqc = Channel.empty() - // ch_clustering_multiqc = Channel.empty() - // if (!params.skip_deseq2) { - // DESEQ2_DIFF ( - // ch_groups_no_igg, - // ch_seacr_bed.collect{it[1]}, - // ch_samtools_bam_no_igg.collect{it[1]}, - // ch_pca_header_multiqc, - // ch_top_pca_header_multiqc, - // ch_pca_group_header_multiqc, - // ch_top_pca_group_header_multiqc, - // ch_diagnostic_header_multiqc, - // ch_top_diagnostic_header_multiqc, - // ch_clustering_header_multiqc - // ) - // ch_pca_multiqc = DESEQ2_DIFF.out.pca_multiqc - // ch_top_pca_multiqc = DESEQ2_DIFF.out.top_pca_multiqc - // ch_pca_group_multiqc = DESEQ2_DIFF.out.pca_group_multiqc - // ch_top_pca_group_multiqc = DESEQ2_DIFF.out.top_pca_group_multiqc - // ch_pca_diagnostic_multiqc = DESEQ2_DIFF.out.pca_diagnostic_multiqc - // ch_top_pca_diagnostic_multiqc = DESEQ2_DIFF.out.top_pca_diagnostic_multiqc - // ch_clustering_multiqc = DESEQ2_DIFF.out.dists_multiqc - // ch_software_versions = ch_software_versions.mix(DESEQ2_DIFF.out.version.ifEmpty(null)) - // } - - - - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], MATRIX] - //DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix | view - - /* - * MODULE: Extract max signal from peak beds - */ - // AWK_EDIT_PEAK_BED ( - // ch_seacr_bed - // ) - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], TEXT] - //AWK_EDIT_PEAK_BED.out.file | view - - /* - * CHANNEL: Structure output for join on id - */ - // AWK_EDIT_PEAK_BED.out.file - // .map { row -> [row[0].id, row ].flatten()} - // .set { ch_seacr_bed_id } - // //ch_seacr_bed_id | view - - // /* - // * CHANNEL: Join beds and bigwigs on id - // */ - // ch_bigwig_no_igg - // .map { row -> [row[0].id, row ].flatten()} - // .join ( ch_seacr_bed_id ) - // .set { ch_dt_peaks } - // //ch_dt_peaks | view - - // ch_dt_peaks - // .map { row -> row[1,2] } - // .set { ch_ordered_bigwig } - // //ch_ordered_bigwig | view - - // ch_dt_peaks - // .map { row -> row[-1] } - // .set { ch_ordered_seacr_max } - // //ch_ordered_seacr_max | view - /* - * MODULE: Compute DeepTools matrix used in heatmap plotting for Peaks - */ - // DEEPTOOLS_COMPUTEMATRIX_PEAKS ( - // ch_ordered_bigwig, - // ch_ordered_seacr_max - // ) - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000], MATRIX] - //DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix | view + /* + * MODULE: Extract max signal from peak beds + */ + AWK_EDIT_PEAK_BED ( + ch_seacr_bed + ) + //AWK_EDIT_PEAK_BED.out.file | view - /* - * MODULE: Calculate DeepTools heatmap - */ - // DEEPTOOLS_PLOTHEATMAP_PEAKS ( - // DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix - // ) + /* + * CHANNEL: Structure output for join on id + */ + AWK_EDIT_PEAK_BED.out.file + .map { row -> [row[0].id, row ].flatten()} + .set { ch_seacr_bed_id } + //ch_seacr_bed_id | view - /* - * SUBWORKFLOW: Annotate meta-data with duplication stats - */ - // if (!params.skip_markduplicates) { - // ANNOTATE_DEDUP_META( - // ch_samtools_bam, - // ch_markduplicates_multiqc, - // ch_dummy_file.collect() - // ) - // ch_samtools_bam = ANNOTATE_DEDUP_META.out.output - // } - //EXAMPLE CHANNEL STRUCT: [[id:h3k27me3_R1, group:h3k27me3, replicate:1, single_end:false, - // bt2_total_reads_target:9616, bt2_align1_target:315, bt2_align_gt1_target:449, bt2_non_aligned_target:8852, bt2_total_aligned_target:764, - // bt2_total_reads_spikein:9616, bt2_align1_spikein:1, bt2_align_gt1_spikein:0, bt2_non_aligned_spikein:9615, bt2_total_aligned_spikein:1, - // scale_factor:10000, dedup_library:unknown library, dedup_unpaired_reads_examined:0, dedup_read_pairs_examined:350, dedup_secondary_or_supplementary_rds:0, - // dedup_unmapped_reads:0, dedup_unpaired_read_duplicates:0, dedup_read_pair_duplicates:0, dedup_read_pair_optical_duplicates:0, dedup_percent_duplication:0, - // dedup_estimated_library_size:], BAM] - //ch_samtools_bam | view - - // /* - // * SUBWORKFLOW: Calculate fragment bed from bams - // * - Filter for mapped reads - // * - Convert to bed file - // * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp - // * - Only extract the fragment related columns using cut - // */ - // CALCULATE_FRAGMENTS ( - // ch_samtools_bam - // ) - // ch_software_versions = ch_software_versions.mix(CALCULATE_FRAGMENTS.out.bedtools_version.first().ifEmpty(null)) - //EXAMPLE CHANNEL STRUCT: NO CHANGE - //CALCULATE_FRAGMENTS.out.bed | view + /* + * CHANNEL: Join beds and bigwigs on id + */ + ch_bigwig_no_igg + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_seacr_bed_id ) + .set { ch_dt_peaks } + //ch_dt_peaks | view + + ch_dt_peaks + .map { row -> row[1,2] } + .set { ch_ordered_bigwig } + //ch_ordered_bigwig | view + + ch_dt_peaks + .map { row -> row[-1] } + .set { ch_ordered_seacr_max } + //ch_ordered_seacr_max | view - /* - * MODULE: Bin the fragments into 500bp bins ready for downstream reporting - */ - // AWK_FRAG_BIN( - // CALCULATE_FRAGMENTS.out.bed - // ) - //AWK_FRAG_BIN.out.file | view + /* + * MODULE: Compute DeepTools matrix used in heatmap plotting for Peaks + */ + DEEPTOOLS_COMPUTEMATRIX_PEAKS ( + ch_ordered_bigwig, + ch_ordered_seacr_max + ) + //EXAMPLE CHANNEL STRUCT: [[META], MATRIX] + //DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix | view - /* - * MODULE: Calculate fragment lengths - */ - // SAMTOOLS_CUSTOMVIEW ( - // ch_samtools_bam, - // ch_samtools_bai - // ) - //SAMTOOLS_CUSTOMVIEW.out.tsv | view + /* + * MODULE: Calculate DeepTools heatmap + */ + DEEPTOOLS_PLOTHEATMAP_PEAKS ( + DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix + ) - /* - * MODULE: Export meta-data to csv file - */ - // EXPORT_META ( - // ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) - // ) + /* + * MODULE: Export meta-data to csv file + */ + EXPORT_META ( + ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) + ) - /* - * MODULE: Generate python reporting using mixture of meta-data and direct file processing - */ - // ch_frag_len_multiqc = Channel.empty() - // GENERATE_REPORTS( - // EXPORT_META.out.csv, // meta-data report stats - // SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments - // AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments - // ch_seacr_bed.collect{it[1]}, // peak beds - // ch_samtools_bam.collect{it[1]}, // bam files sorted by mate pair ids - // ch_frag_len_header_multiqc // multiqc config header for fragment length distribution plot - // ) - // ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc - // ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) - //} + /* + * MODULE: Generate python reporting using mixture of meta-data and direct file processing + */ + ch_frag_len_multiqc = Channel.empty() + GENERATE_REPORTS( + EXPORT_META.out.csv, // meta-data report stats + SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments + AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments + ch_seacr_bed.collect{it[1]}, // peak beds + ch_samtools_bam.collect{it[1]}, // bam files sorted by mate pair ids + ch_frag_len_header_multiqc // multiqc config header for fragment length distribution plot + ) + ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc + ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) + } + } /* * MODULE: Collect software versions used in pipeline */ - - // ch_software_versions - // .map { it -> if (it) [ it.baseName, it ] } - // .groupTuple() - // .map { it[1][0] } - // .flatten() - // .collect() - // .set { ch_software_versions } - - // GET_SOFTWARE_VERSIONS ( - // ch_software_versions.map { it }.collect() - // ) + ch_software_versions + .map { it -> if (it) [ it.baseName, it ] } + .groupTuple() + .map { it[1][0] } + .flatten() + .collect() + .set { ch_software_versions } + + GET_SOFTWARE_VERSIONS ( + ch_software_versions.map { it }.collect() + ) /* * MODULE: Multiqc */ - // if (!params.skip_multiqc) { - // workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) - // ch_workflow_summary = Channel.value(workflow_summary) - - // MULTIQC ( - // ch_multiqc_config, - // ch_multiqc_custom_config.collect().ifEmpty([]), - // GET_SOFTWARE_VERSIONS.out.yaml.collect(), - // ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml"), - // FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), - // FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), - // FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), - // ch_bowtie2_log.collect{it[1]}.ifEmpty([]), - // ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), - // ch_samtools_stats.collect{it[1]}.ifEmpty([]), - // ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), - // ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), - // ch_markduplicates_multiqc.collect{it[1]}.ifEmpty([]), - // ch_pca_multiqc.collect().ifEmpty([]), - // ch_top_pca_multiqc.collect().ifEmpty([]), - // ch_pca_group_multiqc.collect().ifEmpty([]), - // ch_top_pca_group_multiqc.collect().ifEmpty([]), - // ch_pca_diagnostic_multiqc.collect().ifEmpty([]), - // ch_top_pca_diagnostic_multiqc.collect().ifEmpty([]), - // ch_clustering_multiqc.collect().ifEmpty([]), - // ch_frag_len_multiqc.collect().ifEmpty([]) - // ) - // multiqc_report = MULTIQC.out.report.toList() - // } + if (!params.skip_multiqc) { + workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) + ch_workflow_summary = Channel.value(workflow_summary) + + MULTIQC ( + ch_multiqc_config, + ch_multiqc_custom_config.collect().ifEmpty([]), + GET_SOFTWARE_VERSIONS.out.yaml.collect(), + ch_workflow_summary.collectFile(name: "workflow_summary_mqc.yaml"), + FASTQC_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), + FASTQC_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), + FASTQC_TRIMGALORE.out.trim_log.collect{it[1]}.ifEmpty([]), + ch_bowtie2_log.collect{it[1]}.ifEmpty([]), + ch_bowtie2_spikein_log.collect{it[1]}.ifEmpty([]), + ch_samtools_stats.collect{it[1]}.ifEmpty([]), + ch_samtools_flagstat.collect{it[1]}.ifEmpty([]), + ch_samtools_idxstats.collect{it[1]}.ifEmpty([]), + ch_markduplicates_metrics.collect{it[1]}.ifEmpty([]), + ch_frag_len_multiqc.collect().ifEmpty([]) + ) + multiqc_report = MULTIQC.out.report.toList() + } } //////////////////////////////////////////////////// From a96644b0499f26baf573c8849799039f1cf6aeb5 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 28 Jul 2021 21:28:26 +0100 Subject: [PATCH 456/675] removed deseq --- bin/deseq2_diff.r | 428 ----------------------------------- modules/local/deseq2_diff.nf | 106 --------- 2 files changed, 534 deletions(-) delete mode 100755 bin/deseq2_diff.r delete mode 100755 modules/local/deseq2_diff.nf diff --git a/bin/deseq2_diff.r b/bin/deseq2_diff.r deleted file mode 100755 index 167ac7ec..00000000 --- a/bin/deseq2_diff.r +++ /dev/null @@ -1,428 +0,0 @@ -#!/usr/bin/env Rscript - -################################################ -################################################ -## REQUIREMENTS ## -################################################ -################################################ - -## DIFFERENTIAL ANALYSIS, SCATTERPLOTS, HEATMAP AND PCA FROM COUNT FILE - ## - COUNT FILE IS PRODUCED FROM SEACR PEAK BED FILES AND ALIGNMENT BAMS - ## - PACKAGES BELOW NEED TO BE AVAILABLE TO LOAD WHEN RUNNING R - -################################################ -################################################ -## LOAD LIBRARIES ## -################################################ -################################################ - -library(optparse) -library(stringr) -library(BiocParallel) -library(magrittr) -library(GenomicRanges) -library(chromVAR) -library(DESeq2) -library(ggplot2) -library(RColorBrewer) -library(pheatmap) -library(lattice) - -################################################ -################################################ -## PARSE COMMAND-LINE PARAMETERS ## -################################################ -################################################ - -option_list <- list( - make_option(c("-g", "--groups"), type="character", default=NULL , metavar="string" , help="comma-separated list of experimental group names" ), - make_option(c("-b", "--bed" ), type="character", default=NULL , metavar="path" , help="TODO" ), - make_option(c("-a", "--bam" ), type="character", default=NULL , metavar="path" , help="TODO" ), - make_option(c("-i", "--include"), type="character", default=NULL , metavar="string" , help="experimental groups to include in analysis"), - make_option(c("-e", "--exclude"), type="character", default=NULL , metavar="string" , help="experimental groups to exclude in analysis"), - make_option(c("-o", "--outdir" ), type="character", default='./' , metavar="path" , help="Output directory." ), - make_option(c("-p", "--outprefix" ), type="character", default='deseq2', metavar="string" , help="Output prefix." ), - make_option(c("-s", "--count_thresh" ), type="integer", default='5', metavar="string" , help="TODO" ), - make_option(c("-v", "--vst" ), type="logical" , default=FALSE , metavar="boolean", help="Run vst transform instead of rlog." ), - make_option(c("-@", "--cores" ), type="integer" , default=1 , metavar="integer", help="Number of cores." ) -) - -#make_option(c("-c", "--control" ), type="character", default=NULL , metavar="path" , help="TODO" ), -#make_option(c("-t", "--treatment" ), type="character", default=NULL , metavar="path" , help="TODO" ), -opt_parser <- OptionParser(option_list=option_list) -opt <- parse_args(opt_parser) - -if (is.null(opt$groups)){ - print_help(opt_parser) - stop("Please provide group names for analysis.", call.=FALSE) -} - -if (is.null(opt$bed)){ - print_help(opt_parser) - stop("Please provide a list of bed files to load.", call.=FALSE) -} - -if (is.null(opt$bam)){ - print_help(opt_parser) - stop("Please provide a list of bam files to load", call.=FALSE) -} - -# Get file lists -bed_list <- unlist(strsplit(opt$bed, ",")) -bam_list <- unlist(strsplit(opt$bam, ",")) - -################################################ -################################################ -## READ IN DATA FILES ## -################################################ -################################################ - -# Create group list -# groups = c(opt$control, opt$treatment) <- groups is now just opt$group -groups = unlist(strsplit(opt$groups, split=",")) -if (!is.null(opt$include)) { - groups = unlist(strsplit(opt$include, split=",")) -} -if (!is.null(opt$exclude)) { - exclude_vec = unlist(strsplit(opt$exclude, split=",")) - matching = match(groups, exclude_vec) - groups = groups[!matching] -} - -if (length(unique(groups)) == 1) { - message("WARN: Only one experimental group identified, so differential analysis cannot be executed. DESEQ2 will be skipped.") - quit(save = "no", status = 0, runLast = FALSE) -} - -################ redo from here ####################### - -# Init -mPeak = GRanges() -file_count = 0 -file_list=vector() -sample_mat = matrix(NA, length(bam_list), 2) -# Read in bed files that match the control or treatment group -for(group in groups){ - search_res <- str_detect(bed_list, group) - if (!any(search_res)) { - stop(paste("group", group, "was not found amongst bed files")) - } - file_list <- bed_list[search_res] %>% append(file_list, .) -} -k=1 -for(file in file_list) { - peakRes = read.table(file, header = FALSE, fill = TRUE) - mPeak = GRanges(seqnames = peakRes$V1, IRanges(start = peakRes$V2, end = peakRes$V3), strand = "*") %>% append(mPeak, .) - file_count = file_count + 1 - file_name = basename(file) - file_name = strsplit(file_name, "[.]")[[1]][1] - file_split = strsplit(file_name, "[_]")[[1]] - file_group = paste(file_split[-length(file_split)], collapse = "_") - file_rep = file_split[length(file_split)] - file_rep_num = gsub("[^0-9.]", "", file_rep) - sample_mat[k,1] = file_group - sample_mat[k,2] = file_rep_num - k=k+1 -} - -# Create peak table and count matrix -masterPeak = reduce(mPeak) -countMat = matrix(NA, length(masterPeak), file_count) -sample_list = paste(sample_mat[,1], sample_mat[,2], sep = "_R") -colnames(countMat) = sample_list -# Read in bam files that match the control or treatment group -for(i in seq_along(groups)){ - search_res <- str_detect(bam_list, groups[i]) - if (!any(search_res)) { - stop(paste("group", i, "was not found amongst bam files")) - } -} - -for(j in seq_along(bam_list)) { - rep_search <- str_detect(bam_list, sample_list[j]) - file_now <- bam_list[rep_search] - fragment_counts <- getCounts(file_now, masterPeak, paired = TRUE, by_rg = FALSE, format = "bam") - countMat[,j] = counts(fragment_counts)[,1] -} - -################################################ -################################################ -## RUN DESEQ2 ## -################################################ -################################################ - -if (file.exists(opt$outdir) == FALSE) { - dir.create(opt$outdir,recursive=TRUE) -} -setwd(opt$outdir) - -## Create index list for peak count filter -selectR = which(rowSums(countMat) > opt$count_thresh) -dataS = countMat[selectR,] ## Select data from filter -condition = factor(sample_mat[,1]) - -samples.vec <- sort(colnames(countMat)) - -if (length(unique(groups)) == length(samples.vec)) { - message("WARN: Only one experimental replicate per group was identified, so differential analysis cannot be executed. DESEQ2 will be skipped.") - quit(save = "no", status = 0, runLast = FALSE) -} - -DDSFile <- paste(opt$outprefix,".dds.RData",sep="") -if (file.exists(DDSFile) == FALSE) { - tryCatch ( - expr = DESeqDataSetFromMatrix(countData = dataS,colData = DataFrame(condition),design = ~ condition), - error = function(cond){ - message("failed to create DESeqDataSet object. DESEQ2 module will be skipped") - quit(save = "no", status = 0, runLast = FALSE) - } - ) - dds = DESeqDataSetFromMatrix(countData = dataS,colData = DataFrame(condition),design = ~ condition) - dds <- DESeq(dds, parallel=TRUE, BPPARAM=MulticoreParam(opt$cores)) - if (!opt$vst) { - vst_name <- "rlog" - rld <- rlog(dds) - } else { - vst_name <- "vst" - rld <- varianceStabilizingTransformation(dds) - } - assay(dds, vst_name) <- assay(rld) - save(dds,file=DDSFile) -} else { - load(DDSFile) - vst_name <- intersect(assayNames(dds), c("vst", "rlog")) - if (length(vst_name)==0) { # legacy might mean vst was saved as a separate object called rld - vst_name <- "loaded_rld" - assay(dds, vst_name) <- assay(rld) - } else { - vst_name==vst_name[1] - } -} - -## Normalised results -DDS = DESeq(dds) -normDDS = counts(DDS, normalized = TRUE) ## normalization with respect to the sequencing depth -colnames(normDDS) = paste0(colnames(normDDS), "_norm") -res = results(DDS, independentFiltering = FALSE, altHypothesis = "greaterAbs") -countMatDiff = cbind(dataS, normDDS, res) ## Combine deseq results -write.csv(countMatDiff, paste(opt$outprefix, "count_mat_diff.csv", sep=""), row.names=FALSE) - -################################################ -################################################ -## PLOT QC ## -################################################ -################################################ - -##' PCA pre-processeor -##' -##' Generate all the necessary information to plot PCA from a DESeq2 object -##' in which an assay containing a variance-stabilised matrix of counts is -##' stored. Copied from DESeq2::plotPCA, but with additional ability to -##' say which assay to run the PCA on, and adds an assessment of how well -##' each PC explains the experimental grouping of the data. -##' -##' @param object The DESeq2DataSet object. -##' @param intgroup interesting groups: a character vector of names in 'colData(x)' to use for grouping. -##' @param ntop number of top genes to use for principla components, selected by highest row variance. -##' @param assay the name or index of the assay that stores the variance-stabilised data. -##' @return A data.frame containing the projected data alongside the grouping columns. -##' A 'percentVar' attribute is set which includes the percentage of variation each PC explains, -##' and additionally how much the variation within that PC is explained by the grouping variable. -##' @author Gavin Kelly -plotPCA_vst <- function (object, intgroup = "condition", ntop = 500, assay=length(assays(object))) { - rv <- rowVars(assay(object, assay)) - select <- order(rv, decreasing = TRUE)[seq_len(min(ntop, length(rv)))] - pca <- prcomp(t(assay(object, assay)[select, ])) - percentVar <- pca$sdev^2/sum(pca$sdev^2) - if (!all(intgroup %in% names(colData(object)))) { - stop("the argument 'intgroup' should specify columns of colData(dds)") - } - intgroup.df <- as.data.frame(colData(object)[, intgroup, drop = FALSE]) - group <- if (length(intgroup) > 1) { - factor(apply(intgroup.df, 1, paste, collapse = ":")) - } else { - colData(object)[[intgroup]] - } - d <- cbind(pca$x, group = group, intgroup.df, name = colnames(object)) - percentFrame <- data.frame(PC=seq(along=percentVar), percentVar=100*percentVar, groupR=0.0) - for (ipc in seq(along=percentVar)) { - fit1 <- lm(pca$x[,ipc] ~ group) - percentFrame$groupR[ipc] <- 100*summary(fit1)$r.squared - } - attr(d, "percentVar") <- percentFrame - return(d) -} - -PlotFile <- paste(opt$outprefix,".plots.pdf",sep="") -if (file.exists(PlotFile) == FALSE) { - pdf(file=PlotFile,onefile=TRUE,width=7,height=7) - - ## PCA - ntop <- c(500, Inf) - for (n_top_var in ntop) { - pca.data <- plotPCA_vst(dds, assay=vst_name,intgroup="condition",ntop=n_top_var) - percentVar <- round(attr(pca.data, "percentVar")$percentVar) - print("percent var") - print(percentVar) - plot_subtitle <- ifelse(n_top_var==Inf, "All peaks", paste("Top", n_top_var, "peaks")) - # PCA PLOT 1 - FIRST PC - pl <- ggplot(pca.data, aes(PC1, PC2, color=condition)) + - geom_point(size=3) + - xlab(paste0("PC1: ",percentVar[1],"% variance")) + - ylab(paste0("PC2: ",percentVar[2],"% variance")) + - labs(title = paste0("First PCs on ", vst_name, "-transformed data"), subtitle = plot_subtitle) + - theme(legend.position="top", - panel.grid.major = element_blank(), - panel.grid.minor = element_blank(), - panel.background = element_blank(), - panel.border = element_rect(colour = "black", fill=NA, size=1)) - print(pl) - - # PCA PLOT 2 - DIAGNOSTIC OF PCs - pl_d <- ggplot(attr(pca.data, "percentVar"), aes(x=PC, y=percentVar)) + - geom_line(aes(colour="explained by PC")) + - geom_line(aes(y=groupR, colour="of PC explained by condition")) + - scale_x_continuous(breaks=seq(along=percentVar), minor_breaks=NULL) + - labs(title="Diagnostics of PCs", subtitle=plot_subtitle, x="Component", y="Percentage explaned", colour="Percentage variation") + - theme_bw() + - theme(legend.position="top") - print(pl_d) - diagnostic_data <- ggplot_build(pl_d) - - # Construct strings for linegraph multiqc format - - int_component <- 1:nrow(diagnostic_data$data[[1]]) - component <- paste(int_component, sep=" ", collapse=NULL) - explained_by_PC <- round(diagnostic_data$data[[1]]$y) - explained_by_condition <- round(diagnostic_data$data[[2]]$y) - - component_str <- paste("'", component ,"'", sep="") - explained_by_PC_str <- paste(" 'explained_by_PC' : {", paste(component_str, explained_by_PC, sep = " : ", collapse = " , "), " }") - explained_by_cond_str <- paste( " 'explained_by_condition' : {", paste(component_str, explained_by_condition, sep = " : ", collapse = " , "), "}") - - start_str <- "data:" - #line1_str <- " 'explained_by_PC' : {" - #line2_str <- " 'explained_by_condition' : {" - - if (n_top_var == 500) { - fileConn<-file(paste(opt$outprefix,".pca.top_diagnostic_vals.txt",sep="")) - } else { - fileConn<-file(paste(opt$outprefix,".pca.diagnostic_vals.txt",sep="")) - } - ## WRITE DIAGNOSTIC OF PCs TO FILE - writeLines(c(start_str, explained_by_PC_str, explained_by_cond_str), fileConn) - close(fileConn) - - # PCA PLOT 3 - GROUP-EXPLANATORY PCs - pc_r <- order(attr(pca.data, "percentVar")$groupR, decreasing=TRUE) - pl <- ggplot(pca.data, aes_string(paste0("PC", pc_r[1]), paste0("PC", pc_r[2]), color="condition")) + - geom_point(size=3) + - xlab(paste0("PC", pc_r[1], ": ",percentVar[pc_r[1]],"% variance")) + - ylab(paste0("PC", pc_r[2], ": ",percentVar[pc_r[2]],"% variance")) + - labs(title = paste0("Group-Explanatory PCs of ", vst_name, "-tranformed data"), subtitle = plot_subtitle) + - theme(legend.position="top", - panel.grid.major = element_blank(), - panel.grid.minor = element_blank(), - panel.background = element_blank(), - panel.border = element_rect(colour = "black", fill=NA, size=1)) - print(pl) - - # assign separate plotting variable - if (n_top_var == 500) { - pca.top_data <- pca.data - pc_r_top <- pc_r - } - } # at end of loop, we'll be using the user-defined ntop if any, else all peaks - - ## VOLCANO PLOT - plotMA(dds) - - print(pca.data) - - ## WRITE PC1 vs PC2 VALUES TO FILE - # All peaks - pca.vals <- pca.data[,1:2] - colnames(pca.vals) <- paste0(colnames(pca.vals), ": ", percentVar[1:2], '% variance') - pca.vals <- cbind(sample = rownames(pca.vals), pca.vals) - #print("pca vals") - #print(pca.vals) - write.table(pca.vals,file=paste(opt$outprefix,".pca.vals.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) - - # 500 top peaks - pca.top_vals <- pca.top_data[,1:2] - colnames(pca.top_vals) <- paste0(colnames(pca.top_vals), ": ", percentVar[1:2], '% variance') - pca.top_vals <- cbind(sample = rownames(pca.top_vals), pca.top_vals) - write.table(pca.top_vals,file=paste(opt$outprefix,".pca.top_vals.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) - - ## WRITE GROUP-EXPLANATORY PCs TO FILE - # All peaks - pca.vals_group <- pca.data[,pc_r[1]:pc_r[2]] - colnames(pca.vals_group) <- paste0(colnames(pca.vals_group), ": ", percentVar[1:2], '% variance') - pca.vals_group <- cbind(sample = rownames(pca.vals_group), pca.vals_group) - write.table(pca.vals_group,file=paste(opt$outprefix,".pca.vals_group.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) - - # 500 top peaks - pca.top_vals_group <- pca.top_data[,pc_r_top[1]:pc_r_top[2]] - colnames(pca.top_vals_group) <- paste0(colnames(pca.top_vals_group), ": ", percentVar[1:2], '% variance') - pca.top_vals_group <- cbind(sample = rownames(pca.top_vals_group), pca.top_vals_group) - write.table(pca.top_vals_group,file=paste(opt$outprefix,".pca.top_vals_group.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=TRUE) - - ## SAMPLE CORRELATION HEATMAP - sampleDists <- dist(t(assay(dds, vst_name))) - sampleDistMatrix <- as.matrix(sampleDists) - colors <- colorRampPalette( rev(brewer.pal(9, "Blues")) )(255) - pheatmap( - sampleDistMatrix, - clustering_distance_rows=sampleDists, - clustering_distance_cols=sampleDists, - col=colors, - main=paste("Euclidean distance between", vst_name, "of samples") - ) - - ## WRITE SAMPLE DISTANCES TO FILE - write.table(cbind(sample = rownames(sampleDistMatrix), sampleDistMatrix),file=paste(opt$outprefix,".sample.dists.txt",sep=""),row.names=FALSE,col.names=TRUE,sep="\t",quote=FALSE) - - dev.off() -} - -################################################ -################################################ -## SAVE SIZE FACTORS ## -################################################ -################################################ - -SizeFactorsDir <- "size_factors/" -if (file.exists(SizeFactorsDir) == FALSE) { - dir.create(SizeFactorsDir,recursive=TRUE) -} - -NormFactorsFile <- paste(SizeFactorsDir,opt$outprefix,".size_factors.RData",sep="") -if (file.exists(NormFactorsFile) == FALSE) { - normFactors <- sizeFactors(dds) - save(normFactors,file=NormFactorsFile) - - for (name in names(sizeFactors(dds))) { - sizeFactorFile <- paste(SizeFactorsDir,name,".txt",sep="") - if (file.exists(sizeFactorFile) == FALSE) { - write(as.numeric(sizeFactors(dds)[name]),file=sizeFactorFile) - } - } -} - -################################################ -################################################ -## R SESSION INFO ## -################################################ -################################################ - -RLogFile <- "R_sessionInfo.log" -if (file.exists(RLogFile) == FALSE) { - sink(RLogFile) - a <- sessionInfo() - print(a) - sink() -} -################################################ -################################################ -################################################ -################################################ diff --git a/modules/local/deseq2_diff.nf b/modules/local/deseq2_diff.nf deleted file mode 100755 index 1e0b8f9b..00000000 --- a/modules/local/deseq2_diff.nf +++ /dev/null @@ -1,106 +0,0 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -params.multiqc_label = '' -def options = initOptions(params.options) - -process DESEQ2_DIFF { - //tag "DESeq2" - label "process_medium" - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'pipeline_info', publish_id:'') } - - conda (params.enable_conda ? "conda-forge::r-optparse=1.6.6 conda-forge::r-ggplot2=3.3.2 conda-forge::r-rcolorbrewer=1.1_2 conda-forge::r-pheatmap=1.0.12 bioconda::bioconductor-deseq2=1.28.0 bioconda::bioconductor-biocparallel=1.22.0 conda-forge::r-stringr=1.4.0 conda-forge::r-magrittr=2.0.1 bioconda::bioconductor-chromvar=1.10.0 bioconda::bioconductor-genomicranges=1.40.0" : null) - container "luslab/cutandrun-deseq2:latest" - - input: - val groups - path peak_beds - path bams - path pca_header_multiqc - path top_pca_header_multiqc - path pca_group_header_multiqc - path top_pca_group_header_multiqc - path diagnostic_header_multiqc - path top_diagnostic_header_multiqc - path clustering_header_multiqc - - output: - path "*.pdf" , optional:true, emit: pdf - path "*.RData" , optional:true, emit: rdata - path "*pca.vals.txt" , optional:true, emit: pca_txt - path "*pca.vals_mqc.tsv" , optional:true, emit: pca_multiqc - path "*pca.top_vals.txt" , optional:true, emit: top_pca_txt - path "*pca.top_vals_mqc.tsv" , optional:true, emit: top_pca_multiqc - - path "*pca.vals_group.txt" , optional:true, emit: pca_group_txt - path "*pca.vals_group_mqc.tsv" , optional:true, emit: pca_group_multiqc - - path "*pca.top_vals_group.txt" , optional:true, emit: top_pca_group_txt - path "*pca.top_vals_group_mqc.tsv" , optional:true, emit: top_pca_group_multiqc - - path "*pca.diagnostic_vals.txt" , optional:true, emit: pca_diagnostic_txt - path "*pca.diagnostic_vals_mqc.yaml" , optional:true, emit: pca_diagnostic_multiqc - - path "*pca.top_diagnostic_vals.txt" , optional:true, emit: top_pca_diagnostic_txt - path "*pca.top_diagnostic_vals_mqc.yaml", optional:true, emit: top_pca_diagnostic_multiqc - - - path "*sample.dists.txt" , optional:true, emit: dists_txt - path "*sample.dists_mqc.tsv" , optional:true, emit: dists_multiqc - //path "*.log" , optional:true, emit: log - path "size_factors" , optional:true, emit: size_factors - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def label_lower = params.multiqc_label.toLowerCase() - def label_upper = params.multiqc_label.toUpperCase() - - // Convert to comma separated strings - String str_groups = groups.join(",") - String str_beds = peak_beds.join(",") - String str_bams = bams.join(",") - - """ - deseq2_diff.r \\ - --groups $str_groups \\ - --bed $str_beds \\ - --bam $str_bams \\ - --cores $task.cpus \\ - $options.args - - if [ -f "R_sessionInfo.log" ]; then - sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$pca_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt - cat tmp.txt *.pca.vals.txt > ${label_lower}.pca.vals_mqc.tsv - - sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$top_pca_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt - cat tmp.txt *.pca.top_vals.txt > ${label_lower}.pca.top_vals_mqc.tsv - - sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$pca_group_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt - cat tmp.txt *.pca.vals_group.txt > ${label_lower}.pca.vals_group_mqc.tsv - - sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$top_pca_group_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt - cat tmp.txt *.pca.top_vals_group.txt > ${label_lower}.top_pca.vals_group_mqc.tsv - - sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$diagnostic_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt - cat tmp.txt *.pca.diagnostic_vals.txt > ${label_lower}.pca.diagnostic_vals_mqc.yaml - - sed "s/deseq2_pca/${label_lower}_deseq2_pca/g" <$top_diagnostic_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 PCA/${label_upper} DESeq2 PCA/g" tmp.txt - cat tmp.txt *.pca.top_diagnostic_vals.txt > ${label_lower}.pca.top_diagnostic_vals_mqc.yaml - - sed "s/deseq2_clustering/${label_lower}_deseq2_clustering/g" <$clustering_header_multiqc >tmp.txt - sed -i -e "s/DESeq2 sample/${label_upper} DESeq2 sample/g" tmp.txt - cat tmp.txt *.sample.dists.txt > ${label_lower}.sample.dists_mqc.tsv - fi - - Rscript -e "library(DESeq2); write(x=as.character(packageVersion('DESeq2')), file='${software}.version.txt')" - """ -} From e91ff8c0e95977362f32f229017d1a79e4b0323e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 2 Aug 2021 14:57:16 +0100 Subject: [PATCH 457/675] removed deseq2 --- assets/multiqc/deseq2_clustering_header.txt | 12 ------------ assets/multiqc/deseq2_diagnostic_header.txt | 11 ----------- assets/multiqc/deseq2_pca_group_header.txt | 11 ----------- assets/multiqc/deseq2_pca_header.txt | 11 ----------- assets/multiqc/deseq2_top_diagnostic_header.txt | 11 ----------- assets/multiqc/deseq2_top_pca_group_header.txt | 11 ----------- assets/multiqc/deseq2_top_pca_header.txt | 11 ----------- 7 files changed, 78 deletions(-) delete mode 100644 assets/multiqc/deseq2_clustering_header.txt delete mode 100644 assets/multiqc/deseq2_diagnostic_header.txt delete mode 100644 assets/multiqc/deseq2_pca_group_header.txt delete mode 100644 assets/multiqc/deseq2_pca_header.txt delete mode 100644 assets/multiqc/deseq2_top_diagnostic_header.txt delete mode 100644 assets/multiqc/deseq2_top_pca_group_header.txt delete mode 100644 assets/multiqc/deseq2_top_pca_header.txt diff --git a/assets/multiqc/deseq2_clustering_header.txt b/assets/multiqc/deseq2_clustering_header.txt deleted file mode 100644 index 04e10efa..00000000 --- a/assets/multiqc/deseq2_clustering_header.txt +++ /dev/null @@ -1,12 +0,0 @@ -#id: 'deseq2_clustering' -#section_name: 'DESeq2 sample similarity' -#description: "is generated from clustering by Euclidean distances between -# DESeq2 -# rlog values for each sample -# in the deseq2_qc.r script." -#plot_type: 'heatmap' -#anchor: 'deseq2_clustering' -#pconfig: -# title: 'DESeq2: Heatmap of the sample-to-sample distances' -# xlab: True -# reverseColors: True diff --git a/assets/multiqc/deseq2_diagnostic_header.txt b/assets/multiqc/deseq2_diagnostic_header.txt deleted file mode 100644 index 5a45ac5e..00000000 --- a/assets/multiqc/deseq2_diagnostic_header.txt +++ /dev/null @@ -1,11 +0,0 @@ -id: 'deseq2_diagnostic' -section_name: 'DESeq2 Diagnostic OF PCs plot' -description: "DIAGNOSTIC OF PCs plot. - These values are calculated using DESeq2 - in the deseq2_qc.r script." -plot_type: 'linegraph' -anchor: 'deseq2_pca' -pconfig: - title: 'DESeq2: Diagnostic of Principal Components Plot' - xlab: Component - ylab: Percentage explained diff --git a/assets/multiqc/deseq2_pca_group_header.txt b/assets/multiqc/deseq2_pca_group_header.txt deleted file mode 100644 index e4905826..00000000 --- a/assets/multiqc/deseq2_pca_group_header.txt +++ /dev/null @@ -1,11 +0,0 @@ -#id: 'deseq2_pca_group' -#section_name: 'DESeq2 Group-Explanatory PCA plot' -#description: "Group-Explanatory PCA plot between samples in the experiment. -# These values are calculated using DESeq2 -# in the deseq2_qc.r script." -#plot_type: 'scatter' -#anchor: 'deseq2_pca' -#pconfig: -# title: 'DESeq2: Group-Explanatory Principal Component Plot' -# xlab: PC1 -# ylab: PC2 diff --git a/assets/multiqc/deseq2_pca_header.txt b/assets/multiqc/deseq2_pca_header.txt deleted file mode 100644 index 2599732a..00000000 --- a/assets/multiqc/deseq2_pca_header.txt +++ /dev/null @@ -1,11 +0,0 @@ -#id: 'deseq2_pca' -#section_name: 'DESeq2 PCA plot' -#description: "PCA plot between samples in the experiment. -# These values are calculated using DESeq2 -# in the deseq2_qc.r script." -#plot_type: 'scatter' -#anchor: 'deseq2_pca' -#pconfig: -# title: 'DESeq2: Principal component plot' -# xlab: PC1 -# ylab: PC2 diff --git a/assets/multiqc/deseq2_top_diagnostic_header.txt b/assets/multiqc/deseq2_top_diagnostic_header.txt deleted file mode 100644 index 24af008f..00000000 --- a/assets/multiqc/deseq2_top_diagnostic_header.txt +++ /dev/null @@ -1,11 +0,0 @@ -id: 'deseq2_top_diagnostic' -section_name: 'DESeq2 Diagnostic OF PCs plot - top 500 peaks' -description: "DIAGNOSTIC OF PCs plot. - These values are calculated using DESeq2 - in the deseq2_qc.r script." -plot_type: 'linegraph' -anchor: 'deseq2_pca' -pconfig: - title: 'DESeq2: Diagnostic of Principal Components Plot' - xlab: Component - ylab: Percentage explained diff --git a/assets/multiqc/deseq2_top_pca_group_header.txt b/assets/multiqc/deseq2_top_pca_group_header.txt deleted file mode 100644 index d8b6145b..00000000 --- a/assets/multiqc/deseq2_top_pca_group_header.txt +++ /dev/null @@ -1,11 +0,0 @@ -#id: 'deseq2_top_pca_group' -#section_name: 'DESeq2 Group-Explanatory PCA plot - top 500 peaks' -#description: "Group-Explanatory PCA plot between samples in the experiment. -# These values are calculated using DESeq2 -# in the deseq2_qc.r script." -#plot_type: 'scatter' -#anchor: 'deseq2_pca' -#pconfig: -# title: 'DESeq2: Group-Explanatory Principal Component Plot' -# xlab: PC1 -# ylab: PC2 diff --git a/assets/multiqc/deseq2_top_pca_header.txt b/assets/multiqc/deseq2_top_pca_header.txt deleted file mode 100644 index 6a08d81d..00000000 --- a/assets/multiqc/deseq2_top_pca_header.txt +++ /dev/null @@ -1,11 +0,0 @@ -#id: 'deseq2_top_pca' -#section_name: 'DESeq2 PCA plot - top 500 peaks' -#description: "PCA plot of top 500 peaks between samples in the experiment. -# These values are calculated using DESeq2 -# in the deseq2_qc.r script." -#plot_type: 'scatter' -#anchor: 'deseq2_top_pca' -#pconfig: -# title: 'DESeq2: Principal component plot' -# xlab: PC1 -# ylab: PC2 From 734abcd712fa7c98487bc40784145f220bea183a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 2 Aug 2021 14:57:34 +0100 Subject: [PATCH 458/675] removed some dev solutions --- dev/docker/consensus_peaks/Dockerfile | 8 ------ dev/docker/consensus_peaks/environment.yml | 14 ---------- dev/docker/consensus_peaks/run.sh | 5 ---- dev/docker/dash/Dockerfile | 21 -------------- dev/docker/dash/environment.yml | 19 ------------- dev/docker/dash/requirements.txt | 3 -- dev/docker/deseq2_diff/Dockerfile | 28 ------------------- dev/docker/deseq2_diff/build.sh | 3 -- dev/docker/deseq2_diff/environment.yml | 26 ----------------- dev/docker/deseq2_diff/run.sh | 3 -- .../static_reports/test_data/_dummy.txt | 0 11 files changed, 130 deletions(-) delete mode 100644 dev/docker/consensus_peaks/Dockerfile delete mode 100644 dev/docker/consensus_peaks/environment.yml delete mode 100755 dev/docker/consensus_peaks/run.sh delete mode 100644 dev/docker/dash/Dockerfile delete mode 100644 dev/docker/dash/environment.yml delete mode 100644 dev/docker/dash/requirements.txt delete mode 100644 dev/docker/deseq2_diff/Dockerfile delete mode 100755 dev/docker/deseq2_diff/build.sh delete mode 100644 dev/docker/deseq2_diff/environment.yml delete mode 100755 dev/docker/deseq2_diff/run.sh delete mode 100644 dev/docker/static_reports/test_data/_dummy.txt diff --git a/dev/docker/consensus_peaks/Dockerfile b/dev/docker/consensus_peaks/Dockerfile deleted file mode 100644 index 30076773..00000000 --- a/dev/docker/consensus_peaks/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM nfcore/base:1.14 -LABEL authors="charlotte.west@crick.ac.uk" \ - description="Docker image containing all requirements for development of thresholding peaks and plotting" - -# Install conda packages -COPY ./environment.yml / -RUN conda env create -f /environment.yml && conda clean -a -ENV PATH /opt/conda/envs/reporting/bin:$PATH diff --git a/dev/docker/consensus_peaks/environment.yml b/dev/docker/consensus_peaks/environment.yml deleted file mode 100644 index d199e3ef..00000000 --- a/dev/docker/consensus_peaks/environment.yml +++ /dev/null @@ -1,14 +0,0 @@ -# conda env create -f environment.yml -name: reporting -channels: - - conda-forge - - bioconda - - defaults -dependencies: - # python version - - python=3.8.3 - - # conda packages - - numpy=1.20.* - - pandas=1.2.* - - upsetplot=0.4.4 diff --git a/dev/docker/consensus_peaks/run.sh b/dev/docker/consensus_peaks/run.sh deleted file mode 100755 index 55027e3e..00000000 --- a/dev/docker/consensus_peaks/run.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-plot-consensus-peaks:latest /home/repo/bin/consensus_peaks.py \ ---peaks /home/repo/dev/docker/consensus_peaks/test_data/*peaks.bed \ ---outpath /home/repo/dev/docker/consensus_peaks/test_output diff --git a/dev/docker/dash/Dockerfile b/dev/docker/dash/Dockerfile deleted file mode 100644 index 86381289..00000000 --- a/dev/docker/dash/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM continuumio/miniconda3:4.9.2 -LABEL authors="chris.cheshire@crick.ac.uk" \ - description="Docker image containing all requirements plotly dash" - -# Init -RUN mkdir /app - -# Install conda and pip packages -COPY ./environment.yml / -COPY ./requirements.txt / -RUN conda env create -f /environment.yml && conda clean -a -ENV PATH /opt/conda/envs/dash/bin:$PATH - -# copy files over -COPY ./app.py /app/app.py -COPY ./lib /app/lib - -ENV DASH_DEBUG_MODE True -WORKDIR /app -EXPOSE 8050 -CMD ["python", "app.py"] diff --git a/dev/docker/dash/environment.yml b/dev/docker/dash/environment.yml deleted file mode 100644 index ca1e20b2..00000000 --- a/dev/docker/dash/environment.yml +++ /dev/null @@ -1,19 +0,0 @@ -# conda env create -f environment.yml -name: dash -channels: - - conda-forge - - bioconda - - defaults -dependencies: - # python version - - python=3.9.1 - - # conda packages - - numpy=1.20.* - - pandas=1.2.* - - seaborn=0.11.* - - # pip packages - - pip - - pip: - - -r file:requirements.txt diff --git a/dev/docker/dash/requirements.txt b/dev/docker/dash/requirements.txt deleted file mode 100644 index 53890942..00000000 --- a/dev/docker/dash/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -dash==1.19.* -dash-daq==0.5.* -dash-bootstrap-components==0.11.* diff --git a/dev/docker/deseq2_diff/Dockerfile b/dev/docker/deseq2_diff/Dockerfile deleted file mode 100644 index bdf40fa4..00000000 --- a/dev/docker/deseq2_diff/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# Set the base image to Ubuntu 16.04 -FROM rocker/rstudio:4.0.3 - -LABEL authors="chris.cheshire@crick.ac.uk" \ - description="Docker image containing Rstudio and a conda env for the deseq2_diff.r script" - -#Install conda -ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 -ENV PATH /opt/conda/bin:$PATH - -RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-Linux-x86_64.sh -O ~/miniconda.sh && \ - /bin/bash ~/miniconda.sh -b -p /opt/conda && \ - rm ~/miniconda.sh && \ - /opt/conda/bin/conda clean -tipsy && \ - ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ - echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \ - echo "conda activate base" >> ~/.bashrc - -ENV TINI_VERSION v0.16.1 -ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini -RUN chmod +x /usr/bin/tini - -# Update conda -RUN conda update -n base -c defaults conda - -# Install conda packages -COPY environment.yml / -RUN conda env update -f /environment.yml && conda clean -a diff --git a/dev/docker/deseq2_diff/build.sh b/dev/docker/deseq2_diff/build.sh deleted file mode 100755 index 2a689579..00000000 --- a/dev/docker/deseq2_diff/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -docker build -f Dockerfile -t luslab/cutrun-ds2-dev:latest . diff --git a/dev/docker/deseq2_diff/environment.yml b/dev/docker/deseq2_diff/environment.yml deleted file mode 100644 index 457c72bf..00000000 --- a/dev/docker/deseq2_diff/environment.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: root -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - conda-forge::r-optparse=1.6.6 - - conda-forge::r-ggplot2=3.3.2 - - conda-forge::r-rcolorbrewer=1.1_2 - - conda-forge::r-pheatmap=1.0.12 - - bioconda::bioconductor-deseq2=1.28.0 - - bioconda::bioconductor-biocparallel=1.22.0 - - conda-forge::r-stringr=1.4.0 - - conda-forge::r-magrittr=2.0.1 - - bioconda::bioconductor-chromvar=1.10.0 - - bioconda::bioconductor-genomicranges=1.40.0 - - - # - conda-forge::r-optparse=1.6.6 - # - conda-forge::r-stringr=1.4.0 - # - conda-forge::r-magrittr=2.0.1 - # - conda-forge::r-ggplot2=3.1.1 - # - bioconda::bioconductor-biocparallel=1.24.0 - # - bioconda::bioconductor-genomicranges=1.42.0 - # - bioconda::bioconductor-chromvar=1.12.0 - # - bioconda::bioconductor-deseq2=1.30.0 diff --git a/dev/docker/deseq2_diff/run.sh b/dev/docker/deseq2_diff/run.sh deleted file mode 100755 index f8b258ae..00000000 --- a/dev/docker/deseq2_diff/run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -docker run -it -e PASSWORD=password -p 8787:8787 -v ~/dev/repos/cutandrun:/home/rstudio luslab/cutrun-ds2-dev:latest diff --git a/dev/docker/static_reports/test_data/_dummy.txt b/dev/docker/static_reports/test_data/_dummy.txt deleted file mode 100644 index e69de29b..00000000 From 1e4dc658aa856ace0db99cf4939c2fbfa70b49ec Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 2 Aug 2021 14:58:00 +0100 Subject: [PATCH 459/675] updated reports to split out all reports into singles --- bin/lib/reports.py | 182 ++++++++++++++++-------------- conf/modules.config | 45 +------- dev/docker/static_reports/run.sh | 35 +----- modules/local/generate_reports.nf | 12 +- workflows/cutandrun.nf | 54 +++++---- 5 files changed, 140 insertions(+), 188 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 42075756..d4a7fc7c 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -65,6 +65,7 @@ def load_data(self): # Create list of deeptools raw fragment files dt_frag_list = glob.glob(self.raw_frag_path) + for i in list(range(len(dt_frag_list))): # create dataframe from csv file for each file and save to a list dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', header=None, names=['Size','Occurrences']) @@ -343,56 +344,62 @@ def generate_plots(self): self.annotate_data_table() # Plot 1 - plot1, data1 = self.alignment_summary() - plots["alignment_summary"] = plot1 - data["alignment_summary"] = data1 + multi_plot, data1 = self.alignment_summary() + plots["01_01_seq_depth"] = multi_plot[0] + plots["01_02_alignable_frag"] = multi_plot[1] + plots["01_03_alignment_rate_target"] = multi_plot[2] + plots["01_04_alignment_rate_spikein"] = multi_plot[3] + data["01_alignment_summary"] = data1 # Plot 2 if self.duplicate_info == True: - plot2, data2 = self.duplication_summary() - plots["duplication_summary"] = plot2 - data["duplication_summary"] = data2 + multi_plot, data2 = self.duplication_summary() + plots["02_01_dup_rate"] = multi_plot[0] + plots["02_02_est_lib_size"] = multi_plot[1] + plots["02_03_unique_frags"] = multi_plot[2] + data["02_duplication_summary"] = data2 # Plot 3 plot3, data3 = self.fraglen_summary_violin() - plots["frag_violin"] = plot3 - data["frag_violin"] = data3 + plots["03_01_frag_len_violin"] = plot3 + data["03_01_frag_len_violin"] = data3 # Plot 4 plot4, data4 = self.fraglen_summary_histogram() - plots["frag_hist"] = plot4 - data["frag_hist"] = data4 + plots["03_02_frag_len_hist"] = plot4 + data["03_02_frag_len_hist"] = data4 # Plot 5 plot5, data5 = self.replicate_heatmap() - plots["replicate_heatmap"] = plot5 - data["replicate_heatmap"] = data5 + plots["04_replicate_heatmap"] = plot5 + data["04_replicate_heatmap"] = data5 # Plot 6 - plot6, data6 = self.scale_factor_summary() - plots["scale_factor_summary"] = plot6 - data["scale_factor_summary"] = data6 + multi_plot, data6 = self.scale_factor_summary() + plots["05_01_scale_factor"] = multi_plot[0] + plots["05_02_frag_count"] = multi_plot[1] + data["05_scale_factor_summary"] = data6 # Plot 7a plot7a, data7a = self.no_of_peaks() - plots["no_of_peaks"] = plot7a - data["no_of_peaks"] = data7a + plots["06_01_no_of_peaks"] = plot7a + data["06_01_no_of_peaks"] = data7a # Plot 7b plot7b, data7b = self.peak_widths() - plots["peak_widths"] = plot7b - data["peak_widths"] = data7b + plots["06_02_peak_widths"] = plot7b + data["06_02_peak_widths"] = data7b # Plot 7c if self.multiple_reps: plot7c, data7c = self.reproduced_peaks() - plots["reproduced_peaks"] = plot7c - data["reproduced_peaks"] = data7c + plots["06_03_reproduced_peaks"] = plot7c + data["06_03_reproduced_peaks"] = data7c # Plot 7d plot7d, data7d = self.frags_in_peaks() - plots["frags_in_peaks"] = plot7d - data["frags_in_peaks"] = data7d + plots["06_04_frags_in_peaks"] = plot7d + data["06_04_frags_in_peaks"] = data7d # Fragment Length Histogram data in MultiQC yaml format txt = self.frag_len_hist_mqc() @@ -407,32 +414,26 @@ def gen_plots_to_folder(self, output_path): plots, data, txt = self.generate_plots() # Save mqc text file - txt_mqc = open(os.path.join(abs_path, "frag_len_mqc.txt"), "w") + txt_mqc = open(os.path.join(abs_path, "03_03_frag_len_mqc.txt"), "w") txt_mqc.write(txt) txt_mqc.close() # Save data to output folder for key in data: data[key].to_csv(os.path.join(abs_path, key + '.csv'), index=False) + + # Save plots to output folder + for key in plots: plots[key].savefig(os.path.join(abs_path, key + '.png')) # Save pdf of the plots self.gen_pdf(abs_path, plots) def gen_pdf(self, output_path, plots): - with PdfPages(os.path.join(output_path, 'report.pdf')) as pdf: + with PdfPages(os.path.join(output_path, 'merged_report.pdf')) as pdf: for key in plots: pdf.savefig(plots[key]) - # # We can also set the file's metadata via the PdfPages object: - # d = pdf.infodict() - # d['Title'] = 'Multipage PDF Example' - # d['Author'] = 'Jouni K. Sepp\xe4nen' - # d['Subject'] = 'How to create a multipage pdf file and set its metadata' - # d['Keywords'] = 'PdfPages multipage keywords author title subject' - # d['CreationDate'] = datetime.datetime(2009, 11, 13) - # d['ModDate'] = datetime.datetime.today() - #* #======================================================================================== # TXT FILES @@ -440,20 +441,12 @@ def gen_pdf(self, output_path, plots): #*/ def frag_len_hist_mqc(self): - # print(self.frag_hist) size_list = self.frag_hist["Size"].to_numpy().astype(str) occurrences_list = self.frag_hist["Occurrences"].to_numpy().astype(str) - # print(size_list) - # seperator = " : " * self.frag_hist.shape[0] size_list_sep = np.core.defchararray.add(size_list, " : ") x_y_list = np.core.defchararray.add(size_list_sep, occurrences_list) - # print(size_list_sep) - # print(x_y_list) - # print(size_list) group_rep = self.frag_hist[['group','replicate']].groupby(['group','replicate']).size().reset_index() - # print(group_rep) - first_line = "data:" for i in list(range(group_rep.shape[0])): @@ -486,33 +479,38 @@ def alignment_summary(self): # Subset data df_data = self.data_table.loc[:, ('id', 'group', 'bt2_total_reads_target', 'bt2_total_aligned_target', 'target_alignment_rate', 'spikein_alignment_rate')] - ## Construct quad plot - fig, seq_summary = plt.subplots(2,2) - fig.suptitle("Sequencing and Alignment Summary") + # Create plots array + figs = [] # Seq depth - sns.boxplot(data=df_data, x='group', y='bt2_total_reads_target', ax=seq_summary[0,0], palette = "magma") - seq_summary[0,0].set_title("Sequencing Depth") - seq_summary[0,0].set_ylabel("Total Reads") + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data, x='group', y='bt2_total_reads_target', palette = "magma") + fig.suptitle("Sequencing Depth") + ax.set(ylabel="Total Reads") + figs.append(fig) # Alignable fragments - sns.boxplot(data=df_data, x='group', y='bt2_total_aligned_target', ax=seq_summary[0,1], palette = "magma") - seq_summary[0,1].set_title("Alignable Fragments") - seq_summary[0,1].set_ylabel("Total Aligned Reads") + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data, x='group', y='bt2_total_aligned_target', palette = "magma") + fig.suptitle("Alignable Fragments") + ax.set(ylabel="Total Aligned Reads") + figs.append(fig) # Alignment rate hg38 - sns.boxplot(data=df_data, x='group', y='target_alignment_rate', ax=seq_summary[1,0], palette = "magma") - seq_summary[1,0].set_title("Alignment Rate (Target)") - seq_summary[1,0].set_ylabel("Percent of Fragments Aligned") + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data, x='group', y='target_alignment_rate', palette = "magma") + fig.suptitle("Alignment Rate (Target)") + ax.set(ylabel="Percent of Fragments Aligned") + figs.append(fig) # Alignment rate e.coli - sns.boxplot(data=df_data, x='group', y='spikein_alignment_rate', ax=seq_summary[1,1], palette = "magma") - seq_summary[1,1].set_title("Alignment Rate (Spike-in)") - seq_summary[1,1].set_ylabel("Percent of Fragments Aligned") - - plt.subplots_adjust(wspace=0.4, hspace=0.45) + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data, x='group', y='spikein_alignment_rate', palette = "magma") + fig.suptitle("Alignment Rate (Spike-in)") + ax.set(ylabel="Percent of Fragments Aligned") + figs.append(fig) - return fig, df_data + return figs, df_data # ---------- Plot 2 - Duplication Summary --------- # def duplication_summary(self): @@ -525,32 +523,37 @@ def duplication_summary(self): df_data['dedup_percent_duplication'] *= 100 df_data['unique_frag_num'] = df_data['dedup_read_pairs_examined'] * (1-df_data['dedup_percent_duplication']/100) - ## Construct quad plot - fig, seq_summary = plt.subplots(1,3) - fig.suptitle("Duplication Summary") + # Create plots array + figs = [] # Duplication rate - sns.boxplot(data=df_data, x='group', y='dedup_percent_duplication', ax=seq_summary[0], palette = "magma") - seq_summary[0].set_ylabel("Duplication Rate (%)") - seq_summary[0].set(ylim=(0, 100)) - seq_summary[0].xaxis.set_tick_params(labelrotation=45) + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data, x='group', y='dedup_percent_duplication', palette = "magma") + fig.suptitle("Duplication Rate") + ax.set(ylabel="Rate (%)") + ax.set(ylim=(0, 100)) + ax.xaxis.set_tick_params(labelrotation=45) + figs.append(fig) # Estimated library size - sns.boxplot(data=df_data, x='group', y='dedup_estimated_library_size', ax=seq_summary[1], palette = "magma") - seq_summary[1].set_ylabel("Estimated Library Size") - seq_summary[1].yaxis.set_major_formatter(m_formatter) - seq_summary[1].xaxis.set_tick_params(labelrotation=45) + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data, x='group', y='dedup_estimated_library_size', palette = "magma") + fig.suptitle("Estimated Library Size") + ax.set(ylabel="Size") + ax.yaxis.set_major_formatter(m_formatter) + ax.xaxis.set_tick_params(labelrotation=45) + figs.append(fig) # No. of unique fragments - sns.boxplot(data=df_data, x='group', y='unique_frag_num', ax=seq_summary[2], palette = "magma") - seq_summary[2].set_ylabel("No. of Unique Fragments") - seq_summary[2].yaxis.set_major_formatter(k_formatter) - seq_summary[2].xaxis.set_tick_params(labelrotation=45) - - # Set the plot sizing - plt.subplots_adjust(top = 0.9, bottom = 0.2, right = 0.9, left = 0.1, hspace = 0.7, wspace = 0.7) + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data, x='group', y='unique_frag_num', palette = "magma") + fig.suptitle("Unique Fragments") + ax.set(ylabel="Count") + ax.yaxis.set_major_formatter(k_formatter) + ax.xaxis.set_tick_params(labelrotation=45) + figs.append(fig) - return fig, df_data + return figs, df_data # ---------- Plot 3 - Fragment Distribution Violin --------- # @@ -592,25 +595,30 @@ def replicate_heatmap(self): # ---------- Plot 6 - Scale Factor Comparison --------- # def scale_factor_summary(self): - fig, scale_summary = plt.subplots(1,2) - fig.suptitle("Scaling Factor") - # Get normalised count data df_normalised_frags = self.data_table.loc[:, ('id', 'group')] df_normalised_frags['normalised_frags'] = self.data_table['bt2_total_reads_target']*self.data_table['scale_factor'] + figs = [] + # Subset meta data df_data_scale = self.data_table.loc[:, ('id', 'group','scale_factor')] # Scale factor - sns.boxplot(data=df_data_scale, x='group', y='scale_factor', ax=scale_summary[0], palette = "magma") - scale_summary[0].set_ylabel('Scale Factor') + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_data_scale, x='group', y='scale_factor', palette = "magma") + fig.suptitle("Spike-in Scale Factor") + ax.set(ylabel="Coefficient") + figs.append(fig) # Normalised fragment count - sns.boxplot(data=df_normalised_frags, x='group', y='normalised_frags', ax=scale_summary[1], palette = "magma") - scale_summary[1].set_ylabel('Normalised Fragment Count') + fig, ax = plt.subplots() + ax = sns.boxplot(data=df_normalised_frags, x='group', y='normalised_frags', palette = "magma") + fig.suptitle("Normalised Fragment Count") + ax.set(ylabel="Count") + figs.append(fig) - return fig, df_data_scale + return figs, df_data_scale # ---------- Plot 7 - Peak Analysis --------- # def no_of_peaks(self): diff --git a/conf/modules.config b/conf/modules.config index 79310d39..6e9c3894 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -108,7 +108,6 @@ params { } "picard_dedup_samtools" { suffix = ".target.dedup" - publish_files = false } @@ -236,6 +235,11 @@ params { publish_dir = "04_reporting" } + "samtools_index" { + suffix = ".target.sorted" + publish_files = false + } + "generate_reports" { publish_dir = "04_reporting/qc" } @@ -291,44 +295,7 @@ params { args = "-F 0x04" args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" suffix = ".frag_len" - publish_files = false - } - - - - - - - - - "deeptools_fragmentsize" { - publish_dir = "deeptools" - } - - - - - - - - - - /* - ======================================================================================== - AWK OPTIONS - ======================================================================================== - */ - - - - "awk_dt_frag" { - args = "" - suffix = ".dt.frag" - publish_dir = "" - publish_files = false + publish_dir = "03_peak_calling/06_fragments" } - - - } } diff --git a/dev/docker/static_reports/run.sh b/dev/docker/static_reports/run.sh index 582af2ba..f0061b9e 100755 --- a/dev/docker/static_reports/run.sh +++ b/dev/docker/static_reports/run.sh @@ -1,35 +1,10 @@ #!/bin/bash -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/meta_table.csv -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1_raw.csv -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.bed.stringent.bed -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.frag_len.txt -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.frags.bin500.awk.bed -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R1.sorted.bam -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/h3k27me3_R2_raw.csv - -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1_raw.csv -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1.frag_len.txt -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1.frags.bin500.awk.bed -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R1.sorted.bam -# wget -nc -P dev/docker/static_reports/test_data/ https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/dev_reporting/small/igg_R2_raw.csv - -# docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/reporting.py gen_reports \ -# --meta /home/repo/dev/docker/static_reports/test_data/meta_table.csv \ -# --raw_frag /home/repo/dev/docker/static_reports/test_data/*frag_len.txt \ -# --bin_frag /home/repo/dev/docker/static_reports/test_data/*bin500*.bed \ -# --seacr_bed /home/repo/dev/docker/static_reports/test_data/*bed.*.bed \ -# --bams /home/repo/dev/docker/static_reports/test_data/*sorted.bam \ -# --output /home/repo/dev/docker/static_reports/test_output \ -# --log /home/repo/dev/docker/static_reports/test_output/log.txt - docker run --rm -v "$PWD":/home/repo -it luslab/cutandrun-dev-reporting:latest /home/repo/bin/reporting.py gen_reports \ ---meta /home/repo/dev/docker/static_reports/test_data/tmp_dir/meta_table.csv \ ---raw_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*frag_len.txt \ ---bin_frag /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bin500*.bed \ ---seacr_bed /home/repo/dev/docker/static_reports/test_data/tmp_dir/*bed.*.bed \ ---bams /home/repo/dev/docker/static_reports/test_data/tmp_dir/*sorted.bam \ +--meta /home/repo/results/04_reporting/meta_table.csv \ +--raw_frag /home/repo/results/03_peak_calling/06_fragments/*frag_len.txt \ +--bin_frag /home/repo/results/03_peak_calling/06_fragments/*bin500*.bed \ +--seacr_bed /home/repo/results/03_peak_calling/04_called_peaks/*bed.*.bed \ +--bams /home/repo/results/02_alignment/bowtie2/target/markdup/*.bam \ --output /home/repo/dev/docker/static_reports/test_output \ --log /home/repo/dev/docker/static_reports/test_output/log.txt - - diff --git a/modules/local/generate_reports.nf b/modules/local/generate_reports.nf index a8a3aba3..a877fea6 100644 --- a/modules/local/generate_reports.nf +++ b/modules/local/generate_reports.nf @@ -9,9 +9,6 @@ process GENERATE_REPORTS { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - //conda (params.enable_conda ? "conda-forge::python=3.8.3" : null) - //container "quay.io/biocontainers/python:3.8.3" - //container 'quay.io/biocontainers/pybda:0.1.0--pyh5ca1d4c_0' container "luslab/cutandrun-dev-reporting:latest" input: @@ -19,14 +16,15 @@ process GENERATE_REPORTS { path raw_fragments path bed_fragments path seacr_beds - path bam_bais + path bam + path bai path frag_len_header_multiqc output: path '*.pdf', emit: pdf path '*.csv', emit: csv path '*.png', emit: png - path 'frag_len_mqc.yaml', emit: frag_len_multiqc + path '*frag_len_mqc.yaml', emit: frag_len_multiqc path '*.version.txt', emit: version script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ @@ -40,8 +38,8 @@ process GENERATE_REPORTS { --output . \\ --log log.txt - if [ -f "frag_len_mqc.txt" ]; then - cat $frag_len_header_multiqc frag_len_mqc.txt > frag_len_mqc.yaml + if [ -f "03_03_frag_len_mqc.txt" ]; then + cat $frag_len_header_multiqc 03_03_frag_len_mqc.txt > frag_len_mqc.yaml fi python --version | grep -E -o \"([0-9]{1,}\\.)+[0-9]{1,}\" > python.version.txt diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index cce124c9..1f52444d 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -51,13 +51,6 @@ ch_multiqc_config = file("$projectDir/assets/multiqc_config.yaml", checkI ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() // Header files for MultiQC -ch_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_header.txt", checkIfExists: true) -ch_top_pca_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_header.txt", checkIfExists: true) -ch_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_pca_group_header.txt", checkIfExists: true) -ch_top_pca_group_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_pca_group_header.txt", checkIfExists: true) -ch_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_diagnostic_header.txt", checkIfExists: true) -ch_top_diagnostic_header_multiqc = file("$projectDir/assets/multiqc/deseq2_top_diagnostic_header.txt", checkIfExists: true) -ch_clustering_header_multiqc = file("$projectDir/assets/multiqc/deseq2_clustering_header.txt", checkIfExists: true) ch_frag_len_header_multiqc = file("$projectDir/assets/multiqc/frag_len_header.txt", checkIfExists: true) /* @@ -211,15 +204,15 @@ else if(params.save_align_intermed) { picard_markduplicates_options = modules["picard_markduplicates"] picard_markduplicates_samtools_options = modules["picard_markduplicates_samtools"] if(!run_remove_dups) { - picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target/markdup" picard_markduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] - picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target/markdup" picard_markduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } else if(params.save_align_intermed) { - picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/mark_dup" + picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/markdup" picard_markduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] - picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/mark_dup" + picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target/intermed/markdup" picard_markduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } @@ -230,15 +223,15 @@ if(params.dedup_target_reads) { dedup_control_only = false } picard_deduplicates_options = modules["picard_dedup"] picard_deduplicates_samtools_options = modules["picard_dedup_samtools"] if(run_remove_dups) { - picard_deduplicates_options.publish_dir = "02_alignment/${params.aligner}/target" - picard_deduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] - picard_deduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_deduplicates_options.publish_dir = "02_alignment/${params.aligner}/target/dedup" + picard_deduplicates_options.publish_files = ["bam":"","metrics.txt": "picard_metrics"] + picard_deduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target/dedup" picard_deduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] if(dedup_control_only) { - picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_options.publish_dir = "02_alignment/${params.aligner}/target/markdup" picard_markduplicates_options.publish_files = ["bam":"","metrics.txt":"picard_metrics"] - picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target" + picard_markduplicates_samtools_options.publish_dir = "02_alignment/${params.aligner}/target/markdup" picard_markduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } } @@ -259,7 +252,6 @@ awk_threshold.command = "' \$10 >= 1 {print \$0}'" def awk_bt2_options = modules["awk_bt2"] def awk_bt2_spikein_options = modules["awk_bt2_spikein"] def awk_dedup_options = modules["awk_dedup"] -def awk_dt_frag_options = modules["awk_dt_frag"] def multiqc_options = modules["multiqc"] multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" @@ -274,7 +266,7 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title * MODULES */ include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) +include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) @@ -287,8 +279,6 @@ include { GENERATE_REPORTS } from "../modules/local/generate_repor include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) -// include { DEEPTOOLS_BAMPEFRAGMENTSIZE } from "../modules/local/software/deeptools/bamPEFragmentSize/main" addParams( options: modules["deeptools_fragmentsize"] ) - /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ @@ -302,9 +292,6 @@ include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflow include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", meta_prefix: "dedup_", script_mode: false ) include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) - -// include { ANNOTATE_META_AWK as ANNOTATE_DT_FRAG_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dt_frag_options, meta_suffix: "", meta_prefix: "", script_mode: true ) - /* ======================================================================================== IMPORT NF-CORE MODULES/SUBWORKFLOWS @@ -321,7 +308,8 @@ include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../mo include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) - +include { SAMTOOLS_SORT } from "../modules/nf-core/software/samtools/sort/main.nf" addParams( options: modules["samtools_sort"] ) +include { SAMTOOLS_INDEX } from "../modules/nf-core/software/samtools/index/main.nf" addParams( options: modules["samtools_index"] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -877,6 +865,21 @@ workflow CUTANDRUN { ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) ) + /* + * MODULE: Sort bams by mate pair ids (no position) + */ + SAMTOOLS_SORT ( + ch_samtools_bam + ) + //EXAMPLE CHANNEL STRUCT: [[META], BAM] + //SAMTOOLS_SORT.out.bam | view + + SAMTOOLS_INDEX ( + SAMTOOLS_SORT.out.bam + ) + //EXAMPLE CHANNEL STRUCT: [[META], BAI] + //SAMTOOLS_INDEX.out.bai | view + /* * MODULE: Generate python reporting using mixture of meta-data and direct file processing */ @@ -886,7 +889,8 @@ workflow CUTANDRUN { SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments ch_seacr_bed.collect{it[1]}, // peak beds - ch_samtools_bam.collect{it[1]}, // bam files sorted by mate pair ids + SAMTOOLS_SORT.out.bam.collect{it[1]}, // bam files sorted by mate pair ids + SAMTOOLS_INDEX.out.bai.collect{it[1]}, // bai files sorted by mate pair ids ch_frag_len_header_multiqc // multiqc config header for fragment length distribution plot ) ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc From 554d7f4ff1437a3c440e0c4e6a84cf65966930f4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 5 Aug 2021 21:58:29 +0100 Subject: [PATCH 460/675] Edited multqc --- assets/multiqc_config.yaml | 53 +++++++++++++++++++++----------------- conf/modules.config | 1 - 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index fce73e79..1f262584 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -5,31 +5,31 @@ report_comment: > report_header_info: - Contact E-mail: "chris.cheshire@crick.ac.uk" - - Application Type: "CUT&TAG" + - Application Type: "CUT&RUN" - Project Type: "Application" - - Sequencing Platform: "HiSeq 2500 High Output V4" - - Sequencing Setup: "2x50" + # - Sequencing Platform: "HiSeq 2500 High Output V4" + # - Sequencing Setup: "2x50" -show_analysis_paths: True -show_analysis_time: True +# show_analysis_paths: True +# show_analysis_time: True -show_hide_buttons: - - Read Group 1 - - Read Group 2 - - Controls - - Conditions -show_hide_mode: - - show - - show - - show - - show -show_hide_patterns: - - _r1 - - _r2 - - igg_ - - ["h3k4me3_", "h3k27me3_"] +# show_hide_buttons: +# - Read Group 1 +# - Read Group 2 +# - Controls +# - Conditions +# show_hide_mode: +# - show +# - show +# - show +# - show +# show_hide_patterns: +# - _r1 +# - _r2 +# - igg_ +# - ["h3k4me3_", "h3k27me3_"] -export_plots: true +# export_plots: true # Run only these modules run_modules: @@ -81,8 +81,15 @@ section_comments: - It can be due to the Tn5 preference. - What you might be detecting is the 10-bp periodicity that shows up as a sawtooth pattern in the length distribution. If so, this is normal and will not affect alignment or peak calling. In any case we do not recommend trimming as the bowtie2 parameters that we list will give accurate mapping information without trimming. -fastqc_config: - fastqc_theoretical_gc: "hg38_genome" +# fastqc_config: +# fastqc_theoretical_gc: "hg38_genome" + +# extra_fn_clean_exts: +# - ".spikein.bowtie2" +# - "_processedFile" +# extra_fn_clean_trim: +# - "#" +# - ".myext" # Customise the module search patterns to speed up execution time # - Skip module sub-tools that we are not interested in diff --git a/conf/modules.config b/conf/modules.config index 6e9c3894..0b5d0692 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -39,7 +39,6 @@ params { args = "" publish_dir = "01_prealign/trimgalore" publish_files = ["txt":"", "html":"fastqc", "zip":"fastqc"] - //suffix = ".trimmed" } /* From de5632f6d24e4df90d421416b547ece81914d350 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 6 Aug 2021 22:35:52 +0100 Subject: [PATCH 461/675] all current tests pass --- .../local/samtools_view_sort_stats.nf | 8 +++- tests/test_verify_output_align_intermed.yml | 12 ++--- tests/test_verify_output_duplicates.yml | 38 ++++++++-------- workflows/cutandrun.nf | 45 ++++++++++++------- 4 files changed, 60 insertions(+), 43 deletions(-) diff --git a/subworkflows/local/samtools_view_sort_stats.nf b/subworkflows/local/samtools_view_sort_stats.nf index 4f290239..d93a7fff 100644 --- a/subworkflows/local/samtools_view_sort_stats.nf +++ b/subworkflows/local/samtools_view_sort_stats.nf @@ -23,7 +23,13 @@ workflow SAMTOOLS_VIEW_SORT_STATS { * Index BAM file and run samtools stats, flagstat and idxstats */ SAMTOOLS_INDEX ( SAMTOOLS_VIEW.out.bam ) - BAM_STATS_SAMTOOLS ( SAMTOOLS_VIEW.out.bam.join(SAMTOOLS_INDEX.out.bai, by: [0]) ) + + // Join bam/bai + ch_bam_sample_id = SAMTOOLS_VIEW.out.bam.map { row -> [row[0].id, row] } + ch_bai_sample_id = SAMTOOLS_INDEX.out.bai.map { row -> [row[0].id, row] } + ch_bam_bai = ch_bam_sample_id.join(ch_bai_sample_id, by: [0]).map {row -> [row[1][0], row[1][1], row[2][1]]} + + BAM_STATS_SAMTOOLS ( ch_bam_bai ) emit: bam = SAMTOOLS_VIEW.out.bam // channel: [ val(meta), [ bam ] ] diff --git a/tests/test_verify_output_align_intermed.yml b/tests/test_verify_output_align_intermed.yml index 97217a11..7d7d9305 100644 --- a/tests/test_verify_output_align_intermed.yml +++ b/tests/test_verify_output_align_intermed.yml @@ -7,9 +7,9 @@ files: - path: results/02_alignment/bowtie2/target/intermed/align/h3k27me3_R1.target.sorted.bam - path: results/02_alignment/bowtie2/target/intermed/qfilter/h3k27me3_R1.target.filtered.bam - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam - - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam.bai - - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam.bai - - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat - - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/markdup/igg_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/markdup/igg_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/markdup/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/markdup/samtools_stats/igg_R1.target.markdup.bam.flagstat diff --git a/tests/test_verify_output_duplicates.yml b/tests/test_verify_output_duplicates.yml index 9b67651a..35297929 100644 --- a/tests/test_verify_output_duplicates.yml +++ b/tests/test_verify_output_duplicates.yml @@ -6,12 +6,12 @@ - verify_output/align/duplicates - verify_output/align/duplicates/mark files: - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam - - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam.bai - - path: results/02_alignment/bowtie2/target/igg_R1.target.markdup.bam.bai - - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat - - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/markdup/igg_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/markdup/igg_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/markdup/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/markdup/samtools_stats/igg_R1.target.markdup.bam.flagstat - name: test_verify_output_duplicates_remove command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --dedup_target_reads false @@ -21,13 +21,13 @@ - verify_output/align/duplicates - verify_output/align/duplicates/remove files: - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam - - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.markdup.bam.bai - - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam.bai - - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat - - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.dedup.bam.flagstat - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.dedup.bam + - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam + - path: results/02_alignment/bowtie2/target/dedup/igg_R1.target.dedup.bam + - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam.bai + - path: results/02_alignment/bowtie2/target/dedup/igg_R1.target.dedup.bam.bai + - path: results/02_alignment/bowtie2/target/markdup/samtools_stats/h3k27me3_R1.target.markdup.bam.flagstat + - path: results/02_alignment/bowtie2/target/dedup/samtools_stats/igg_R1.target.dedup.bam.flagstat + - path: results/02_alignment/bowtie2/target/dedup/h3k27me3_R1.target.dedup.bam should_exist: false - name: test_verify_output_duplicates_remove_target @@ -38,9 +38,9 @@ - verify_output/align/duplicates - verify_output/align/duplicates/remove_target files: - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.dedup.bam - - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.dedup.bam.bai - - path: results/02_alignment/bowtie2/target/igg_R1.target.dedup.bam.bai - - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.dedup.bam.flagstat - - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.dedup.bam.flagstat \ No newline at end of file + - path: results/02_alignment/bowtie2/target/dedup/h3k27me3_R1.target.dedup.bam + - path: results/02_alignment/bowtie2/target/dedup/igg_R1.target.dedup.bam + - path: results/02_alignment/bowtie2/target/dedup/h3k27me3_R1.target.dedup.bam.bai + - path: results/02_alignment/bowtie2/target/dedup/igg_R1.target.dedup.bam.bai + - path: results/02_alignment/bowtie2/target/dedup/samtools_stats/h3k27me3_R1.target.dedup.bam.flagstat + - path: results/02_alignment/bowtie2/target/dedup/samtools_stats/igg_R1.target.dedup.bam.flagstat \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 1f52444d..dc20dc75 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -70,13 +70,18 @@ def run_remove_dups = true def run_peak_calling = true def run_reporting = true def run_deep_tools = true +def run_multiqc = true if(params.minimum_alignment_q_score > 0) { run_q_filter = true } if(params.skip_markduplicates) { run_mark_dups = false } if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } if(params.skip_peak_calling) { run_peak_calling = false } -if(params.skip_reporting) { run_reporting = false } if(!params.gene_bed || params.skip_heatmaps) { run_deep_tools = false } +if(params.skip_multiqc) { run_multiqc = false } +if(params.skip_reporting) { + run_reporting = false + run_multiqc = false +} if(params.only_input) { run_genome_prep = false @@ -88,6 +93,7 @@ if(params.only_input) { run_remove_dups = false run_peak_calling = false run_reporting = false + run_multiqc = false } if(params.only_genome) { @@ -100,6 +106,7 @@ if(params.only_genome) { run_remove_dups = false run_peak_calling = false run_reporting = false + run_multiqc = false } if(params.only_preqc) { @@ -110,6 +117,7 @@ if(params.only_preqc) { run_remove_dups = false run_peak_calling = false run_reporting = false + run_multiqc = false } if(params.only_alignment) { @@ -118,15 +126,18 @@ if(params.only_alignment) { run_remove_dups = false run_peak_calling = false run_reporting = false + run_multiqc = false } if(params.only_filtering) { run_peak_calling = false run_reporting = false + run_multiqc = false } if(params.only_peak_calling) { run_reporting = false + run_multiqc = false } /* @@ -896,27 +907,27 @@ workflow CUTANDRUN { ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) } - } - /* - * MODULE: Collect software versions used in pipeline - */ - ch_software_versions - .map { it -> if (it) [ it.baseName, it ] } - .groupTuple() - .map { it[1][0] } - .flatten() - .collect() - .set { ch_software_versions } - - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() - ) + /* + * MODULE: Collect software versions used in pipeline + */ + ch_software_versions + .map { it -> if (it) [ it.baseName, it ] } + .groupTuple() + .map { it[1][0] } + .flatten() + .collect() + .set { ch_software_versions } + + GET_SOFTWARE_VERSIONS ( + ch_software_versions.map { it }.collect() + ) + } /* * MODULE: Multiqc */ - if (!params.skip_multiqc) { + if (run_multiqc) { workflow_summary = WorkflowCutandrun.paramsSummaryMultiqc(workflow, summary_params) ch_workflow_summary = Channel.value(workflow_summary) From c5c9d1ad47f51c81eae7a36b98bdcda097445d7c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sat, 7 Aug 2021 09:16:31 +0100 Subject: [PATCH 462/675] Added more tests --- nextflow.config | 1 + subworkflows/local/consensus_peaks.nf | 10 +++---- ...OMPLETE_test_only_switches_run_through.yml | 0 .../test_verify_output_only_peak_calling.yml | 21 ++++++++++++++ tests/test_verify_output_skip_trimming.yml | 8 ++++++ workflows/cutandrun.nf | 28 +++++++++++-------- 6 files changed, 51 insertions(+), 17 deletions(-) delete mode 100644 tests/_INCOMPLETE_test_only_switches_run_through.yml create mode 100644 tests/test_verify_output_only_peak_calling.yml create mode 100644 tests/test_verify_output_skip_trimming.yml diff --git a/nextflow.config b/nextflow.config index 37d15b5a..37313232 100644 --- a/nextflow.config +++ b/nextflow.config @@ -71,6 +71,7 @@ params { skip_igv = false skip_heatmaps = false skip_multiqc = false + skip_upset_plots = false // Boilerplate options outdir = "./results" diff --git a/subworkflows/local/consensus_peaks.nf b/subworkflows/local/consensus_peaks.nf index 4ece4af6..ccb5470d 100644 --- a/subworkflows/local/consensus_peaks.nf +++ b/subworkflows/local/consensus_peaks.nf @@ -3,10 +3,10 @@ */ params.bedtools_merge_options = [:] -params.sort_options = [:] -params.plot_peak_options = [:] -params.awk_threshold_options = [:] -params.skip_peak_plot = false +params.sort_options = [:] +params.plot_peak_options = [:] +params.awk_threshold_options = [:] +params.run_peak_plotting = true include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options ) include { BEDTOOLS_MERGE } from "../../modules/nf-core/software/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) @@ -30,7 +30,7 @@ workflow CONSENSUS_PEAKS { AWK ( BEDTOOLS_MERGE.out.bed ) // Plot consensus peak sets - if(!params.skip_peak_plot) { + if(params.run_peak_plotting) { PLOT_CONSENSUS_PEAKS ( BEDTOOLS_MERGE.out.bed.collect{it[1]}.ifEmpty([]) ) } diff --git a/tests/_INCOMPLETE_test_only_switches_run_through.yml b/tests/_INCOMPLETE_test_only_switches_run_through.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/test_verify_output_only_peak_calling.yml b/tests/test_verify_output_only_peak_calling.yml new file mode 100644 index 00000000..d2de1900 --- /dev/null +++ b/tests/test_verify_output_only_peak_calling.yml @@ -0,0 +1,21 @@ +- name: test_verify_output_only_peak_calling + command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true + tags: + - verify_output + - verify_output/peak_calling + - verify_output/peak_calling/only_peak_calling + files: + - path: results/03_peak_calling/01_bam_to_bedgraph/h3k27me3_R1.bedGraph + - path: results/03_peak_calling/01_bam_to_bedgraph/igg_R1.bedGraph + - path: results/03_peak_calling/02_clip_bed/h3k27me3_R1.clipped.bedGraph + - path: results/03_peak_calling/02_clip_bed/igg_R1.clipped.bedGraph + - path: results/03_peak_calling/03_bed_to_bigwig/h3k27me3_R1.bigWig + - path: results/03_peak_calling/03_bed_to_bigwig/igg_R1.bigWig + - path: results/03_peak_calling/04_called_peaks/h3k27me3_R1.peaks.bed.stringent.bed + - path: results/03_peak_calling/04_called_peaks/igg_R1.peaks.bed.stringent.bed + should_exist: false + - path: results/03_peak_calling/05_consensus_peaks/h3k27me3.consensus.peaks.bed + - path: results/03_peak_calling/05_consensus_peaks/h3k27me3.consensus.peaks.filtered.awk.bed + - path: results/03_peak_calling/06_fragments/h3k27me3_R1.frag_len.txt + - path: results/03_peak_calling/06_fragments/h3k27me3_R1.frags.bin500.awk.bed + - path: results/03_peak_calling/06_fragments/h3k27me3_R1.frags.cut.bed \ No newline at end of file diff --git a/tests/test_verify_output_skip_trimming.yml b/tests/test_verify_output_skip_trimming.yml new file mode 100644 index 00000000..b89ab64a --- /dev/null +++ b/tests/test_verify_output_skip_trimming.yml @@ -0,0 +1,8 @@ +- name: test_verify_output_save_trimmed + command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true --skip_trimming true + tags: + - verify_output + - verify_output/save_trimmed + files: + - path: results/01_prealign/trimgalore/h3k27me3_R1_1.trimmed.fastq.gz + should_exist: false \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index dc20dc75..ab3f27a7 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -71,18 +71,22 @@ def run_peak_calling = true def run_reporting = true def run_deep_tools = true def run_multiqc = true - -if(params.minimum_alignment_q_score > 0) { run_q_filter = true } -if(params.skip_markduplicates) { run_mark_dups = false } -if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } -if(params.skip_peak_calling) { run_peak_calling = false } -if(!params.gene_bed || params.skip_heatmaps) { run_deep_tools = false } -if(params.skip_multiqc) { run_multiqc = false } -if(params.skip_reporting) { - run_reporting = false - run_multiqc = false +def run_peak_plotting = true + +if(params.minimum_alignment_q_score > 0) { run_q_filter = true } +if(params.skip_markduplicates) { run_mark_dups = false } +if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } +if(params.skip_peak_calling) { run_peak_calling = false } +if(!params.gene_bed || params.skip_heatmaps) { run_deep_tools = false } +if(params.skip_multiqc) { run_multiqc = false } +if(params.skip_upset_plots) { run_peak_plotting = false } +if(params.skip_reporting) { + run_reporting = false + run_multiqc = false + run_peak_plotting = false } + if(params.only_input) { run_genome_prep = false run_cat_fastq = false @@ -298,8 +302,8 @@ include { ALIGN_BOWTIE2 } from "../subworkflow include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) -include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"], skip_peak_plot: params.skip_reporting) -include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"], skip_peak_plot: params.skip_reporting) +include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) +include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", meta_prefix: "dedup_", script_mode: false ) include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) From 04bf0b95372d0dd968e287af9a7abf8de816ac72 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sat, 7 Aug 2021 09:25:38 +0100 Subject: [PATCH 463/675] Removed skip markdup operation --- nextflow.config | 2 +- workflows/cutandrun.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index 37313232..3f505158 100644 --- a/nextflow.config +++ b/nextflow.config @@ -50,7 +50,7 @@ params { minimum_alignment_q_score = 0 // Deduplication - skip_markduplicates = false + //skip_markduplicates = false skip_removeduplicates = false dedup_target_reads = false only_filtering = false diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ab3f27a7..b7d10b9a 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -74,7 +74,7 @@ def run_multiqc = true def run_peak_plotting = true if(params.minimum_alignment_q_score > 0) { run_q_filter = true } -if(params.skip_markduplicates) { run_mark_dups = false } +//if(params.skip_markduplicates) { run_mark_dups = false } if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } if(params.skip_peak_calling) { run_peak_calling = false } if(!params.gene_bed || params.skip_heatmaps) { run_deep_tools = false } From 1a97f45ec0d4c8d0ecedd65191458204a2ad4107 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sat, 7 Aug 2021 09:28:26 +0100 Subject: [PATCH 464/675] Removed skip peak calling --- nextflow.config | 2 +- workflows/cutandrun.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index 3f505158..6922965c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -63,7 +63,7 @@ params { igg_control = true peak_threshold = 0.05 replicate_threshold = 1 - skip_peak_calling = false + //skip_peak_calling = false only_peak_calling = false // Reporting and Visualisation diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index b7d10b9a..12974b7f 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -76,7 +76,7 @@ def run_peak_plotting = true if(params.minimum_alignment_q_score > 0) { run_q_filter = true } //if(params.skip_markduplicates) { run_mark_dups = false } if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } -if(params.skip_peak_calling) { run_peak_calling = false } +//if(params.skip_peak_calling) { run_peak_calling = false } if(!params.gene_bed || params.skip_heatmaps) { run_deep_tools = false } if(params.skip_multiqc) { run_multiqc = false } if(params.skip_upset_plots) { run_peak_plotting = false } From 07c80554595dd550957dfa7a2fa024c55cffd8e3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sat, 7 Aug 2021 09:50:55 +0100 Subject: [PATCH 465/675] Added reporting tests --- nextflow_schema.json | 2 +- tests/test_verify_output_skip_reporting.yml | 54 ++++++++ workflows/cutandrun.nf | 140 ++++++++++---------- 3 files changed, 125 insertions(+), 71 deletions(-) create mode 100644 tests/test_verify_output_skip_reporting.yml diff --git a/nextflow_schema.json b/nextflow_schema.json index 4613f8e0..16d10c05 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -241,7 +241,7 @@ "description": "Skip FastQC." }, "skip_multiqc": { - "type": "string", + "type": "boolean", "description": "Skip MultiQC." }, "skip_markduplicates": { diff --git a/tests/test_verify_output_skip_reporting.yml b/tests/test_verify_output_skip_reporting.yml new file mode 100644 index 00000000..3f9f6792 --- /dev/null +++ b/tests/test_verify_output_skip_reporting.yml @@ -0,0 +1,54 @@ +- name: test_verify_output_skip_reporting + command: nextflow run main.nf -profile docker,test --skip_fastqc true --skip_reporting true + tags: + - verify_output + - verify_output/reporting + - verify_output/reporting/skip_reporting + files: + - path: results/06_reporting/qc/merged_report.pdf + should_exist: false + - path: results/06_reporting/multiqc/multiqc_report.html + should_exist: false + - path: results/06_reporting/heatmaps/peaks/h3k27me3_R1.plotHeatmap.pdf + should_exist: false + - path: results/06_reporting/heatmaps/igv/igv_session.xml + should_exist: false + +- name: test_verify_output_skip_reporting_igv + command: nextflow run main.nf -profile docker,test --skip_fastqc true --skip_igv true + tags: + - verify_output + - verify_output/reporting + - verify_output/reporting/skip_igv + files: + - path: results/06_reporting/qc/merged_report.pdf + - path: results/06_reporting/multiqc/multiqc_report.html + - path: results/06_reporting/heatmaps/peaks/h3k27me3_R1.plotHeatmap.pdf + - path: results/06_reporting/heatmaps/igv/igv_session.xml + should_exist: false + +- name: test_verify_output_skip_reporting_heatmaps + command: nextflow run main.nf -profile docker,test --skip_fastqc true --skip_reporting true + tags: + - verify_output + - verify_output/reporting + - verify_output/reporting/skip_heatmaps + files: + - path: results/06_reporting/qc/merged_report.pdf + - path: results/06_reporting/multiqc/multiqc_report.html + - path: results/06_reporting/heatmaps/peaks/h3k27me3_R1.plotHeatmap.pdf + should_exist: false + - path: results/06_reporting/heatmaps/igv/igv_session.xml + +- name: test_verify_output_skip_reporting_multiqc + command: nextflow run main.nf -profile docker,test --skip_fastqc true --skip_reporting true + tags: + - verify_output + - verify_output/reporting + - verify_output/reporting/skip_multiqc + files: + - path: results/06_reporting/qc/merged_report.pdf + - path: results/06_reporting/multiqc/multiqc_report.html + should_exist: false + - path: results/06_reporting/heatmaps/peaks/h3k27me3_R1.plotHeatmap.pdf + - path: results/06_reporting/heatmaps/igv/igv_session.xml \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 12974b7f..f16daaee 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -804,6 +804,41 @@ workflow CUTANDRUN { ) } + /* + * MODULE: Extract max signal from peak beds + */ + AWK_EDIT_PEAK_BED ( + ch_seacr_bed + ) + //AWK_EDIT_PEAK_BED.out.file | view + + /* + * CHANNEL: Structure output for join on id + */ + AWK_EDIT_PEAK_BED.out.file + .map { row -> [row[0].id, row ].flatten()} + .set { ch_seacr_bed_id } + //ch_seacr_bed_id | view + + /* + * CHANNEL: Join beds and bigwigs on id + */ + ch_bigwig_no_igg + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_seacr_bed_id ) + .set { ch_dt_peaks } + //ch_dt_peaks | view + + ch_dt_peaks + .map { row -> row[1,2] } + .set { ch_ordered_bigwig } + //ch_ordered_bigwig | view + + ch_dt_peaks + .map { row -> row[-1] } + .set { ch_ordered_seacr_max } + //ch_ordered_seacr_max | view + if (run_deep_tools){ /* * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes @@ -821,41 +856,6 @@ workflow CUTANDRUN { DEEPTOOLS_COMPUTEMATRIX_GENE.out.matrix ) - /* - * MODULE: Extract max signal from peak beds - */ - AWK_EDIT_PEAK_BED ( - ch_seacr_bed - ) - //AWK_EDIT_PEAK_BED.out.file | view - - /* - * CHANNEL: Structure output for join on id - */ - AWK_EDIT_PEAK_BED.out.file - .map { row -> [row[0].id, row ].flatten()} - .set { ch_seacr_bed_id } - //ch_seacr_bed_id | view - - /* - * CHANNEL: Join beds and bigwigs on id - */ - ch_bigwig_no_igg - .map { row -> [row[0].id, row ].flatten()} - .join ( ch_seacr_bed_id ) - .set { ch_dt_peaks } - //ch_dt_peaks | view - - ch_dt_peaks - .map { row -> row[1,2] } - .set { ch_ordered_bigwig } - //ch_ordered_bigwig | view - - ch_dt_peaks - .map { row -> row[-1] } - .set { ch_ordered_seacr_max } - //ch_ordered_seacr_max | view - /* * MODULE: Compute DeepTools matrix used in heatmap plotting for Peaks */ @@ -872,45 +872,45 @@ workflow CUTANDRUN { DEEPTOOLS_PLOTHEATMAP_PEAKS ( DEEPTOOLS_COMPUTEMATRIX_PEAKS.out.matrix ) + } - /* - * MODULE: Export meta-data to csv file - */ - EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) - ) + /* + * MODULE: Export meta-data to csv file + */ + EXPORT_META ( + ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) + ) - /* - * MODULE: Sort bams by mate pair ids (no position) - */ - SAMTOOLS_SORT ( - ch_samtools_bam - ) - //EXAMPLE CHANNEL STRUCT: [[META], BAM] - //SAMTOOLS_SORT.out.bam | view + /* + * MODULE: Sort bams by mate pair ids (no position) + */ + SAMTOOLS_SORT ( + ch_samtools_bam + ) + //EXAMPLE CHANNEL STRUCT: [[META], BAM] + //SAMTOOLS_SORT.out.bam | view - SAMTOOLS_INDEX ( - SAMTOOLS_SORT.out.bam - ) - //EXAMPLE CHANNEL STRUCT: [[META], BAI] - //SAMTOOLS_INDEX.out.bai | view + SAMTOOLS_INDEX ( + SAMTOOLS_SORT.out.bam + ) + //EXAMPLE CHANNEL STRUCT: [[META], BAI] + //SAMTOOLS_INDEX.out.bai | view - /* - * MODULE: Generate python reporting using mixture of meta-data and direct file processing - */ - ch_frag_len_multiqc = Channel.empty() - GENERATE_REPORTS( - EXPORT_META.out.csv, // meta-data report stats - SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments - AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments - ch_seacr_bed.collect{it[1]}, // peak beds - SAMTOOLS_SORT.out.bam.collect{it[1]}, // bam files sorted by mate pair ids - SAMTOOLS_INDEX.out.bai.collect{it[1]}, // bai files sorted by mate pair ids - ch_frag_len_header_multiqc // multiqc config header for fragment length distribution plot - ) - ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc - ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) - } + /* + * MODULE: Generate python reporting using mixture of meta-data and direct file processing + */ + ch_frag_len_multiqc = Channel.empty() + GENERATE_REPORTS( + EXPORT_META.out.csv, // meta-data report stats + SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments + AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments + ch_seacr_bed.collect{it[1]}, // peak beds + SAMTOOLS_SORT.out.bam.collect{it[1]}, // bam files sorted by mate pair ids + SAMTOOLS_INDEX.out.bai.collect{it[1]}, // bai files sorted by mate pair ids + ch_frag_len_header_multiqc // multiqc config header for fragment length distribution plot + ) + ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc + ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) /* * MODULE: Collect software versions used in pipeline From bf39564767577ecfd6888471661e95a93b5b9eca Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 10:36:08 +0100 Subject: [PATCH 466/675] add tests --- tests/test_verify_output_skip_trimming.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_verify_output_skip_trimming.yml b/tests/test_verify_output_skip_trimming.yml index b89ab64a..8b12c326 100644 --- a/tests/test_verify_output_skip_trimming.yml +++ b/tests/test_verify_output_skip_trimming.yml @@ -1,8 +1,8 @@ -- name: test_verify_output_save_trimmed +- name: test_verify_output_skip_trimming command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true --skip_trimming true tags: - verify_output - - verify_output/save_trimmed + - verify_output/skip_trimming files: - path: results/01_prealign/trimgalore/h3k27me3_R1_1.trimmed.fastq.gz should_exist: false \ No newline at end of file From fe8034e76484bb944848a624a26cfc0236176dd3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 10:51:47 +0100 Subject: [PATCH 467/675] removed chr7 test --- conf/test_hg38_chr7.config | 20 -------------------- nextflow.config | 2 -- 2 files changed, 22 deletions(-) delete mode 100644 conf/test_hg38_chr7.config diff --git a/conf/test_hg38_chr7.config b/conf/test_hg38_chr7.config deleted file mode 100644 index b6322c7f..00000000 --- a/conf/test_hg38_chr7.config +++ /dev/null @@ -1,20 +0,0 @@ -/* -======================================================================================== - Nextflow config file for running minimal tests -======================================================================================== - Defines input files and everything required to run a more robust test. - - Use as follows: - nextflow run nf-core/cutandrun -profile test_hg38_chr7, - ----------------------------------------------------------------------------------------- -*/ - -params { - config_profile_name = 'GSE145187 hg38-chr7' - config_profile_description = 'Runs on full data for GSE145187 but just on chr7 of hg38' - - genome = 'GRCh38' - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr7.fa.gz' -} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 6922965c..d195bcda 100644 --- a/nextflow.config +++ b/nextflow.config @@ -182,8 +182,6 @@ profiles { test_full { includeConfig "conf/test_full.config" } - test_hg38_chr7 { includeConfig "conf/test_hg38_chr7.config" } - } // Load igenomes.config if required From 49e7daa90b330371b02943db2b6e6c8b035ddd83 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 10:55:31 +0100 Subject: [PATCH 468/675] removed flow test configs --- .../test_all_exp_one_igg_small.config | 23 ------------------- .../test_one_exp_all_igg_small.config | 23 ------------------- .../test_some_exp_all_igg_small.config | 23 ------------------- 3 files changed, 69 deletions(-) delete mode 100644 conf/igg_flow_tests/test_all_exp_one_igg_small.config delete mode 100644 conf/igg_flow_tests/test_one_exp_all_igg_small.config delete mode 100644 conf/igg_flow_tests/test_some_exp_all_igg_small.config diff --git a/conf/igg_flow_tests/test_all_exp_one_igg_small.config b/conf/igg_flow_tests/test_all_exp_one_igg_small.config deleted file mode 100644 index 3b5a3cb1..00000000 --- a/conf/igg_flow_tests/test_all_exp_one_igg_small.config +++ /dev/null @@ -1,23 +0,0 @@ -params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Limit resources so that this can run CI - max_cpus = 2 - max_memory = 6.GB - max_time = 6.h - - // Input data - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-allexp-1igg-small.csv' - - // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' - bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' - gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' - gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' - - minimum_alignment_q_score = 10 -} diff --git a/conf/igg_flow_tests/test_one_exp_all_igg_small.config b/conf/igg_flow_tests/test_one_exp_all_igg_small.config deleted file mode 100644 index 23944f53..00000000 --- a/conf/igg_flow_tests/test_one_exp_all_igg_small.config +++ /dev/null @@ -1,23 +0,0 @@ -params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Limit resources so that this can run CI - max_cpus = 2 - max_memory = 6.GB - max_time = 6.h - - // Input data - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-1exp-alligg-small.csv' - - // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' - bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' - gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' - gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' - - minimum_alignment_q_score = 10 -} diff --git a/conf/igg_flow_tests/test_some_exp_all_igg_small.config b/conf/igg_flow_tests/test_some_exp_all_igg_small.config deleted file mode 100644 index 8561153e..00000000 --- a/conf/igg_flow_tests/test_some_exp_all_igg_small.config +++ /dev/null @@ -1,23 +0,0 @@ -params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Limit resources so that this can run CI - max_cpus = 2 - max_memory = 6.GB - max_time = 6.h - - // Input data - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-varyingexp-alligg-small.csv' - - // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' - bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' - gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' - gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' - - minimum_alignment_q_score = 10 -} From d0dd65e04923b2e0ea13194a74db6eab39f3b62e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 11:09:09 +0100 Subject: [PATCH 469/675] Full test config --- conf/test_full.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index 2dd46871..b7f9dcdc 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -8,10 +8,10 @@ */ params { - config_profile_name = 'Full test profile' - config_profile_description = 'Full test dataset to check pipeline function' + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function' - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - genome = 'GRCh38' + genome = 'GRCh38' + input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' + minimum_alignment_q_score = 10 } \ No newline at end of file From 3f0860ca00394c73961df66bed44019892c8fabf Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:06:10 +0100 Subject: [PATCH 470/675] Updated contributing --- .github/CONTRIBUTING.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 854f1497..669ee791 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -19,7 +19,7 @@ If you'd like to write some code for nf-core/cutandrun, the standard workflow is * If there isn't one already, please create one so that others know you're working on this 2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [nf-core/cutandrun repository](https://github.com/nf-core/cutandrun) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) -4. Use `nf-core schema build .` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). +4. Use `nf-core schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged If you're not used to this workflow with git, you can start with some [docs from GitHub](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests) or even their [excellent `git` resources](https://try.github.io/). @@ -69,12 +69,12 @@ If you wish to contribute a new step, please use the following coding standards: 2. Write the process block (see below). 3. Define the output channel if needed (see below). 4. Add any new flags/options to `nextflow.config` with a default (see below). -5. Add any new flags/options to `nextflow_schema.json` with help text (with `nf-core schema build .`). +5. Add any new flags/options to `nextflow_schema.json` with help text (with `nf-core schema build`). 6. Add any new flags/options to the help message (for integer/text parameters, print to help the corresponding `nextflow.config` parameter). 7. Add sanity checks for all relevant parameters. 8. Add any new software to the `scrape_software_versions.py` script in `bin/` and the version command to the `scrape_software_versions` process in `main.nf`. 9. Do local tests that the new code works properly and as expected. -10. Add a new test command in `.github/workflow/ci.yaml`. +10. Add a new test command in `.github/workflow/ci.yml`. 11. If applicable add a [MultiQC](https://https://multiqc.info/) module. 12. Update MultiQC config `assets/multiqc_config.yaml` so relevant suffixes, name clean up, General Statistics Table column order, and module figures are in the right order. 13. Optional: Add any descriptions of MultiQC report sections and output files to `docs/output.md`. @@ -83,7 +83,7 @@ If you wish to contribute a new step, please use the following coding standards: Parameters should be initialised / defined with default values in `nextflow.config` under the `params` scope. -Once there, use `nf-core schema build .` to add to `nextflow_schema.json`. +Once there, use `nf-core schema build` to add to `nextflow_schema.json`. ### Default processes resource requirements @@ -125,4 +125,4 @@ You then need to edit the script `bin/scrape_software_versions.py` to: ### Images and figures -For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). +For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). \ No newline at end of file From 6cc0e3fdb5c752391da3b0a011d709055034b934 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:08:11 +0100 Subject: [PATCH 471/675] Updated PR template --- .github/PULL_REQUEST_TEMPLATE.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index be13324e..a7208368 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -16,12 +16,11 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/cuta - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! - - [ ] If you've added a new tool - add to the software_versions process and a regex to `scrape_software_versions.py` - - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) + - [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/nf-core/cutandrun/tree/master/.github/CONTRIBUTING.md) - [ ] If necessary, also make a PR on the nf-core/cutandrun _branch_ on the [nf-core/test-datasets](https://github.com/nf-core/test-datasets) repository. -- [ ] Make sure your code lints (`nf-core lint .`). +- [ ] Make sure your code lints (`nf-core lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker`). - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. -- [ ] `README.md` is updated (including new tool citations and authors/contributors). +- [ ] `README.md` is updated (including new tool citations and authors/contributors). \ No newline at end of file From 754b3908803806b4a81b939753638b1b4fd2c575 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:13:01 +0100 Subject: [PATCH 472/675] Updated bug report template --- .github/ISSUE_TEMPLATE/bug_report.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 0d239c21..57911a4b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -18,7 +18,7 @@ Please delete this text and anything that's not relevant from the template below I have checked the following places for your error: - [ ] [nf-core website: troubleshooting](https://nf-co.re/usage/troubleshooting) -- [ ] [nf-core/cutandrun pipeline documentation](https://nf-co.re/nf-core/cutandrun/usage) +- [ ] [nf-core/cutandrun pipeline documentation](https://nf-co.re/cutandrun/usage) ## Description of the bug @@ -51,14 +51,13 @@ Have you provided the following extra information/files: ## Nextflow Installation -- Version: +- Version: ## Container engine - Engine: - version: -- Image tag: ## Additional context - + \ No newline at end of file From fb2d70e4aa342ed34b84ffe8120ef6835a1a8bc0 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:22:07 +0100 Subject: [PATCH 473/675] Updated editor config --- .editorconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.editorconfig b/.editorconfig index afb20bb1..95549501 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,6 +11,9 @@ indent_style = space [*.{yml,yaml}] indent_size = 2 +[*.json] +insert_final_newline = unset + # These files are edited and tested upstream in nf-core/modules [/modules/nf-core/**] charset = unset From 319748c08a94292eab5e8cefd6e149a76446716c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:42:22 +0100 Subject: [PATCH 474/675] Updated workflowmain --- lib/WorkflowMain.groovy | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 2fc5faa7..66838dc8 100644 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -9,8 +9,9 @@ class WorkflowMain { // public static String citation(workflow) { return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + - "* The pipeline\n" + - " https://doi.org/10.5281/zenodo.1400710\n\n" + + // TODO nf-core: Add Zenodo DOI for pipeline after first release + //"* The pipeline\n" + + //" https://doi.org/10.5281/zenodo.XXXXXXX\n\n" + "* The nf-core framework\n" + " https://doi.org/10.1038/s41587-020-0439-x\n\n" + "* Software dependencies\n" + @@ -21,7 +22,7 @@ class WorkflowMain { // Print help to screen if required // public static String help(workflow, params, log) { - def command = "nextflow run nf-core/rnaseq --input samplesheet.csv --genome GRCh37 -profile docker" + def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" def help_string = '' help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) help_string += NfcoreSchema.paramsHelp(workflow, params, command) From e78a67f91c9d2c0b693b16dd4dd024cfc70c2bf7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:51:27 +0100 Subject: [PATCH 475/675] Updated workflow main --- lib/WorkflowMain.groovy | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 8aa7e443..66838dc8 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -72,9 +72,9 @@ class WorkflowMain { // Check the hostnames against configured profiles NfcoreTemplate.hostName(workflow, params, log) - // Check input has been provided + // Check at least one form of input has been provided if (!params.input) { - log.error "Please provide an input samplesheet to the pipeline e.g. '--input samplesheet.csv'" + log.error "Please specify an input for the pipeline e.g. '--input samplsheet.csv'." System.exit(1) } } @@ -84,11 +84,28 @@ class WorkflowMain { // public static String getGenomeAttribute(params, attribute) { def val = '' - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.attribute) { + val = params.attribute + } else if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { if (params.genomes[ params.genome ].containsKey(attribute)) { val = params.genomes[ params.genome ][ attribute ] } } return val } + + // + // Get attribute from genome config file e.g. fasta + // + public static String getGenomeAttributeSpikeIn(params, attribute) { + def val = '' + if (params.attribute) { + val = params.attribute + } else if (params.genomes && params.spikein_genome && params.genomes.containsKey(params.spikein_genome)) { + if (params.genomes[ params.spikein_genome ].containsKey(attribute)) { + val = params.genomes[ params.spikein_genome ][ attribute ] + } + } + return val + } } From d5a8f95496f4215b85f62f14c363afde6803de83 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:54:55 +0100 Subject: [PATCH 476/675] Fixed config --- nextflow.config | 55 +------------------------------------------------ 1 file changed, 1 insertion(+), 54 deletions(-) diff --git a/nextflow.config b/nextflow.config index f97f8b83..552e283f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -180,9 +180,7 @@ profiles { test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control test_full_small { includeConfig "conf/test_full_small.config" } // Runs a full experimental configuration but with a small dataset test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control - - - test_full { includeConfig "conf/test_full.config" } + test_full { includeConfig "conf/test_full.config" } // Runs a full experimental dataset } // Load igenomes.config if required @@ -190,57 +188,6 @@ if (!params.igenomes_ignore) { includeConfig "conf/igenomes.config" } -profiles { - debug { process.beforeScript = 'echo $HOSTNAME' } - 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 From 5dc6d7418177c68e957a42bca5a3818fe1201969 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 12:59:52 +0100 Subject: [PATCH 477/675] updated igenomes --- conf/igenomes.config | 1076 +++++++++++++----------------------------- 1 file changed, 329 insertions(+), 747 deletions(-) diff --git a/conf/igenomes.config b/conf/igenomes.config index 83807a2b..0d2e09fa 100644 --- a/conf/igenomes.config +++ b/conf/igenomes.config @@ -11,824 +11,406 @@ params { // illumina iGenomes reference file paths genomes { - 'GRCh37' { - fasta = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - } 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" } 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" + fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" } 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" + fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" + mito_name = "Mt" } 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" + fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" } 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" + fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" + mito_name = "MT" } 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" + mito_name = "MtDNA" + macs_gsize = "9e7" } 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" + fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" + mito_name = "MT" } 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" + fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" + mito_name = "MT" } 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" + fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" + mito_name = "M" + macs_gsize = "1.2e8" } 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" + fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" + mito_name = "MT" } 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" } 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" + fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" + mito_name = "MT" } 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" + fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" } 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" + fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" + mito_name = "MT" } 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" + fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" + mito_name = "Mt" } 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" - } - 'Rnor_5.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed" - mito_name = "MT" + fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" + mito_name = "MT" } 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" + fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" + mito_name = "MT" } 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" + mito_name = "MT" + macs_gsize = "1.2e7" } 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" + fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" + mito_name = "MT" + macs_gsize = "1.21e7" } 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" + fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" } 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" + fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" + mito_name = "MT" } 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" + fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" + mito_name = "Mt" } 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" } 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" + fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "2.7e9" + blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" } 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" + fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.87e9" + blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" } 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" + mito_name = "chrM" } 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" + fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "9e7" } 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" + mito_name = "chrM" } 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.37e9" + fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.37e9" } 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" + fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" + mito_name = "chrM" + macs_gsize = "1.2e8" } 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" + mito_name = "chrM" } 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" + mito_name = "chrM" } 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" + mito_name = "chrM" } 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" + mito_name = "chrM" } 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" + fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" + readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" + mito_name = "chrM" + macs_gsize = "1.2e7" } 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" + fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" + gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" + bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" + readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" + mito_name = "chrM" + } + 'K12-MG1655' { + fasta = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/WholeGenomeFasta/genome.fa" + bwa = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BWAIndex/genome.fa" + bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/Bowtie2Index/" + star = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/STARIndex/" + bismark = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BismarkIndex/" } } - 'GRCh38' { - fasta = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'GRCm38' { - fasta = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/Ensembl/GRCm38/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/GRCm38-blacklist.bed" - } - 'TAIR10' { - fasta = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt" - mito_name = "Mt" - } - 'EB2' { - fasta = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt" - } - 'UMD3.1' { - fasta = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt" - mito_name = "MT" - } - 'WBcel235' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed" - mito_name = "MtDNA" - macs_gsize = "9e7" - } - 'CanFam3.1' { - fasta = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt" - mito_name = "MT" - } - 'GRCz10' { - fasta = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'BDGP6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed" - mito_name = "M" - macs_gsize = "1.2e8" - } - 'EquCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/Ensembl/EquCab2/Annotation/README.txt" - mito_name = "MT" - } - 'EB1' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt" - } - 'Galgal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'Gm01' { - fasta = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Glycine_max/Ensembl/Gm01/Annotation/README.txt" - } - 'Mmul_1' { - fasta = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt" - mito_name = "MT" - } - 'IRGSP-1.0' { - fasta = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'CHIMP2.1.4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt" - mito_name = "MT" - } - 'Rnor_6.0' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed" - mito_name = "MT" - } - 'R64-1-1' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed" - mito_name = "MT" - macs_gsize = "1.2e7" - } - 'EF2' { - fasta = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt" - mito_name = "MT" - macs_gsize = "1.21e7" - } - 'Sbi1' { - fasta = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt" - } - 'Sscrofa10.2' { - fasta = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt" - mito_name = "MT" - } - 'AGPv3' { - fasta = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed" - mito_name = "Mt" - } - 'hg38' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - } - 'hg19' { - fasta = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Homo_sapiens/UCSC/hg19/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "2.7e9" - blacklist = "${projectDir}/assets/blacklists/hg19-blacklist.bed" - } - 'mm10' { - fasta = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Mus_musculus/UCSC/mm10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.87e9" - blacklist = "${projectDir}/assets/blacklists/mm10-blacklist.bed" - } - 'bosTau8' { - fasta = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'ce10' { - fasta = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "9e7" - } - 'canFam3' { - fasta = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Canis_familiaris/UCSC/canFam3/Annotation/README.txt" - mito_name = "chrM" - } - 'danRer10' { - fasta = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.37e9" - } - 'dm6' { - fasta = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed" - mito_name = "chrM" - macs_gsize = "1.2e8" - } - 'equCab2' { - fasta = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Equus_caballus/UCSC/equCab2/Annotation/README.txt" - mito_name = "chrM" - } - 'galGal4' { - fasta = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Gallus_gallus/UCSC/galGal4/Annotation/README.txt" - mito_name = "chrM" - } - 'panTro4' { - fasta = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Pan_troglodytes/UCSC/panTro4/Annotation/README.txt" - mito_name = "chrM" - } - 'rn6' { - fasta = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed" - mito_name = "chrM" - } - 'sacCer3' { - fasta = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/" - readme = "${params.igenomes_base}/Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt" - mito_name = "chrM" - macs_gsize = "1.2e7" - } - 'susScr3' { - fasta = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/" - gtf = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf" - bed12 = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed" - readme = "${params.igenomes_base}/Sus_scrofa/UCSC/susScr3/Annotation/README.txt" - mito_name = "chrM" - } - 'K12-MG1655' { - fasta = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/WholeGenomeFasta/genome.fa" - bwa = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BWAIndex/genome.fa" - bowtie2 = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/Bowtie2Index/" - star = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/STARIndex/" - bismark = "${params.igenomes_base}/Escherichia_coli_K_12_MG1655/NCBI/2001-10-15/Sequence/BismarkIndex/" - } - } } From 883713f0c268d32f2e918fef726fd7f69ba5fb0d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 13:05:29 +0100 Subject: [PATCH 478/675] Fixed nextflow schema --- nextflow_schema.json | 101 ++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 68 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 95acc38b..16d10c05 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -13,17 +13,13 @@ "properties": { "input": { "type": "string", - "format": "file-path", - "mimetype": "text/csv", - "pattern": "^\\S+\\.csv$", - "schema": "assets/schema_input.json", - "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/cutandrun/usage#samplesheet-input).", - "fa_icon": "fas fa-file-csv" + "fa_icon": "fas fa-dna", + "description": "Input FastQ files.", + "help_text": "Use this to specify the location of your input FastQ files. For example:\n\n```bash\n--input 'path/to/data/sample_*_{1,2}.fastq'\n```\n\nPlease note the following requirements:\n\n1. The path must be enclosed in quotes\n2. The path must have at least one `*` wildcard character\n3. When using the pipeline with paired end data, the path must use `{1,2}` notation to specify read pairs.\n\nIf left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz`" }, "outdir": { "type": "string", - "description": "Path to the output directory where the results will be saved.", + "description": "The output directory where the results will be saved.", "default": "./results", "fa_icon": "fas fa-folder-open" }, @@ -40,6 +36,7 @@ }, "multiqc_title": { "type": "string", + "default": "null", "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified." }, "igg_control": { @@ -53,26 +50,22 @@ "title": "Reference genome options", "type": "object", "fa_icon": "fas fa-dna", - "description": "Reference genome related files and options required for the workflow.", + "description": "Options for the reference genome indices used to align reads.", "properties": { "genome": { "type": "string", "description": "Name of iGenomes reference.", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`.\n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." }, "fasta": { "type": "string", - "format": "file-path", - "mimetype": "text/plain", - "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", + "fa_icon": "fas fa-font", "description": "Path to FASTA genome file.", - "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", - "fa_icon": "far fa-file-code" + "help_text": "If you have no genome reference available, the pipeline can build one using a FASTA file. This requires additional time and resources, so it's better to use a pre-build index if possible." }, "igenomes_base": { "type": "string", - "format": "directory-path", "description": "Directory / URL base for iGenomes references.", "default": "s3://ngi-igenomes/igenomes", "fa_icon": "fas fa-cloud-download-alt", @@ -159,7 +152,7 @@ "properties": { "max_cpus": { "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", + "description": "Maximum number of CPUs that can be requested for any single job.", "default": 16, "fa_icon": "fas fa-microchip", "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" @@ -182,69 +175,41 @@ } } }, - "generic_options": { - "title": "Generic options", + "institutional_config_options": { + "title": "Institutional config options", "type": "object", - "fa_icon": "fas fa-file-import", - "description": "Less common options for the pipeline, typically set in a config file.", - "help_text": "These options are common to all nf-core pipelines and allow you to customise some of the core preferences for how the pipeline runs.\n\nTypically these options would be set in a Nextflow config file loaded for all pipeline runs, such as `~/.nextflow/config`.", + "fa_icon": "fas fa-university", + "description": "Parameters used to describe centralised config profiles. These should not be edited.", + "help_text": "The centralised nf-core configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.", "properties": { - "help": { - "type": "boolean", - "description": "Display help text.", - "fa_icon": "fas fa-question-circle", - "hidden": true - }, - "publish_dir_mode": { + "custom_config_version": { "type": "string", - "default": "copy", - "description": "Method used to save pipeline results to output directory.", - "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", - "fa_icon": "fas fa-copy", - "enum": [ - "symlink", - "rellink", - "link", - "copy", - "copyNoFollow", - "move" - ], - "hidden": true + "description": "Git commit id for Institutional configs.", + "default": "master", + "hidden": true, + "fa_icon": "fas fa-users-cog", + "help_text": "Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default: `master`.\n\n```bash\n## Download and use config file with following git commit id\n--custom_config_version d52db660777c4bf36546ddb188ec530c3ada1b96\n```" }, - "email_on_fail": { + "custom_config_base": { "type": "string", - "description": "Email address for completion summary, only when pipeline fails.", - "fa_icon": "fas fa-exclamation-triangle", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", - "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", - "hidden": true - }, - "plaintext_email": { - "type": "boolean", - "description": "Send plain-text email instead of HTML.", - "fa_icon": "fas fa-remove-format", - "hidden": true + "description": "Base directory for Institutional configs.", + "default": "https://raw.githubusercontent.com/nf-core/configs/master", + "hidden": true, + "help_text": "If you're running offline, nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell nextflow where to find them with the `custom_config_base` option. For example:\n\n```bash\n## Download and unzip the config files\ncd /path/to/my/configs\nwget https://github.com/nf-core/configs/archive/master.zip\nunzip master.zip\n\n## Run the pipeline\ncd /path/to/my/data\nnextflow run /path/to/pipeline/ --custom_config_base /path/to/my/configs/configs-master/\n```\n\n> Note that the nf-core/tools helper package has a `download` command to download all required pipeline files + singularity containers + institutional configs in one go for you, to make this process easier.", + "fa_icon": "fas fa-users-cog" }, - "max_multiqc_email_size": { + "hostnames": { "type": "string", - "description": "File size limit when attaching MultiQC reports to summary emails.", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "default": "25.MB", - "fa_icon": "fas fa-file-upload", - "hidden": true - }, - "monochrome_logs": { - "type": "boolean", - "description": "Do not use coloured log outputs.", - "fa_icon": "fas fa-palette", - "hidden": true + "description": "Institutional configs hostname.", + "hidden": true, + "fa_icon": "fas fa-users-cog" }, - "multiqc_config": { + "config_profile_name": { "type": "string", "description": "Institutional config name.", "fa_icon": "fas fa-users-cog" }, - "tracedir": { + "config_profile_description": { "type": "string", "description": "Institutional config description.", "fa_icon": "fas fa-users-cog" From 9188769d71bd7bf72159e44274dd70d7419aabb1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 13:17:11 +0100 Subject: [PATCH 479/675] updated config files --- conf/test.config | 1 + conf/test_no_igg.config | 3 ++- conf/test_tech_reps.config | 1 + nextflow.config | 10 +++++----- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/conf/test.config b/conf/test.config index ab62ea2e..86b7adb6 100644 --- a/conf/test.config +++ b/conf/test.config @@ -32,4 +32,5 @@ params { spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 + skip_upset_plots = true } \ No newline at end of file diff --git a/conf/test_no_igg.config b/conf/test_no_igg.config index a1d5ea8a..ed56712e 100644 --- a/conf/test_no_igg.config +++ b/conf/test_no_igg.config @@ -32,5 +32,6 @@ params { spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 - igg_control = false + igg_control = false + skip_upset_plots = true } diff --git a/conf/test_tech_reps.config b/conf/test_tech_reps.config index b6e74233..2bbe4f29 100644 --- a/conf/test_tech_reps.config +++ b/conf/test_tech_reps.config @@ -32,4 +32,5 @@ params { spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 + skip_upset_plots = true } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 552e283f..08b07dba 100644 --- a/nextflow.config +++ b/nextflow.config @@ -175,12 +175,12 @@ profiles { shifter.enabled = false } - local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run - test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control - test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control + local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run + test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control + test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control test_full_small { includeConfig "conf/test_full_small.config" } // Runs a full experimental configuration but with a small dataset - test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control - test_full { includeConfig "conf/test_full.config" } // Runs a full experimental dataset + test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control + test_full { includeConfig "conf/test_full.config" } // Runs a full experimental dataset } // Load igenomes.config if required From eb08fa44053dc158b6f424c106d8fdcdb7371d3b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 13:40:57 +0100 Subject: [PATCH 480/675] updated scrape software versions --- bin/scrape_software_versions.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 0b54c608..1128af62 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -15,21 +15,20 @@ results[software] = version # Dump to YAML -print (''' +print (""" id: 'software_versions' -section_name: 'nf-core/rnaseq Software Versions' -section_href: 'https://github.com/nf-core/rnaseq' +section_name: 'nf-core/cutandrun Software Versions' +section_href: 'https://github.com/nf-core/cutandrun' plot_type: 'html' description: 'are collected at run time from the software output.' data: |
    -""" -) -for k, v in sorted(results.items()): +""") +for k,v in sorted(results.items()): print("
    {}
    {}
    ".format(k, v)) -print("
    ") +print (" ") # Write out as tsv file: with open("software_versions.tsv", "w") as f: - for k, v in sorted(results.items()): - f.write("{}\t{}\n".format(k, v)) + for k,v in sorted(results.items()): + f.write("{}\t{}\n".format(k,v)) From f2bf9d0fe5a2bff1a4f6d6ef30dd00367b047a91 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 13:50:37 +0100 Subject: [PATCH 481/675] Fixed scrape software versions --- bin/scrape_software_versions.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index 1128af62..f5f47b5b 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -3,32 +3,32 @@ import os results = {} -version_files = [x for x in os.listdir(".") if x.endswith(".version.txt")] +version_files = [x for x in os.listdir('.') if x.endswith('.version.txt')] for version_file in version_files: - software = version_file.replace(".version.txt", "") - if software == "pipeline": - software = "nf-core/cutandrun" + software = version_file.replace('.version.txt','') + if software == 'pipeline': + software = 'nf-core/cutandrun' with open(version_file) as fin: version = fin.read().strip() results[software] = version # Dump to YAML -print (""" +print (''' id: 'software_versions' -section_name: 'nf-core/cutandrun Software Versions' +section_name: 'nf-core/rnaseq Software Versions' section_href: 'https://github.com/nf-core/cutandrun' plot_type: 'html' description: 'are collected at run time from the software output.' data: |
    -""") +''') for k,v in sorted(results.items()): - print("
    {}
    {}
    ".format(k, v)) -print ("
    ") + print("
    {}
    {}
    ".format(k,v)) +print (" ") -# Write out as tsv file: -with open("software_versions.tsv", "w") as f: +# Write out tsv file: +with open('software_versions.tsv', 'w') as f: for k,v in sorted(results.items()): f.write("{}\t{}\n".format(k,v)) From 8a465afc6785f217a6a1973213fa6e1a5f571ae9 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 14:11:30 +0100 Subject: [PATCH 482/675] Updated schema --- nextflow_schema.json | 482 +++++++++++++++++++------------------------ 1 file changed, 209 insertions(+), 273 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 16d10c05..252754f2 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,16 +10,23 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", + "required": [ + "input" + ], "properties": { "input": { "type": "string", - "fa_icon": "fas fa-dna", - "description": "Input FastQ files.", - "help_text": "Use this to specify the location of your input FastQ files. For example:\n\n```bash\n--input 'path/to/data/sample_*_{1,2}.fastq'\n```\n\nPlease note the following requirements:\n\n1. The path must be enclosed in quotes\n2. The path must have at least one `*` wildcard character\n3. When using the pipeline with paired end data, the path must use `{1,2}` notation to specify read pairs.\n\nIf left unspecified, a default pattern is used: `data/*{1,2}.fastq.gz`" + "format": "file-path", + "mimetype": "text/csv", + "pattern": "^\\S+\\.csv$", + "schema": "assets/schema_input.json", + "description": "Path to comma-separated file containing information about the samples in the experiment.", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re//usage#samplesheet-input).", + "fa_icon": "fas fa-file-csv" }, "outdir": { "type": "string", - "description": "The output directory where the results will be saved.", + "description": "Path to the output directory where the results will be saved.", "default": "./results", "fa_icon": "fas fa-folder-open" }, @@ -30,19 +37,10 @@ "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" }, - "save_merged_fastq": { - "type": "boolean", - "description": "Save FastQ files after merging re-sequenced libraries in the results directory." - }, "multiqc_title": { "type": "string", - "default": "null", - "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified." - }, - "igg_control": { - "type": "boolean", - "default": true, - "description": "Whether or not IgG control data is specified in the input sample sheet." + "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", + "fa_icon": "fas fa-file-signature" } } }, @@ -50,128 +48,37 @@ "title": "Reference genome options", "type": "object", "fa_icon": "fas fa-dna", - "description": "Options for the reference genome indices used to align reads.", + "description": "Reference genome related files and options required for the workflow.", "properties": { "genome": { "type": "string", "description": "Name of iGenomes reference.", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`.\n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." }, "fasta": { "type": "string", - "fa_icon": "fas fa-font", + "format": "file-path", + "mimetype": "text/plain", + "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", - "help_text": "If you have no genome reference available, the pipeline can build one using a FASTA file. This requires additional time and resources, so it's better to use a pre-build index if possible." + "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", + "fa_icon": "far fa-file-code" }, "igenomes_base": { "type": "string", + "format": "directory-path", "description": "Directory / URL base for iGenomes references.", "default": "s3://ngi-igenomes/igenomes", "fa_icon": "fas fa-cloud-download-alt", "hidden": true }, - "save_reference": { - "type": "boolean", - "description": "If generated by the pipeline save the aligner index in the results directory." - }, "igenomes_ignore": { "type": "boolean", "description": "Do not load the iGenomes reference config.", "fa_icon": "fas fa-ban", "hidden": true, "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." - }, - "gtf": { - "type": "string", - "description": "Path to GTF annotation file." - }, - "gene_bed": { - "type": "string", - "description": "Path to gene BED annotation file." - }, - "blacklist": { - "type": "string", - "description": "Path to reference genome blacklist." - } - } - }, - "alignment_options": { - "title": "Alignment options", - "type": "object", - "description": "", - "default": "", - "properties": { - "aligner": { - "type": "string", - "default": "bowtie2", - "description": "Specifies the alignment algorithm to use - current available options is Bowtie2" - }, - "save_unaligned": { - "type": "boolean", - "description": "Where possible, save unaligned reads from the alignment algorithm to the results directory." - }, - "minimum_alignment_q_score": { - "type": "integer", - "default": 0, - "description": "Sequence quality Q score used by SAMtools to filter low quality reads." - }, - "bowtie2": { - "type": "string", - "hidden": true - }, - "spikein_bowtie2": { - "type": "string", - "hidden": true - }, - "spikein_genome": { - "type": "string", - "default": "K12-MG1655", - "description": "iGenomes option for spike-in reference genome." - }, - "save_spikein_aligned": { - "type": "boolean", - "description": "Save BAM files from alignment to spike-in genome." - }, - "spikein_fasta": { - "type": "string", - "description": "Path to FASTA spike-in genome file." - }, - "publish_align_intermed": { - "type": "boolean", - "description": "Save the various intermediate BAM files from steps: alignment, filtering and duplicate removal if specified." - } - } - }, - "max_job_request_options": { - "title": "Max job request options", - "type": "object", - "fa_icon": "fab fa-acquisitions-incorporated", - "description": "Set the top limit for requested resources for any single job.", - "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", - "properties": { - "max_cpus": { - "type": "integer", - "description": "Maximum number of CPUs that can be requested for any single job.", - "default": 16, - "fa_icon": "fas fa-microchip", - "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" - }, - "max_memory": { - "type": "string", - "description": "Maximum amount of memory that can be requested for any single job.", - "default": "128.GB", - "fa_icon": "fas fa-memory", - "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", - "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" - }, - "max_time": { - "type": "string", - "description": "Maximum amount of time that can be requested for any single job.", - "default": "240.h", - "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|day)\\s*)+$", - "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } } }, @@ -187,15 +94,14 @@ "description": "Git commit id for Institutional configs.", "default": "master", "hidden": true, - "fa_icon": "fas fa-users-cog", - "help_text": "Provide git commit id for custom Institutional configs hosted at `nf-core/configs`. This was implemented for reproducibility purposes. Default: `master`.\n\n```bash\n## Download and use config file with following git commit id\n--custom_config_version d52db660777c4bf36546ddb188ec530c3ada1b96\n```" + "fa_icon": "fas fa-users-cog" }, "custom_config_base": { "type": "string", "description": "Base directory for Institutional configs.", "default": "https://raw.githubusercontent.com/nf-core/configs/master", "hidden": true, - "help_text": "If you're running offline, nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell nextflow where to find them with the `custom_config_base` option. For example:\n\n```bash\n## Download and unzip the config files\ncd /path/to/my/configs\nwget https://github.com/nf-core/configs/archive/master.zip\nunzip master.zip\n\n## Run the pipeline\ncd /path/to/my/data\nnextflow run /path/to/pipeline/ --custom_config_base /path/to/my/configs/configs-master/\n```\n\n> Note that the nf-core/tools helper package has a `download` command to download all required pipeline files + singularity containers + institutional configs in one go for you, to make this process easier.", + "help_text": "If you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.", "fa_icon": "fas fa-users-cog" }, "hostnames": { @@ -207,106 +113,61 @@ "config_profile_name": { "type": "string", "description": "Institutional config name.", + "hidden": true, "fa_icon": "fas fa-users-cog" }, "config_profile_description": { "type": "string", "description": "Institutional config description.", + "hidden": true, "fa_icon": "fas fa-users-cog" }, "config_profile_contact": { "type": "string", "description": "Institutional config contact information.", + "hidden": true, "fa_icon": "fas fa-users-cog" }, "config_profile_url": { "type": "string", "description": "Institutional config URL link.", + "hidden": true, "fa_icon": "fas fa-users-cog" } } }, - "process_skipping_options": { - "title": "Process skipping options", - "type": "object", - "description": "", - "default": "", - "properties": { - "skip_qc": { - "type": "boolean", - "description": "Skip all QC steps except for MultiQC." - }, - "skip_fastqc": { - "type": "boolean", - "description": "Skip FastQC." - }, - "skip_multiqc": { - "type": "boolean", - "description": "Skip MultiQC." - }, - "skip_markduplicates": { - "type": "boolean", - "description": "Skip picard MarkDuplicates step." - }, - "skip_removeduplicates": { - "type": "boolean", - "description": "Skip picard deduplication. By default, only IgG data is deduplicated." - }, - "skip_peakcalling": { - "type": "boolean", - "description": "Skip peak-calling." - }, - "skip_reporting": { - "type": "boolean", - "description": "Skip python reporting." - }, - "skip_trimming": { - "type": "boolean", - "description": "Skip the adapter trimming step." - }, - "skip_igv": { - "type": "boolean", - "description": "Skip the IGV session creation step." - }, - "skip_scale": { - "type": "boolean", - "description": "Skip calculation of scale factor and do NOT normalise between samples based on spike-in alignment." - }, - "skip_deseq2": { - "type": "boolean", - "description": "Skip DESeq2 differential analysis." - } - } - }, - "read_trimming_options": { - "title": "Read trimming options", + "max_job_request_options": { + "title": "Max job request options", "type": "object", - "description": "", - "default": "", + "fa_icon": "fab fa-acquisitions-incorporated", + "description": "Set the top limit for requested resources for any single job.", + "help_text": "If you are running on a smaller system, a pipeline step requesting more resources than are available may cause the Nextflow to stop the run with an error. These options allow you to cap the maximum resources requested by any single job so that the pipeline will run on your system.\n\nNote that you can not _increase_ the resources requested by any job using these options. For that you will need your own configuration file. See [the nf-core website](https://nf-co.re/usage/configuration) for details.", "properties": { - "clip_r1": { - "type": "integer", - "description": "Instructs Trim Galore to remove bp from the 5' end of read 1 (or single-end reads)." - }, - "clip_r2": { - "type": "integer", - "description": "Instructs Trim Galore to remove bp from the 5' end of read 2 (paired-end reads only)." - }, - "three_prime_clip_r1": { - "type": "integer", - "description": "Instructs Trim Galore to remove bp from the 3' end of read 1 AFTER adapter/quality trimming has been performed." - }, - "three_prime_clip_r2": { + "max_cpus": { "type": "integer", - "description": "Instructs Trim Galore to remove bp from the 3' end of read 2 AFTER adapter/quality trimming has been performed." + "description": "Maximum number of CPUs that can be requested for any single job.", + "default": 16, + "fa_icon": "fas fa-microchip", + "hidden": true, + "help_text": "Use to set an upper-limit for the CPU requirement for each process. Should be an integer e.g. `--max_cpus 1`" }, - "trim_nextseq": { - "type": "integer", - "description": "Instructs Trim Galore to apply the --nextseq=X option, to trim based on quality after removing poly-G tails." + "max_memory": { + "type": "string", + "description": "Maximum amount of memory that can be requested for any single job.", + "default": "128.GB", + "fa_icon": "fas fa-memory", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", + "hidden": true, + "help_text": "Use to set an upper-limit for the memory requirement for each process. Should be a string in the format integer-unit e.g. `--max_memory '8.GB'`" }, - "save_trimmed": { - "type": "boolean", - "description": "Save the trimmed FastQ files in the results directory." + "max_time": { + "type": "string", + "description": "Maximum amount of time that can be requested for any single job.", + "default": "240.h", + "fa_icon": "far fa-clock", + "pattern": "^(\\d+\\.?\\s*(s|m|h|day)\\s*)+$", + "hidden": true, + "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } } }, @@ -320,8 +181,8 @@ "help": { "type": "boolean", "description": "Display help text.", - "hidden": true, - "fa_icon": "fas fa-question-circle" + "fa_icon": "fas fa-question-circle", + "hidden": true }, "publish_dir_mode": { "type": "string", @@ -336,13 +197,7 @@ "copy", "copyNoFollow", "move" - ] - }, - "validate_params": { - "type": "boolean", - "description": "Boolean whether to validate parameters against the schema at runtime", - "default": true, - "fa_icon": "fas fa-check-square", + ], "hidden": true }, "email_on_fail": { @@ -350,26 +205,28 @@ "description": "Email address for completion summary, only when pipeline fails.", "fa_icon": "fas fa-exclamation-triangle", "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", - "help_text": "This works exactly as with `--email`, except emails are only sent if the workflow is not successful." + "help_text": "An email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.", + "hidden": true }, "plaintext_email": { "type": "boolean", "description": "Send plain-text email instead of HTML.", "fa_icon": "fas fa-remove-format", - "help_text": "Set to receive plain-text e-mails instead of HTML formatted." + "hidden": true }, "max_multiqc_email_size": { "type": "string", "description": "File size limit when attaching MultiQC reports to summary emails.", + "pattern": "^\\d+(\\.\\d+)?\\.?\\s*(K|M|G|T)?B$", "default": "25.MB", "fa_icon": "fas fa-file-upload", - "help_text": "If file generated by pipeline exceeds the threshold, it will not be attached." + "hidden": true }, "monochrome_logs": { "type": "boolean", "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", - "help_text": "Set to disable colourful command line output and live life in monochrome." + "hidden": true }, "multiqc_config": { "type": "string", @@ -384,13 +241,12 @@ "fa_icon": "fas fa-cogs", "hidden": true }, - "enable_conda": { - "type": "boolean", - "description": "Run this workflow with Conda. You can also use '-profile conda' instead of providing this parameter." - }, - "singularity_pull_docker_container": { + "validate_params": { "type": "boolean", - "description": "Instead of directly downloading Singularity images for use with Singularity, force the workflow to pull and convert Docker containers instead." + "description": "Boolean whether to validate parameters against the schema at runtime", + "default": true, + "fa_icon": "fas fa-check-square", + "hidden": true }, "show_hidden_params": { "type": "boolean", @@ -399,54 +255,18 @@ "hidden": true, "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." }, - "attribute": { - "type": "string", - "hidden": true - } - } - }, - "peak_caller_options": { - "title": "Peak-caller options", - "type": "object", - "description": "", - "default": "", - "properties": { - "replicate_threshold": { - "type": "integer", - "default": 1, - "description": "Minimum number of replicates contributing to a merged peak for it to be considered a consensus peak for that group" + "enable_conda": { + "type": "boolean", + "description": "Run this workflow with Conda. You can also use '-profile conda' instead of providing this parameter.", + "hidden": true, + "fa_icon": "fas fa-bacon" }, - "peak_threshold": { - "type": "number", - "default": 0.05, - "description": "If no IgG data is supplied, SEACR calls enriched regions in target data by selecting the top peak_threshold proportion of regions by AUC" - } - } - }, - "workflow_options": { - "title": "Workflow options", - "type": "object", - "description": "", - "default": "", - "properties": { - "dedup_target_reads": { + "singularity_pull_docker_container": { "type": "boolean", - "default": "False", - "description": "Deduplicate target reads. This is NOT recommended since fragments that share exact starting and ending positions are expected to be common, and such \u2018duplicates\u2019 may not be due to duplication during PCR." - } - } - }, - "spike_in_options": { - "title": "Spike-in options", - "type": "object", - "description": "", - "default": "", - "properties": { - "normalisation_c": { - "type": "integer", - "default": 10000, + "description": "Instead of directly downloading Singularity images for use with Singularity, force the workflow to pull and convert Docker containers instead.", "hidden": true, - "description": "Constant arbitrary multiplier for calculating spike-in scale for sample normalisation." + "fa_icon": "fas fa-toolbox", + "help_text": "This may be useful for example if you are unable to directly pull Singularity containers to run the pipeline due to http/https proxy issues." } } } @@ -459,31 +279,147 @@ "$ref": "#/definitions/reference_genome_options" }, { - "$ref": "#/definitions/alignment_options" + "$ref": "#/definitions/institutional_config_options" }, { "$ref": "#/definitions/max_job_request_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/definitions/generic_options" + } + ], + "properties": { + "spikein_genome": { + "type": "string", + "default": "K12-MG1655" }, - { - "$ref": "#/definitions/process_skipping_options" + "save_reference": { + "type": "boolean" }, - { - "$ref": "#/definitions/read_trimming_options" + "only_genome": { + "type": "boolean" }, - { - "$ref": "#/definitions/generic_options" + "save_merged_fastq": { + "type": "boolean" }, - { - "$ref": "#/definitions/peak_caller_options" + "only_input": { + "type": "boolean" }, - { - "$ref": "#/definitions/workflow_options" + "skip_fastqc": { + "type": "boolean" }, - { - "$ref": "#/definitions/spike_in_options" + "only_preqc": { + "type": "boolean" + }, + "clip_r1": { + "type": "integer", + "default": 0 + }, + "clip_r2": { + "type": "integer", + "default": 0 + }, + "three_prime_clip_r1": { + "type": "integer", + "default": 0 + }, + "three_prime_clip_r2": { + "type": "integer", + "default": 0 + }, + "trim_nextseq": { + "type": "integer", + "default": 0 + }, + "save_trimmed": { + "type": "boolean" + }, + "skip_trimming": { + "type": "boolean" + }, + "aligner": { + "type": "string", + "default": "bowtie2" + }, + "save_spikein_aligned": { + "type": "boolean" + }, + "save_unaligned": { + "type": "boolean" + }, + "only_alignment": { + "type": "boolean" + }, + "save_align_intermed": { + "type": "boolean" + }, + "minimum_alignment_q_score": { + "type": "integer", + "default": 0 + }, + "skip_removeduplicates": { + "type": "boolean" + }, + "dedup_target_reads": { + "type": "boolean" + }, + "only_filtering": { + "type": "boolean" + }, + "skip_scale": { + "type": "boolean" + }, + "normalisation_c": { + "type": "integer", + "default": 10000 + }, + "igg_control": { + "type": "string", + "default": "true" + }, + "peak_threshold": { + "type": "number", + "default": 0.05 + }, + "replicate_threshold": { + "type": "integer", + "default": 1 + }, + "only_peak_calling": { + "type": "boolean" + }, + "skip_reporting": { + "type": "boolean" + }, + "skip_igv": { + "type": "boolean" + }, + "skip_heatmaps": { + "type": "boolean" + }, + "skip_multiqc": { + "type": "boolean" + }, + "skip_upset_plots": { + "type": "boolean" + }, + "bowtie2": { + "type": "string" + }, + "gtf": { + "type": "string" + }, + "gene_bed": { + "type": "string" + }, + "blacklist": { + "type": "string" + }, + "spikein_bowtie2": { + "type": "string" + }, + "spikein_fasta": { + "type": "string" } - ] -} + } +} \ No newline at end of file From f94025913cfe2be54c94504be0718a8af2cacdda Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 14:11:47 +0100 Subject: [PATCH 483/675] Updated CI --- .github/workflows/ci.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6109a860..316aa9eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,11 +32,10 @@ jobs: - name: Run pipeline with test data run: | - nextflow run ${GITHUB_WORKSPACE} -profile test_all_exp_one_igg_small,docker --skip_deseq2 -# --------------------------------------------------------------------- - test_one_exp_all_igg_small: - name: Run pipeline test with 2 groups of 2 replicate and one replicate of igg - # Only run on push if this is the luslab dev branch (merged PRs) + nextflow run ${GITHUB_WORKSPACE} -profile docker,test + test_full_small: + name: Run extended pipeline test + # Only run on push if this is the nf-core dev branch (merged PRs) if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/cutandrun') }} runs-on: ubuntu-latest env: @@ -45,7 +44,7 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ["21.04.0", ""] + nxf_ver: ['21.04.0', ''] steps: - name: Check out pipeline code uses: actions/checkout@v2 @@ -57,4 +56,4 @@ jobs: - name: Run pipeline with test data run: | - nextflow run ${GITHUB_WORKSPACE} -profile test_one_exp_all_igg_small,docker --skip_deseq2 + nextflow run ${GITHUB_WORKSPACE} -profile docker,test_full_small \ No newline at end of file From 663547ebe6cfad6a517b30c7b4be146bafc027b7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 14:24:56 +0100 Subject: [PATCH 484/675] changed module directories --- .nf-core-lint.yaml => .nf-core.yaml | 0 .../deeptools/bamPEFragmentSize/functions.nf | 0 .../deeptools/bamPEFragmentSize/main.nf | 0 .../samtools/custom_view/functions.nf | 0 .../samtools/custom_view/main.nf | 0 .../bedtools/bamtobed/functions.nf | 0 .../bedtools/bamtobed/main.nf | 0 .../bedtools/bamtobed/meta.yml | 0 .../bedtools/merge/functions.nf | 0 .../bedtools/merge/main.nf | 0 .../bedtools/merge/meta.yml | 0 .../bowtie2/align/functions.nf | 0 .../bowtie2/align/main.nf | 0 .../bowtie2/align/meta.yml | 0 .../bowtie2/build/functions.nf | 0 .../bowtie2/build/main.nf | 0 .../bowtie2/build/meta.yml | 0 .../cat/fastq/functions.nf | 0 .../{software => modules}/cat/fastq/main.nf | 0 .../{software => modules}/cat/fastq/meta.yml | 0 .../deeptools/computematrix/functions.nf | 0 .../deeptools/computematrix/main.nf | 0 .../deeptools/computematrix/meta.yml | 0 .../deeptools/plotheatmap/functions.nf | 0 .../deeptools/plotheatmap/main.nf | 0 .../deeptools/plotheatmap/meta.yml | 0 .../{software => modules}/fastqc/functions.nf | 0 .../{software => modules}/fastqc/main.nf | 0 .../{software => modules}/fastqc/meta.yml | 0 .../{software => modules}/gunzip/functions.nf | 0 .../{software => modules}/gunzip/main.nf | 0 .../{software => modules}/gunzip/meta.yml | 0 .../picard/markduplicates/functions.nf | 0 .../picard/markduplicates/main.nf | 0 .../picard/markduplicates/meta.yml | 0 .../samtools/flagstat/functions.nf | 0 .../samtools/flagstat/main.nf | 0 .../samtools/flagstat/meta.yml | 0 .../samtools/idxstats/functions.nf | 0 .../samtools/idxstats/main.nf | 0 .../samtools/idxstats/meta.yml | 0 .../samtools/index/functions.nf | 0 .../samtools/index/main.nf | 0 .../samtools/index/meta.yml | 0 .../samtools/sort/functions.nf | 0 .../samtools/sort/main.nf | 0 .../samtools/sort/meta.yml | 0 .../samtools/stats/functions.nf | 0 .../samtools/stats/main.nf | 0 .../samtools/stats/meta.yml | 0 .../samtools/view/functions.nf | 0 .../samtools/view/main.nf | 0 .../samtools/view/meta.yml | 0 .../seacr/callpeak/functions.nf | 0 .../seacr/callpeak/main.nf | 0 .../seacr/callpeak/meta.yml | 0 .../trimgalore/functions.nf | 0 .../{software => modules}/trimgalore/main.nf | 0 .../{software => modules}/trimgalore/meta.yml | 0 .../ucsc/bedclip/functions.nf | 0 .../ucsc/bedclip/main.nf | 0 .../ucsc/bedclip/meta.yml | 0 .../ucsc/bedgraphtobigwig/functions.nf | 0 .../ucsc/bedgraphtobigwig/main.nf | 0 .../{software => modules}/untar/functions.nf | 0 .../{software => modules}/untar/main.nf | 0 .../{software => modules}/untar/meta.yml | 0 nextflow_schema.json | 2 +- subworkflows/local/align_bowtie2.nf | 4 ++-- subworkflows/local/calculate_fragments.nf | 2 +- subworkflows/local/consensus_peaks.nf | 2 +- subworkflows/local/prepare_genome.nf | 16 +++++++-------- .../local/samtools_view_sort_stats.nf | 4 ++-- subworkflows/nf-core/bam_sort_samtools.nf | 4 ++-- subworkflows/nf-core/bam_stats_samtools.nf | 6 +++--- subworkflows/nf-core/fastqc_trimgalore.nf | 4 ++-- .../nf-core/mark_duplicates_picard.nf | 4 ++-- workflows/cutandrun.nf | 20 +++++++++---------- 78 files changed, 34 insertions(+), 34 deletions(-) rename .nf-core-lint.yaml => .nf-core.yaml (100%) rename modules/local/{software => modules}/deeptools/bamPEFragmentSize/functions.nf (100%) rename modules/local/{software => modules}/deeptools/bamPEFragmentSize/main.nf (100%) rename modules/local/{software => modules}/samtools/custom_view/functions.nf (100%) rename modules/local/{software => modules}/samtools/custom_view/main.nf (100%) rename modules/nf-core/{software => modules}/bedtools/bamtobed/functions.nf (100%) rename modules/nf-core/{software => modules}/bedtools/bamtobed/main.nf (100%) rename modules/nf-core/{software => modules}/bedtools/bamtobed/meta.yml (100%) rename modules/nf-core/{software => modules}/bedtools/merge/functions.nf (100%) rename modules/nf-core/{software => modules}/bedtools/merge/main.nf (100%) rename modules/nf-core/{software => modules}/bedtools/merge/meta.yml (100%) rename modules/nf-core/{software => modules}/bowtie2/align/functions.nf (100%) rename modules/nf-core/{software => modules}/bowtie2/align/main.nf (100%) rename modules/nf-core/{software => modules}/bowtie2/align/meta.yml (100%) rename modules/nf-core/{software => modules}/bowtie2/build/functions.nf (100%) rename modules/nf-core/{software => modules}/bowtie2/build/main.nf (100%) rename modules/nf-core/{software => modules}/bowtie2/build/meta.yml (100%) rename modules/nf-core/{software => modules}/cat/fastq/functions.nf (100%) rename modules/nf-core/{software => modules}/cat/fastq/main.nf (100%) rename modules/nf-core/{software => modules}/cat/fastq/meta.yml (100%) rename modules/nf-core/{software => modules}/deeptools/computematrix/functions.nf (100%) rename modules/nf-core/{software => modules}/deeptools/computematrix/main.nf (100%) rename modules/nf-core/{software => modules}/deeptools/computematrix/meta.yml (100%) rename modules/nf-core/{software => modules}/deeptools/plotheatmap/functions.nf (100%) rename modules/nf-core/{software => modules}/deeptools/plotheatmap/main.nf (100%) rename modules/nf-core/{software => modules}/deeptools/plotheatmap/meta.yml (100%) rename modules/nf-core/{software => modules}/fastqc/functions.nf (100%) rename modules/nf-core/{software => modules}/fastqc/main.nf (100%) rename modules/nf-core/{software => modules}/fastqc/meta.yml (100%) rename modules/nf-core/{software => modules}/gunzip/functions.nf (100%) rename modules/nf-core/{software => modules}/gunzip/main.nf (100%) rename modules/nf-core/{software => modules}/gunzip/meta.yml (100%) rename modules/nf-core/{software => modules}/picard/markduplicates/functions.nf (100%) rename modules/nf-core/{software => modules}/picard/markduplicates/main.nf (100%) rename modules/nf-core/{software => modules}/picard/markduplicates/meta.yml (100%) rename modules/nf-core/{software => modules}/samtools/flagstat/functions.nf (100%) rename modules/nf-core/{software => modules}/samtools/flagstat/main.nf (100%) rename modules/nf-core/{software => modules}/samtools/flagstat/meta.yml (100%) rename modules/nf-core/{software => modules}/samtools/idxstats/functions.nf (100%) rename modules/nf-core/{software => modules}/samtools/idxstats/main.nf (100%) rename modules/nf-core/{software => modules}/samtools/idxstats/meta.yml (100%) rename modules/nf-core/{software => modules}/samtools/index/functions.nf (100%) rename modules/nf-core/{software => modules}/samtools/index/main.nf (100%) rename modules/nf-core/{software => modules}/samtools/index/meta.yml (100%) rename modules/nf-core/{software => modules}/samtools/sort/functions.nf (100%) rename modules/nf-core/{software => modules}/samtools/sort/main.nf (100%) rename modules/nf-core/{software => modules}/samtools/sort/meta.yml (100%) rename modules/nf-core/{software => modules}/samtools/stats/functions.nf (100%) rename modules/nf-core/{software => modules}/samtools/stats/main.nf (100%) rename modules/nf-core/{software => modules}/samtools/stats/meta.yml (100%) rename modules/nf-core/{software => modules}/samtools/view/functions.nf (100%) rename modules/nf-core/{software => modules}/samtools/view/main.nf (100%) rename modules/nf-core/{software => modules}/samtools/view/meta.yml (100%) rename modules/nf-core/{software => modules}/seacr/callpeak/functions.nf (100%) rename modules/nf-core/{software => modules}/seacr/callpeak/main.nf (100%) rename modules/nf-core/{software => modules}/seacr/callpeak/meta.yml (100%) rename modules/nf-core/{software => modules}/trimgalore/functions.nf (100%) rename modules/nf-core/{software => modules}/trimgalore/main.nf (100%) rename modules/nf-core/{software => modules}/trimgalore/meta.yml (100%) rename modules/nf-core/{software => modules}/ucsc/bedclip/functions.nf (100%) rename modules/nf-core/{software => modules}/ucsc/bedclip/main.nf (100%) rename modules/nf-core/{software => modules}/ucsc/bedclip/meta.yml (100%) rename modules/nf-core/{software => modules}/ucsc/bedgraphtobigwig/functions.nf (100%) rename modules/nf-core/{software => modules}/ucsc/bedgraphtobigwig/main.nf (100%) rename modules/nf-core/{software => modules}/untar/functions.nf (100%) rename modules/nf-core/{software => modules}/untar/main.nf (100%) rename modules/nf-core/{software => modules}/untar/meta.yml (100%) diff --git a/.nf-core-lint.yaml b/.nf-core.yaml similarity index 100% rename from .nf-core-lint.yaml rename to .nf-core.yaml diff --git a/modules/local/software/deeptools/bamPEFragmentSize/functions.nf b/modules/local/modules/deeptools/bamPEFragmentSize/functions.nf similarity index 100% rename from modules/local/software/deeptools/bamPEFragmentSize/functions.nf rename to modules/local/modules/deeptools/bamPEFragmentSize/functions.nf diff --git a/modules/local/software/deeptools/bamPEFragmentSize/main.nf b/modules/local/modules/deeptools/bamPEFragmentSize/main.nf similarity index 100% rename from modules/local/software/deeptools/bamPEFragmentSize/main.nf rename to modules/local/modules/deeptools/bamPEFragmentSize/main.nf diff --git a/modules/local/software/samtools/custom_view/functions.nf b/modules/local/modules/samtools/custom_view/functions.nf similarity index 100% rename from modules/local/software/samtools/custom_view/functions.nf rename to modules/local/modules/samtools/custom_view/functions.nf diff --git a/modules/local/software/samtools/custom_view/main.nf b/modules/local/modules/samtools/custom_view/main.nf similarity index 100% rename from modules/local/software/samtools/custom_view/main.nf rename to modules/local/modules/samtools/custom_view/main.nf diff --git a/modules/nf-core/software/bedtools/bamtobed/functions.nf b/modules/nf-core/modules/bedtools/bamtobed/functions.nf similarity index 100% rename from modules/nf-core/software/bedtools/bamtobed/functions.nf rename to modules/nf-core/modules/bedtools/bamtobed/functions.nf diff --git a/modules/nf-core/software/bedtools/bamtobed/main.nf b/modules/nf-core/modules/bedtools/bamtobed/main.nf similarity index 100% rename from modules/nf-core/software/bedtools/bamtobed/main.nf rename to modules/nf-core/modules/bedtools/bamtobed/main.nf diff --git a/modules/nf-core/software/bedtools/bamtobed/meta.yml b/modules/nf-core/modules/bedtools/bamtobed/meta.yml similarity index 100% rename from modules/nf-core/software/bedtools/bamtobed/meta.yml rename to modules/nf-core/modules/bedtools/bamtobed/meta.yml diff --git a/modules/nf-core/software/bedtools/merge/functions.nf b/modules/nf-core/modules/bedtools/merge/functions.nf similarity index 100% rename from modules/nf-core/software/bedtools/merge/functions.nf rename to modules/nf-core/modules/bedtools/merge/functions.nf diff --git a/modules/nf-core/software/bedtools/merge/main.nf b/modules/nf-core/modules/bedtools/merge/main.nf similarity index 100% rename from modules/nf-core/software/bedtools/merge/main.nf rename to modules/nf-core/modules/bedtools/merge/main.nf diff --git a/modules/nf-core/software/bedtools/merge/meta.yml b/modules/nf-core/modules/bedtools/merge/meta.yml similarity index 100% rename from modules/nf-core/software/bedtools/merge/meta.yml rename to modules/nf-core/modules/bedtools/merge/meta.yml diff --git a/modules/nf-core/software/bowtie2/align/functions.nf b/modules/nf-core/modules/bowtie2/align/functions.nf similarity index 100% rename from modules/nf-core/software/bowtie2/align/functions.nf rename to modules/nf-core/modules/bowtie2/align/functions.nf diff --git a/modules/nf-core/software/bowtie2/align/main.nf b/modules/nf-core/modules/bowtie2/align/main.nf similarity index 100% rename from modules/nf-core/software/bowtie2/align/main.nf rename to modules/nf-core/modules/bowtie2/align/main.nf diff --git a/modules/nf-core/software/bowtie2/align/meta.yml b/modules/nf-core/modules/bowtie2/align/meta.yml similarity index 100% rename from modules/nf-core/software/bowtie2/align/meta.yml rename to modules/nf-core/modules/bowtie2/align/meta.yml diff --git a/modules/nf-core/software/bowtie2/build/functions.nf b/modules/nf-core/modules/bowtie2/build/functions.nf similarity index 100% rename from modules/nf-core/software/bowtie2/build/functions.nf rename to modules/nf-core/modules/bowtie2/build/functions.nf diff --git a/modules/nf-core/software/bowtie2/build/main.nf b/modules/nf-core/modules/bowtie2/build/main.nf similarity index 100% rename from modules/nf-core/software/bowtie2/build/main.nf rename to modules/nf-core/modules/bowtie2/build/main.nf diff --git a/modules/nf-core/software/bowtie2/build/meta.yml b/modules/nf-core/modules/bowtie2/build/meta.yml similarity index 100% rename from modules/nf-core/software/bowtie2/build/meta.yml rename to modules/nf-core/modules/bowtie2/build/meta.yml diff --git a/modules/nf-core/software/cat/fastq/functions.nf b/modules/nf-core/modules/cat/fastq/functions.nf similarity index 100% rename from modules/nf-core/software/cat/fastq/functions.nf rename to modules/nf-core/modules/cat/fastq/functions.nf diff --git a/modules/nf-core/software/cat/fastq/main.nf b/modules/nf-core/modules/cat/fastq/main.nf similarity index 100% rename from modules/nf-core/software/cat/fastq/main.nf rename to modules/nf-core/modules/cat/fastq/main.nf diff --git a/modules/nf-core/software/cat/fastq/meta.yml b/modules/nf-core/modules/cat/fastq/meta.yml similarity index 100% rename from modules/nf-core/software/cat/fastq/meta.yml rename to modules/nf-core/modules/cat/fastq/meta.yml diff --git a/modules/nf-core/software/deeptools/computematrix/functions.nf b/modules/nf-core/modules/deeptools/computematrix/functions.nf similarity index 100% rename from modules/nf-core/software/deeptools/computematrix/functions.nf rename to modules/nf-core/modules/deeptools/computematrix/functions.nf diff --git a/modules/nf-core/software/deeptools/computematrix/main.nf b/modules/nf-core/modules/deeptools/computematrix/main.nf similarity index 100% rename from modules/nf-core/software/deeptools/computematrix/main.nf rename to modules/nf-core/modules/deeptools/computematrix/main.nf diff --git a/modules/nf-core/software/deeptools/computematrix/meta.yml b/modules/nf-core/modules/deeptools/computematrix/meta.yml similarity index 100% rename from modules/nf-core/software/deeptools/computematrix/meta.yml rename to modules/nf-core/modules/deeptools/computematrix/meta.yml diff --git a/modules/nf-core/software/deeptools/plotheatmap/functions.nf b/modules/nf-core/modules/deeptools/plotheatmap/functions.nf similarity index 100% rename from modules/nf-core/software/deeptools/plotheatmap/functions.nf rename to modules/nf-core/modules/deeptools/plotheatmap/functions.nf diff --git a/modules/nf-core/software/deeptools/plotheatmap/main.nf b/modules/nf-core/modules/deeptools/plotheatmap/main.nf similarity index 100% rename from modules/nf-core/software/deeptools/plotheatmap/main.nf rename to modules/nf-core/modules/deeptools/plotheatmap/main.nf diff --git a/modules/nf-core/software/deeptools/plotheatmap/meta.yml b/modules/nf-core/modules/deeptools/plotheatmap/meta.yml similarity index 100% rename from modules/nf-core/software/deeptools/plotheatmap/meta.yml rename to modules/nf-core/modules/deeptools/plotheatmap/meta.yml diff --git a/modules/nf-core/software/fastqc/functions.nf b/modules/nf-core/modules/fastqc/functions.nf similarity index 100% rename from modules/nf-core/software/fastqc/functions.nf rename to modules/nf-core/modules/fastqc/functions.nf diff --git a/modules/nf-core/software/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf similarity index 100% rename from modules/nf-core/software/fastqc/main.nf rename to modules/nf-core/modules/fastqc/main.nf diff --git a/modules/nf-core/software/fastqc/meta.yml b/modules/nf-core/modules/fastqc/meta.yml similarity index 100% rename from modules/nf-core/software/fastqc/meta.yml rename to modules/nf-core/modules/fastqc/meta.yml diff --git a/modules/nf-core/software/gunzip/functions.nf b/modules/nf-core/modules/gunzip/functions.nf similarity index 100% rename from modules/nf-core/software/gunzip/functions.nf rename to modules/nf-core/modules/gunzip/functions.nf diff --git a/modules/nf-core/software/gunzip/main.nf b/modules/nf-core/modules/gunzip/main.nf similarity index 100% rename from modules/nf-core/software/gunzip/main.nf rename to modules/nf-core/modules/gunzip/main.nf diff --git a/modules/nf-core/software/gunzip/meta.yml b/modules/nf-core/modules/gunzip/meta.yml similarity index 100% rename from modules/nf-core/software/gunzip/meta.yml rename to modules/nf-core/modules/gunzip/meta.yml diff --git a/modules/nf-core/software/picard/markduplicates/functions.nf b/modules/nf-core/modules/picard/markduplicates/functions.nf similarity index 100% rename from modules/nf-core/software/picard/markduplicates/functions.nf rename to modules/nf-core/modules/picard/markduplicates/functions.nf diff --git a/modules/nf-core/software/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf similarity index 100% rename from modules/nf-core/software/picard/markduplicates/main.nf rename to modules/nf-core/modules/picard/markduplicates/main.nf diff --git a/modules/nf-core/software/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml similarity index 100% rename from modules/nf-core/software/picard/markduplicates/meta.yml rename to modules/nf-core/modules/picard/markduplicates/meta.yml diff --git a/modules/nf-core/software/samtools/flagstat/functions.nf b/modules/nf-core/modules/samtools/flagstat/functions.nf similarity index 100% rename from modules/nf-core/software/samtools/flagstat/functions.nf rename to modules/nf-core/modules/samtools/flagstat/functions.nf diff --git a/modules/nf-core/software/samtools/flagstat/main.nf b/modules/nf-core/modules/samtools/flagstat/main.nf similarity index 100% rename from modules/nf-core/software/samtools/flagstat/main.nf rename to modules/nf-core/modules/samtools/flagstat/main.nf diff --git a/modules/nf-core/software/samtools/flagstat/meta.yml b/modules/nf-core/modules/samtools/flagstat/meta.yml similarity index 100% rename from modules/nf-core/software/samtools/flagstat/meta.yml rename to modules/nf-core/modules/samtools/flagstat/meta.yml diff --git a/modules/nf-core/software/samtools/idxstats/functions.nf b/modules/nf-core/modules/samtools/idxstats/functions.nf similarity index 100% rename from modules/nf-core/software/samtools/idxstats/functions.nf rename to modules/nf-core/modules/samtools/idxstats/functions.nf diff --git a/modules/nf-core/software/samtools/idxstats/main.nf b/modules/nf-core/modules/samtools/idxstats/main.nf similarity index 100% rename from modules/nf-core/software/samtools/idxstats/main.nf rename to modules/nf-core/modules/samtools/idxstats/main.nf diff --git a/modules/nf-core/software/samtools/idxstats/meta.yml b/modules/nf-core/modules/samtools/idxstats/meta.yml similarity index 100% rename from modules/nf-core/software/samtools/idxstats/meta.yml rename to modules/nf-core/modules/samtools/idxstats/meta.yml diff --git a/modules/nf-core/software/samtools/index/functions.nf b/modules/nf-core/modules/samtools/index/functions.nf similarity index 100% rename from modules/nf-core/software/samtools/index/functions.nf rename to modules/nf-core/modules/samtools/index/functions.nf diff --git a/modules/nf-core/software/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf similarity index 100% rename from modules/nf-core/software/samtools/index/main.nf rename to modules/nf-core/modules/samtools/index/main.nf diff --git a/modules/nf-core/software/samtools/index/meta.yml b/modules/nf-core/modules/samtools/index/meta.yml similarity index 100% rename from modules/nf-core/software/samtools/index/meta.yml rename to modules/nf-core/modules/samtools/index/meta.yml diff --git a/modules/nf-core/software/samtools/sort/functions.nf b/modules/nf-core/modules/samtools/sort/functions.nf similarity index 100% rename from modules/nf-core/software/samtools/sort/functions.nf rename to modules/nf-core/modules/samtools/sort/functions.nf diff --git a/modules/nf-core/software/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf similarity index 100% rename from modules/nf-core/software/samtools/sort/main.nf rename to modules/nf-core/modules/samtools/sort/main.nf diff --git a/modules/nf-core/software/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml similarity index 100% rename from modules/nf-core/software/samtools/sort/meta.yml rename to modules/nf-core/modules/samtools/sort/meta.yml diff --git a/modules/nf-core/software/samtools/stats/functions.nf b/modules/nf-core/modules/samtools/stats/functions.nf similarity index 100% rename from modules/nf-core/software/samtools/stats/functions.nf rename to modules/nf-core/modules/samtools/stats/functions.nf diff --git a/modules/nf-core/software/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf similarity index 100% rename from modules/nf-core/software/samtools/stats/main.nf rename to modules/nf-core/modules/samtools/stats/main.nf diff --git a/modules/nf-core/software/samtools/stats/meta.yml b/modules/nf-core/modules/samtools/stats/meta.yml similarity index 100% rename from modules/nf-core/software/samtools/stats/meta.yml rename to modules/nf-core/modules/samtools/stats/meta.yml diff --git a/modules/nf-core/software/samtools/view/functions.nf b/modules/nf-core/modules/samtools/view/functions.nf similarity index 100% rename from modules/nf-core/software/samtools/view/functions.nf rename to modules/nf-core/modules/samtools/view/functions.nf diff --git a/modules/nf-core/software/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf similarity index 100% rename from modules/nf-core/software/samtools/view/main.nf rename to modules/nf-core/modules/samtools/view/main.nf diff --git a/modules/nf-core/software/samtools/view/meta.yml b/modules/nf-core/modules/samtools/view/meta.yml similarity index 100% rename from modules/nf-core/software/samtools/view/meta.yml rename to modules/nf-core/modules/samtools/view/meta.yml diff --git a/modules/nf-core/software/seacr/callpeak/functions.nf b/modules/nf-core/modules/seacr/callpeak/functions.nf similarity index 100% rename from modules/nf-core/software/seacr/callpeak/functions.nf rename to modules/nf-core/modules/seacr/callpeak/functions.nf diff --git a/modules/nf-core/software/seacr/callpeak/main.nf b/modules/nf-core/modules/seacr/callpeak/main.nf similarity index 100% rename from modules/nf-core/software/seacr/callpeak/main.nf rename to modules/nf-core/modules/seacr/callpeak/main.nf diff --git a/modules/nf-core/software/seacr/callpeak/meta.yml b/modules/nf-core/modules/seacr/callpeak/meta.yml similarity index 100% rename from modules/nf-core/software/seacr/callpeak/meta.yml rename to modules/nf-core/modules/seacr/callpeak/meta.yml diff --git a/modules/nf-core/software/trimgalore/functions.nf b/modules/nf-core/modules/trimgalore/functions.nf similarity index 100% rename from modules/nf-core/software/trimgalore/functions.nf rename to modules/nf-core/modules/trimgalore/functions.nf diff --git a/modules/nf-core/software/trimgalore/main.nf b/modules/nf-core/modules/trimgalore/main.nf similarity index 100% rename from modules/nf-core/software/trimgalore/main.nf rename to modules/nf-core/modules/trimgalore/main.nf diff --git a/modules/nf-core/software/trimgalore/meta.yml b/modules/nf-core/modules/trimgalore/meta.yml similarity index 100% rename from modules/nf-core/software/trimgalore/meta.yml rename to modules/nf-core/modules/trimgalore/meta.yml diff --git a/modules/nf-core/software/ucsc/bedclip/functions.nf b/modules/nf-core/modules/ucsc/bedclip/functions.nf similarity index 100% rename from modules/nf-core/software/ucsc/bedclip/functions.nf rename to modules/nf-core/modules/ucsc/bedclip/functions.nf diff --git a/modules/nf-core/software/ucsc/bedclip/main.nf b/modules/nf-core/modules/ucsc/bedclip/main.nf similarity index 100% rename from modules/nf-core/software/ucsc/bedclip/main.nf rename to modules/nf-core/modules/ucsc/bedclip/main.nf diff --git a/modules/nf-core/software/ucsc/bedclip/meta.yml b/modules/nf-core/modules/ucsc/bedclip/meta.yml similarity index 100% rename from modules/nf-core/software/ucsc/bedclip/meta.yml rename to modules/nf-core/modules/ucsc/bedclip/meta.yml diff --git a/modules/nf-core/software/ucsc/bedgraphtobigwig/functions.nf b/modules/nf-core/modules/ucsc/bedgraphtobigwig/functions.nf similarity index 100% rename from modules/nf-core/software/ucsc/bedgraphtobigwig/functions.nf rename to modules/nf-core/modules/ucsc/bedgraphtobigwig/functions.nf diff --git a/modules/nf-core/software/ucsc/bedgraphtobigwig/main.nf b/modules/nf-core/modules/ucsc/bedgraphtobigwig/main.nf similarity index 100% rename from modules/nf-core/software/ucsc/bedgraphtobigwig/main.nf rename to modules/nf-core/modules/ucsc/bedgraphtobigwig/main.nf diff --git a/modules/nf-core/software/untar/functions.nf b/modules/nf-core/modules/untar/functions.nf similarity index 100% rename from modules/nf-core/software/untar/functions.nf rename to modules/nf-core/modules/untar/functions.nf diff --git a/modules/nf-core/software/untar/main.nf b/modules/nf-core/modules/untar/main.nf similarity index 100% rename from modules/nf-core/software/untar/main.nf rename to modules/nf-core/modules/untar/main.nf diff --git a/modules/nf-core/software/untar/meta.yml b/modules/nf-core/modules/untar/meta.yml similarity index 100% rename from modules/nf-core/software/untar/meta.yml rename to modules/nf-core/modules/untar/meta.yml diff --git a/nextflow_schema.json b/nextflow_schema.json index 252754f2..6d121878 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -374,7 +374,7 @@ "default": 10000 }, "igg_control": { - "type": "string", + "type": "boolean", "default": "true" }, "peak_threshold": { diff --git a/subworkflows/local/align_bowtie2.nf b/subworkflows/local/align_bowtie2.nf index a74a799c..4119e059 100644 --- a/subworkflows/local/align_bowtie2.nf +++ b/subworkflows/local/align_bowtie2.nf @@ -7,8 +7,8 @@ params.spikein_align_options = [:] params.samtools_options = [:] params.samtools_spikein_options = [:] -include { BOWTIE2_ALIGN } from "../../modules/nf-core/software/bowtie2/align/main" addParams( options: params.align_options, save_unaligned: params.save_unaligned ) -include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from "../../modules/nf-core/software/bowtie2/align/main" addParams( options: params.spikein_align_options, save_unaligned: false ) +include { BOWTIE2_ALIGN } from "../../modules/nf-core/modules/bowtie2/align/main" addParams( options: params.align_options, save_unaligned: params.save_unaligned ) +include { BOWTIE2_ALIGN as BOWTIE2_SPIKEIN_ALIGN } from "../../modules/nf-core/modules/bowtie2/align/main" addParams( options: params.spikein_align_options, save_unaligned: false ) include { BAM_SORT_SAMTOOLS } from "../nf-core/bam_sort_samtools" addParams( samtools_sort_options: params.samtools_options, options: params.samtools_options ) include { BAM_SORT_SAMTOOLS as BAM_SORT_SAMTOOLS_SPIKEIN } from "../nf-core/bam_sort_samtools" addParams( samtools_sort_options: params.samtools_spikein_options, options: params.samtools_spikein_options ) diff --git a/subworkflows/local/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf index 64da0876..40bbdd0d 100644 --- a/subworkflows/local/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -9,7 +9,7 @@ params.awk_options = [:] params.cut_options = [:] include { SAMTOOLS_VIEW_SORT_STATS } from "./samtools_view_sort_stats" addParams( samtools_options: params.samtools_options, samtools_view_options: params.samtools_view_options ) -include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/software/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) +include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/modules/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) include { AWK } from "../../modules/local/awk" addParams( options: params.awk_options ) include { CUT } from "../../modules/local/cut" addParams( options: params.cut_options ) diff --git a/subworkflows/local/consensus_peaks.nf b/subworkflows/local/consensus_peaks.nf index ccb5470d..a7b97164 100644 --- a/subworkflows/local/consensus_peaks.nf +++ b/subworkflows/local/consensus_peaks.nf @@ -9,7 +9,7 @@ params.awk_threshold_options = [:] params.run_peak_plotting = true include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options ) -include { BEDTOOLS_MERGE } from "../../modules/nf-core/software/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) +include { BEDTOOLS_MERGE } from "../../modules/nf-core/modules/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) include { AWK } from "../../modules/local/awk" addParams( options: params.awk_threshold_options ) include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" addParams( options: params.plot_peak_options ) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 45d908a2..1f55526c 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -7,16 +7,16 @@ params.spikein_genome_options = [:] params.bt2_index_options = [:] params.bt2_spikein_index_options = [:] -include { GUNZIP as GUNZIP_FASTA } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.genome_options ) -include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.spikein_genome_options ) -include { GUNZIP as GUNZIP_GTF } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.genome_options ) -include { GUNZIP as GUNZIP_BED } from "../../modules/nf-core/software/gunzip/main.nf" addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_FASTA } from "../../modules/nf-core/modules/gunzip/main.nf" addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_SPIKEIN_FASTA } from "../../modules/nf-core/modules/gunzip/main.nf" addParams( options: params.spikein_genome_options ) +include { GUNZIP as GUNZIP_GTF } from "../../modules/nf-core/modules/gunzip/main.nf" addParams( options: params.genome_options ) +include { GUNZIP as GUNZIP_BED } from "../../modules/nf-core/modules/gunzip/main.nf" addParams( options: params.genome_options ) include { GET_CHROM_SIZES } from "../../modules/local/get_chrom_sizes" addParams( options: params.genome_options ) include { GET_CHROM_SIZES as GET_SPIKEIN_CHROM_SIZES } from "../../modules/local/get_chrom_sizes" addParams( options: params.spikein_genome_options ) -include { UNTAR as UNTAR_BT2_INDEX } from "../../modules/nf-core/software/untar/main.nf" addParams( options: params.bt2_index_options ) -include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from "../../modules/nf-core/software/untar/main.nf" addParams( options: params.bt2_spikein_index_options ) -include { BOWTIE2_BUILD } from "../../modules/nf-core/software/bowtie2/build/main" addParams( options: params.bt2_index_options ) -include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from "../../modules/nf-core/software/bowtie2/build/main" addParams( options: params.bt2_spikein_index_options ) +include { UNTAR as UNTAR_BT2_INDEX } from "../../modules/nf-core/modules/untar/main.nf" addParams( options: params.bt2_index_options ) +include { UNTAR as UNTAR_SPIKEIN_BT2_INDEX } from "../../modules/nf-core/modules/untar/main.nf" addParams( options: params.bt2_spikein_index_options ) +include { BOWTIE2_BUILD } from "../../modules/nf-core/modules/bowtie2/build/main" addParams( options: params.bt2_index_options ) +include { BOWTIE2_BUILD as BOWTIE2_SPIKEIN_BUILD } from "../../modules/nf-core/modules/bowtie2/build/main" addParams( options: params.bt2_spikein_index_options ) workflow PREPARE_GENOME { take: diff --git a/subworkflows/local/samtools_view_sort_stats.nf b/subworkflows/local/samtools_view_sort_stats.nf index d93a7fff..5c356a36 100644 --- a/subworkflows/local/samtools_view_sort_stats.nf +++ b/subworkflows/local/samtools_view_sort_stats.nf @@ -5,8 +5,8 @@ params.samtools_view_options = [:] params.samtools_options = [:] -include { SAMTOOLS_VIEW } from "../../modules/nf-core/software/samtools/view/main" addParams( options: params.samtools_view_options ) -include { SAMTOOLS_INDEX } from "../../modules/nf-core/software/samtools/index/main" addParams( options: params.samtools_options ) +include { SAMTOOLS_VIEW } from "../../modules/nf-core/modules/samtools/view/main" addParams( options: params.samtools_view_options ) +include { SAMTOOLS_INDEX } from "../../modules/nf-core/modules/samtools/index/main" addParams( options: params.samtools_options ) include { BAM_STATS_SAMTOOLS } from "../nf-core/bam_stats_samtools" addParams( options: params.samtools_options ) workflow SAMTOOLS_VIEW_SORT_STATS { diff --git a/subworkflows/nf-core/bam_sort_samtools.nf b/subworkflows/nf-core/bam_sort_samtools.nf index 34fce8d2..80f1ca87 100644 --- a/subworkflows/nf-core/bam_sort_samtools.nf +++ b/subworkflows/nf-core/bam_sort_samtools.nf @@ -5,8 +5,8 @@ params.options = [:] params.samtools_sort_options = [:] -include { SAMTOOLS_SORT } from '../../modules/nf-core/software/samtools/sort/main' addParams( options: params.samtools_sort_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.options ) +include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams( options: params.samtools_sort_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.options ) include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) workflow BAM_SORT_SAMTOOLS { diff --git a/subworkflows/nf-core/bam_stats_samtools.nf b/subworkflows/nf-core/bam_stats_samtools.nf index 48c97128..1501e2cb 100644 --- a/subworkflows/nf-core/bam_stats_samtools.nf +++ b/subworkflows/nf-core/bam_stats_samtools.nf @@ -4,9 +4,9 @@ params.options = [:] -include { SAMTOOLS_STATS } from '../../modules/nf-core/software/samtools/stats/main' addParams( options: params.options ) -include { SAMTOOLS_IDXSTATS } from '../../modules/nf-core/software/samtools/idxstats/main' addParams( options: params.options ) -include { SAMTOOLS_FLAGSTAT } from '../../modules/nf-core/software/samtools/flagstat/main' addParams( options: params.options ) +include { SAMTOOLS_STATS } from '../../modules/nf-core/modules/samtools/stats/main' addParams( options: params.options ) +include { SAMTOOLS_IDXSTATS } from '../../modules/nf-core/modules/samtools/idxstats/main' addParams( options: params.options ) +include { SAMTOOLS_FLAGSTAT } from '../../modules/nf-core/modules/samtools/flagstat/main' addParams( options: params.options ) workflow BAM_STATS_SAMTOOLS { take: diff --git a/subworkflows/nf-core/fastqc_trimgalore.nf b/subworkflows/nf-core/fastqc_trimgalore.nf index ad460c20..59e68a4b 100644 --- a/subworkflows/nf-core/fastqc_trimgalore.nf +++ b/subworkflows/nf-core/fastqc_trimgalore.nf @@ -5,8 +5,8 @@ params.fastqc_options = [:] params.trimgalore_options = [:] -include { FASTQC } from '../../modules/nf-core/software/fastqc/main' addParams( options: params.fastqc_options ) -include { TRIMGALORE } from '../../modules/nf-core/software/trimgalore/main' addParams( options: params.trimgalore_options ) +include { FASTQC } from '../../modules/nf-core/modules/fastqc/main' addParams( options: params.fastqc_options ) +include { TRIMGALORE } from '../../modules/nf-core/modules/trimgalore/main' addParams( options: params.trimgalore_options ) workflow FASTQC_TRIMGALORE { take: diff --git a/subworkflows/nf-core/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf index 96d40d7d..79dd91b8 100644 --- a/subworkflows/nf-core/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -6,8 +6,8 @@ params.markduplicates_options = [:] params.samtools_options = [:] params.control_only = false -include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/software/picard/markduplicates/main' addParams( options: params.markduplicates_options ) -include { SAMTOOLS_INDEX } from '../../modules/nf-core/software/samtools/index/main' addParams( options: params.samtools_options ) +include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' addParams( options: params.markduplicates_options ) +include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_options ) include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_options ) workflow MARK_DUPLICATES_PICARD { diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index f16daaee..fa258784 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -288,7 +288,7 @@ include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) -include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/software/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) @@ -316,15 +316,15 @@ include { CALCULATE_FRAGMENTS } from "../subworkflow /* * MODULES */ -include { UCSC_BEDCLIP } from "../modules/nf-core/software/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) -include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/software/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) -include { SEACR_CALLPEAK } from "../modules/nf-core/software/seacr/callpeak/main" addParams( options: modules["seacr"] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/software/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/software/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) -include { SAMTOOLS_SORT } from "../modules/nf-core/software/samtools/sort/main.nf" addParams( options: modules["samtools_sort"] ) -include { SAMTOOLS_INDEX } from "../modules/nf-core/software/samtools/index/main.nf" addParams( options: modules["samtools_index"] ) +include { UCSC_BEDCLIP } from "../modules/nf-core/modules/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) +include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/modules/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) +include { SEACR_CALLPEAK } from "../modules/nf-core/modules/seacr/callpeak/main" addParams( options: modules["seacr"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) +include { SAMTOOLS_SORT } from "../modules/nf-core/modules/samtools/sort/main.nf" addParams( options: modules["samtools_sort"] ) +include { SAMTOOLS_INDEX } from "../modules/nf-core/modules/samtools/index/main.nf" addParams( options: modules["samtools_index"] ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules From a6f714f09fdbfc2ad5ef370ffc957ee665573059 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 20:49:27 +0100 Subject: [PATCH 485/675] Updated schema --- nextflow_schema.json | 426 +++++++++++++++++++++++++------------------ 1 file changed, 252 insertions(+), 174 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 6d121878..b80bf884 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -5,56 +5,43 @@ "description": "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.", "type": "object", "definitions": { - "input_output_options": { - "title": "Input/output options", + "reference_data_options": { + "title": "Reference data options", "type": "object", - "fa_icon": "fas fa-terminal", - "description": "Define where the pipeline should find input data and save output data.", - "required": [ - "input" - ], + "fa_icon": "fas fa-dna", + "description": "Reference genome related files and options required for the workflow.", "properties": { - "input": { + "genome": { "type": "string", - "format": "file-path", - "mimetype": "text/csv", - "pattern": "^\\S+\\.csv$", - "schema": "assets/schema_input.json", - "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re//usage#samplesheet-input).", - "fa_icon": "fas fa-file-csv" + "description": "Name of iGenomes reference.", + "fa_icon": "fas fa-book", + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." }, - "outdir": { + "bowtie2": { "type": "string", - "description": "Path to the output directory where the results will be saved.", - "default": "./results", - "fa_icon": "fas fa-folder-open" + "fa_icon": "fas fa-book" }, - "email": { + "gtf": { "type": "string", - "description": "Email address for completion summary.", - "fa_icon": "fas fa-envelope", - "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + "fa_icon": "fas fa-book" }, - "multiqc_title": { + "blacklist": { "type": "string", - "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", - "fa_icon": "fas fa-file-signature" - } - } - }, - "reference_genome_options": { - "title": "Reference genome options", - "type": "object", - "fa_icon": "fas fa-dna", - "description": "Reference genome related files and options required for the workflow.", - "properties": { - "genome": { + "fa_icon": "fas fa-book" + }, + "spikein_genome": { "type": "string", - "description": "Name of iGenomes reference.", + "default": "K12-MG1655", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "description": "Name of the igenome reference for the spike-in genome" + }, + "spikein_bowtie2": { + "type": "string", + "fa_icon": "fas fa-book" + }, + "spikein_fasta": { + "type": "string", + "fa_icon": "fas fa-book" }, "fasta": { "type": "string", @@ -269,14 +256,227 @@ "help_text": "This may be useful for example if you are unable to directly pull Singularity containers to run the pipeline due to http/https proxy issues." } } + }, + "trimming_options": { + "title": "Trimming Options", + "type": "object", + "description": "", + "default": "", + "properties": { + "clip_r1": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify" + }, + "clip_r2": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify" + }, + "three_prime_clip_r1": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify" + }, + "three_prime_clip_r2": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify" + }, + "trim_nextseq": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify" + } + }, + "fa_icon": "fas fa-cut" + }, + "input_output_options": { + "title": "Input/output options", + "type": "object", + "fa_icon": "fas fa-terminal", + "description": "Define where the pipeline should find input data and save output data.", + "required": [ + "input" + ], + "properties": { + "input": { + "type": "string", + "format": "file-path", + "mimetype": "text/csv", + "pattern": "^\\S+\\.csv$", + "schema": "assets/schema_input.json", + "description": "Path to comma-separated file containing information about the samples in the experiment.", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re//usage#samplesheet-input).", + "fa_icon": "fas fa-file-csv" + }, + "outdir": { + "type": "string", + "description": "Path to the output directory where the results will be saved.", + "default": "./results", + "fa_icon": "fas fa-folder-open" + }, + "email": { + "type": "string", + "description": "Email address for completion summary.", + "fa_icon": "fas fa-envelope", + "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + }, + "multiqc_title": { + "type": "string", + "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", + "fa_icon": "fas fa-file-signature" + }, + "save_reference": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus" + }, + "save_merged_fastq": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus" + }, + "save_trimmed": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus" + }, + "save_spikein_aligned": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus" + }, + "save_unaligned": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus" + }, + "save_align_intermed": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus" + }, + "aligner": { + "type": "string", + "default": "bowtie2", + "hidden": true, + "fa_icon": "fas fa-align-justify" + } + } + }, + "flow_switching_options": { + "title": "Flow switching options", + "type": "object", + "description": "", + "default": "", + "properties": { + "only_genome": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "only_input": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "only_preqc": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "only_alignment": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "only_filtering": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "only_peak_calling": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_fastqc": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_trimming": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_removeduplicates": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_scale": { + "type": "boolean", + "description": "Skip scalefactor normalisation", + "fa_icon": "fas fa-align-justify" + }, + "skip_reporting": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_igv": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_heatmaps": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_multiqc": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + }, + "skip_upset_plots": { + "type": "boolean", + "fa_icon": "fas fa-align-justify" + } + }, + "fa_icon": "fas fa-exchange-alt" + }, + "pipeline_options": { + "title": "Pipeline Options", + "type": "object", + "description": "", + "default": "", + "properties": { + "minimum_alignment_q_score": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-sort-numeric-down" + }, + "dedup_target_reads": { + "type": "boolean", + "fa_icon": "fas fa-clone" + }, + "normalisation_c": { + "type": "integer", + "default": 10000, + "hidden": true, + "fa_icon": "fas fa-align-justify" + }, + "igg_control": { + "type": "boolean", + "default": true, + "fa_icon": "fas fa-align-justify" + }, + "peak_threshold": { + "type": "number", + "default": 0.05, + "fa_icon": "fas fa-align-justify" + }, + "gene_bed": { + "type": "string", + "fa_icon": "fas fa-align-justify" + }, + "replicate_threshold": { + "type": "integer", + "default": 1, + "fa_icon": "fas fa-align-justify" + } + }, + "fa_icon": "fas fa-cog" } }, "allOf": [ { - "$ref": "#/definitions/input_output_options" - }, - { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/definitions/reference_data_options" }, { "$ref": "#/definitions/institutional_config_options" @@ -286,140 +486,18 @@ }, { "$ref": "#/definitions/generic_options" - } - ], - "properties": { - "spikein_genome": { - "type": "string", - "default": "K12-MG1655" - }, - "save_reference": { - "type": "boolean" - }, - "only_genome": { - "type": "boolean" - }, - "save_merged_fastq": { - "type": "boolean" - }, - "only_input": { - "type": "boolean" - }, - "skip_fastqc": { - "type": "boolean" - }, - "only_preqc": { - "type": "boolean" - }, - "clip_r1": { - "type": "integer", - "default": 0 - }, - "clip_r2": { - "type": "integer", - "default": 0 - }, - "three_prime_clip_r1": { - "type": "integer", - "default": 0 - }, - "three_prime_clip_r2": { - "type": "integer", - "default": 0 - }, - "trim_nextseq": { - "type": "integer", - "default": 0 - }, - "save_trimmed": { - "type": "boolean" - }, - "skip_trimming": { - "type": "boolean" - }, - "aligner": { - "type": "string", - "default": "bowtie2" }, - "save_spikein_aligned": { - "type": "boolean" - }, - "save_unaligned": { - "type": "boolean" - }, - "only_alignment": { - "type": "boolean" - }, - "save_align_intermed": { - "type": "boolean" - }, - "minimum_alignment_q_score": { - "type": "integer", - "default": 0 - }, - "skip_removeduplicates": { - "type": "boolean" - }, - "dedup_target_reads": { - "type": "boolean" - }, - "only_filtering": { - "type": "boolean" - }, - "skip_scale": { - "type": "boolean" - }, - "normalisation_c": { - "type": "integer", - "default": 10000 - }, - "igg_control": { - "type": "boolean", - "default": "true" - }, - "peak_threshold": { - "type": "number", - "default": 0.05 - }, - "replicate_threshold": { - "type": "integer", - "default": 1 - }, - "only_peak_calling": { - "type": "boolean" - }, - "skip_reporting": { - "type": "boolean" - }, - "skip_igv": { - "type": "boolean" - }, - "skip_heatmaps": { - "type": "boolean" - }, - "skip_multiqc": { - "type": "boolean" - }, - "skip_upset_plots": { - "type": "boolean" - }, - "bowtie2": { - "type": "string" - }, - "gtf": { - "type": "string" - }, - "gene_bed": { - "type": "string" + { + "$ref": "#/definitions/trimming_options" }, - "blacklist": { - "type": "string" + { + "$ref": "#/definitions/input_output_options" }, - "spikein_bowtie2": { - "type": "string" + { + "$ref": "#/definitions/flow_switching_options" }, - "spikein_fasta": { - "type": "string" + { + "$ref": "#/definitions/pipeline_options" } - } + ] } \ No newline at end of file From 06f47170c15951a57c323f71fb1def9a120612f7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:01:01 +0100 Subject: [PATCH 486/675] Updated manifest version --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 08b07dba..d61e6bb2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -224,7 +224,7 @@ manifest { description = "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis." mainScript = "main.nf" nextflowVersion = "!>=21.04.0" - version = '1.0.0' + version = '1.0.0dev' } // Function to ensure that resource requirements don't go beyond From 89f3b5c384eb3c556dedf7c34fa1fd94a29a85d4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:07:39 +0100 Subject: [PATCH 487/675] updated modules.json --- modules.json | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index 91d5404c..413ade64 100644 --- a/modules.json +++ b/modules.json @@ -3,12 +3,33 @@ "homePage": "https://github.com/nf-core/cutandrun", "repos": { "nf-core/modules": { + "bedtools/bamtobed": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "bedtools/merge": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "bowtie2/build": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "cat/fastq": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, "fastqc": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, - "multiqc": { + "gunzip": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "seacr/callpeak": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "ucsc/bedclip": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, + "untar": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } } } -} +} \ No newline at end of file From 1719187ffbc779f34af285eeaa0b82db43b9232b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:10:10 +0100 Subject: [PATCH 488/675] removed module --- .../deeptools/bamPEFragmentSize/functions.nf | 59 ------------------- .../deeptools/bamPEFragmentSize/main.nf | 45 -------------- 2 files changed, 104 deletions(-) delete mode 100644 modules/local/modules/deeptools/bamPEFragmentSize/functions.nf delete mode 100644 modules/local/modules/deeptools/bamPEFragmentSize/main.nf diff --git a/modules/local/modules/deeptools/bamPEFragmentSize/functions.nf b/modules/local/modules/deeptools/bamPEFragmentSize/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/local/modules/deeptools/bamPEFragmentSize/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/local/modules/deeptools/bamPEFragmentSize/main.nf b/modules/local/modules/deeptools/bamPEFragmentSize/main.nf deleted file mode 100644 index 3f27e597..00000000 --- a/modules/local/modules/deeptools/bamPEFragmentSize/main.nf +++ /dev/null @@ -1,45 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process DEEPTOOLS_BAMPEFRAGMENTSIZE { - tag "$meta.id" - label 'process_high' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - - conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/deeptools:3.5.0--py_0" - } else { - container "quay.io/biocontainers/deeptools:3.5.0--py_0" - } - - input: - tuple val(meta), path(bam), path(bai) - path blacklist - - output: - tuple val(meta), path("*_summary.csv"), emit: summary_csv - tuple val(meta), path("*_raw.csv") , emit: raw_csv - tuple val(meta), path("*_log.txt") , emit: log - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - """ - bamPEFragmentSize \\ - -b $bam \\ - --outRawFragmentLengths ${prefix}_raw.csv \\ - --table ${prefix}_summary.csv \\ - -bl $blacklist \\ - -p $task.cpus \\ - $options.args \\ - > ${prefix}_log.txt - bamPEFragmentSize --version | sed -e "s/bamPEFragmentSize //g" > ${software}.version.txt - """ -} From 1f04f25b3efaca0389391d9e8dde18a0859620b5 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:16:55 +0100 Subject: [PATCH 489/675] Updated container versions --- modules/local/bedtools_bamtobed.nf | 6 +++--- modules/local/bedtools_genomecov_scale.nf | 6 +++--- modules/local/get_chrom_sizes.nf | 6 +++--- modules/local/multiqc.nf | 4 ++-- modules/local/seacr_no_igg.nf | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/local/bedtools_bamtobed.nf b/modules/local/bedtools_bamtobed.nf index ddc81c9a..a1b7d5f6 100644 --- a/modules/local/bedtools_bamtobed.nf +++ b/modules/local/bedtools_bamtobed.nf @@ -11,11 +11,11 @@ process BEDTOOLS_BAMTOBED { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - conda (params.enable_conda ? "bioconda::bedtools=2.29.2" : null) + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bedtools:2.29.2--hc088bd4_0" + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" } else { - container "quay.io/biocontainers/bedtools:2.29.2--hc088bd4_0" + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" } input: diff --git a/modules/local/bedtools_genomecov_scale.nf b/modules/local/bedtools_genomecov_scale.nf index cc51922c..0f3e8d23 100644 --- a/modules/local/bedtools_genomecov_scale.nf +++ b/modules/local/bedtools_genomecov_scale.nf @@ -11,11 +11,11 @@ process BEDTOOLS_GENOMECOV_SCALE { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - conda (params.enable_conda ? "bioconda::bedtools=2.29.2" : null) + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bedtools:2.29.2--hc088bd4_0" + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" } else { - container "quay.io/biocontainers/bedtools:2.29.2--hc088bd4_0" + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" } input: diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 8bfdc811..5b3b3db0 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -13,11 +13,11 @@ process GET_CHROM_SIZES { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:"genome", publish_id:'') } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? "bioconda::samtools=1.13" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h9402c20_2" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h9402c20_2" } input: diff --git a/modules/local/multiqc.nf b/modules/local/multiqc.nf index c9118b37..e3de807d 100644 --- a/modules/local/multiqc.nf +++ b/modules/local/multiqc.nf @@ -10,11 +10,11 @@ process MULTIQC { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - conda (params.enable_conda ? "bioconda::multiqc=1.9" : null) + conda (params.enable_conda ? "bioconda::multiqc=1.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://depot.galaxyproject.org/singularity/multiqc:1.9--pyh9f0ad1d_0" } else { - container "quay.io/biocontainers/multiqc:1.9--pyh9f0ad1d_0" + container "quay.io/biocontainers/multiqc:1.11--pyh9f0ad1d_0" } input: diff --git a/modules/local/seacr_no_igg.nf b/modules/local/seacr_no_igg.nf index 21b81f8d..743c7a29 100644 --- a/modules/local/seacr_no_igg.nf +++ b/modules/local/seacr_no_igg.nf @@ -12,7 +12,7 @@ process SEACR_CALLPEAK { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.29.2" : null) + conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://depot.galaxyproject.org/singularity/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0" } else { From 443bb5eb1ce57f06a9c41687402a133a88a17cda Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:23:58 +0100 Subject: [PATCH 490/675] Updated option settings in local modules --- modules/local/awk.nf | 4 ++-- modules/local/awk_script.nf | 2 +- modules/local/bedtools_bamtobed.nf | 2 +- modules/local/bedtools_genomecov_scale.nf | 2 +- modules/local/cat_fastq.nf | 4 ++-- modules/local/cut.nf | 2 +- modules/local/export_meta.nf | 2 +- modules/local/generate_reports.nf | 2 +- modules/local/get_chrom_sizes.nf | 1 + modules/local/get_software_versions.nf | 1 + modules/local/gunzip.nf | 2 +- modules/local/igv_session.nf | 2 +- modules/local/multiqc.nf | 2 +- modules/local/plot_consensus_peaks.nf | 2 +- modules/local/samplesheet_check.nf | 1 + modules/local/sort.nf | 4 ++-- modules/local/ucsc_bedclip.nf | 2 +- 17 files changed, 20 insertions(+), 17 deletions(-) diff --git a/modules/local/awk.nf b/modules/local/awk.nf index 648122b7..a7f11d63 100644 --- a/modules/local/awk.nf +++ b/modules/local/awk.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' -params.options = [:] -def options = initOptions(params.options) +params.options = [:] +options = initOptions(params.options) options.command = params.options.command ?: '' options.command2 = params.options.command2 ?: '' options.ext = params.options.ext ?: '' diff --git a/modules/local/awk_script.nf b/modules/local/awk_script.nf index 30fcc2b3..dc0044a6 100644 --- a/modules/local/awk_script.nf +++ b/modules/local/awk_script.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process AWK_SCRIPT { tag "$meta.id" diff --git a/modules/local/bedtools_bamtobed.nf b/modules/local/bedtools_bamtobed.nf index a1b7d5f6..b556900f 100644 --- a/modules/local/bedtools_bamtobed.nf +++ b/modules/local/bedtools_bamtobed.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process BEDTOOLS_BAMTOBED { tag "$meta.id" diff --git a/modules/local/bedtools_genomecov_scale.nf b/modules/local/bedtools_genomecov_scale.nf index 0f3e8d23..873810be 100644 --- a/modules/local/bedtools_genomecov_scale.nf +++ b/modules/local/bedtools_genomecov_scale.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process BEDTOOLS_GENOMECOV_SCALE { tag "$meta.id" diff --git a/modules/local/cat_fastq.nf b/modules/local/cat_fastq.nf index d2d5e0a7..dfad2908 100644 --- a/modules/local/cat_fastq.nf +++ b/modules/local/cat_fastq.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) /* * Concatenate FastQ files @@ -14,7 +14,7 @@ process CAT_FASTQ { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', publish_id:meta.id) } - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) + conda (params.enable_conda ? null : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { diff --git a/modules/local/cut.nf b/modules/local/cut.nf index a123edd4..644347e6 100644 --- a/modules/local/cut.nf +++ b/modules/local/cut.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) options.command = params.options.command ?: '' options.ext = params.options.ext ?: '' diff --git a/modules/local/export_meta.nf b/modules/local/export_meta.nf index d7980ec5..c7632d7d 100644 --- a/modules/local/export_meta.nf +++ b/modules/local/export_meta.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process EXPORT_META { label 'process_low' diff --git a/modules/local/generate_reports.nf b/modules/local/generate_reports.nf index a877fea6..97f76470 100644 --- a/modules/local/generate_reports.nf +++ b/modules/local/generate_reports.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process GENERATE_REPORTS { label 'process_medium' diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 5b3b3db0..46f5cfc7 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -2,6 +2,7 @@ include { saveFiles } from './functions' params.options = [:] +options = initOptions(params.options) /* * Get chromosome sizes from a fasta file diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf index 6e7a0c23..c33ba178 100644 --- a/modules/local/get_software_versions.nf +++ b/modules/local/get_software_versions.nf @@ -2,6 +2,7 @@ include { saveFiles } from './functions' params.options = [:] +options = initOptions(params.options) process GET_SOFTWARE_VERSIONS { publishDir "${params.outdir}", diff --git a/modules/local/gunzip.nf b/modules/local/gunzip.nf index 381e2c9e..d6bbe045 100644 --- a/modules/local/gunzip.nf +++ b/modules/local/gunzip.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process GUNZIP { tag "$archive" diff --git a/modules/local/igv_session.nf b/modules/local/igv_session.nf index 84e6a62c..199f1ef8 100644 --- a/modules/local/igv_session.nf +++ b/modules/local/igv_session.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) colour_pallete = ['38,70,83', '231,111,81', '42,157,143', '244,162,97', '233,196,106'] diff --git a/modules/local/multiqc.nf b/modules/local/multiqc.nf index e3de807d..1e77ee1e 100644 --- a/modules/local/multiqc.nf +++ b/modules/local/multiqc.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process MULTIQC { label 'process_medium' diff --git a/modules/local/plot_consensus_peaks.nf b/modules/local/plot_consensus_peaks.nf index dd77f50b..fbe5ae75 100644 --- a/modules/local/plot_consensus_peaks.nf +++ b/modules/local/plot_consensus_peaks.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process PLOT_CONSENSUS_PEAKS { label 'process_low' diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 20d82d4e..063f44ab 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -2,6 +2,7 @@ include { saveFiles } from './functions' params.options = [:] +options = initOptions(params.options) /* * Reformat design file and check validity diff --git a/modules/local/sort.nf b/modules/local/sort.nf index 6d004416..88345e3e 100644 --- a/modules/local/sort.nf +++ b/modules/local/sort.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' -params.options = [:] -def options = initOptions(params.options) +params.options = [:] +options = initOptions(params.options) options.command = params.options.command ?: '' options.ext = params.options.ext ?: '' diff --git a/modules/local/ucsc_bedclip.nf b/modules/local/ucsc_bedclip.nf index 902f80ae..fdc16d98 100644 --- a/modules/local/ucsc_bedclip.nf +++ b/modules/local/ucsc_bedclip.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) def VERSION = '377' From b1468222fc2982088c0ad1ef22edc566fafe538a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:35:17 +0100 Subject: [PATCH 491/675] updated module versions --- modules/local/cut.nf | 4 ++-- modules/local/export_meta.nf | 2 +- modules/local/get_chrom_sizes.nf | 6 +++--- modules/local/get_software_versions.nf | 2 +- modules/local/samplesheet_check.nf | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/local/cut.nf b/modules/local/cut.nf index 644347e6..c6c774a0 100644 --- a/modules/local/cut.nf +++ b/modules/local/cut.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' -params.options = [:] -options = initOptions(params.options) +params.options = [:] +options = initOptions(params.options) options.command = params.options.command ?: '' options.ext = params.options.ext ?: '' diff --git a/modules/local/export_meta.nf b/modules/local/export_meta.nf index c7632d7d..dbf7399f 100644 --- a/modules/local/export_meta.nf +++ b/modules/local/export_meta.nf @@ -1,7 +1,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -options = initOptions(params.options) +options = initOptions(params.options) process EXPORT_META { label 'process_low' diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 46f5cfc7..3b386d5f 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { saveFiles } from './functions' +include { initOptions; saveFiles } from './functions' params.options = [:] options = initOptions(params.options) @@ -16,9 +16,9 @@ process GET_CHROM_SIZES { conda (params.enable_conda ? "bioconda::samtools=1.13" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.13--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.13--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf index c33ba178..40363c42 100644 --- a/modules/local/get_software_versions.nf +++ b/modules/local/get_software_versions.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { saveFiles } from './functions' +include { initOptions; saveFiles } from './functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/samplesheet_check.nf b/modules/local/samplesheet_check.nf index 063f44ab..f8264b70 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/samplesheet_check.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { saveFiles } from './functions' +include { initOptions; saveFiles } from './functions' params.options = [:] options = initOptions(params.options) From 44fcb08425079aeab814faa34499ee274f09f549 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:38:58 +0100 Subject: [PATCH 492/675] updated multiqc container versions --- modules/local/multiqc.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/multiqc.nf b/modules/local/multiqc.nf index 1e77ee1e..32284384 100644 --- a/modules/local/multiqc.nf +++ b/modules/local/multiqc.nf @@ -12,9 +12,9 @@ process MULTIQC { conda (params.enable_conda ? "bioconda::multiqc=1.11" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/multiqc:1.9--pyh9f0ad1d_0" + container "https://depot.galaxyproject.org/singularity/multiqc:1.11--pyhdfd78af_0" } else { - container "quay.io/biocontainers/multiqc:1.11--pyh9f0ad1d_0" + container "quay.io/biocontainers/multiqc:1.11--pyhdfd78af_0" } input: From 315965f1297ac8506521107a3e39c42284b0e3e7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:46:18 +0100 Subject: [PATCH 493/675] Updated templates --- .github/CONTRIBUTING.md | 2 +- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/workflows/linting.yml | 10 ++++++---- bin/scrape_software_versions.py | 30 +++++++++++++++------------- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 669ee791..8054c7bb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -125,4 +125,4 @@ You then need to edit the script `bin/scrape_software_versions.py` to: ### Images and figures -For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). \ No newline at end of file +For overview images and other documents we follow the nf-core [style guidelines and examples](https://nf-co.re/developers/design_guidelines). diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 57911a4b..566eb1e9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -60,4 +60,4 @@ Have you provided the following extra information/files: ## Additional context - \ No newline at end of file + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a7208368..dcd33217 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -23,4 +23,4 @@ Learn more about contributing: [CONTRIBUTING.md](https://github.com/nf-core/cuta - [ ] Usage Documentation in `docs/usage.md` is updated. - [ ] Output Documentation in `docs/output.md` is updated. - [ ] `CHANGELOG.md` is updated. -- [ ] `README.md` is updated (including new tool citations and authors/contributors). \ No newline at end of file +- [ ] `README.md` is updated (including new tool citations and authors/contributors). diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 9367928a..3b448773 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: "10" + node-version: '10' - name: Install markdownlint run: npm install -g markdownlint-cli - name: Run Markdownlint @@ -67,7 +67,7 @@ jobs: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: - node-version: "10" + node-version: '10' - name: Install yaml-lint run: npm install -g yaml-lint - name: Run yaml-lint @@ -101,6 +101,7 @@ jobs: nf-core: runs-on: ubuntu-latest steps: + - name: Check out pipeline code uses: actions/checkout@v2 @@ -113,8 +114,8 @@ jobs: - uses: actions/setup-python@v1 with: - python-version: "3.6" - architecture: "x64" + python-version: '3.6' + architecture: 'x64' - name: Install dependencies run: | @@ -141,3 +142,4 @@ jobs: lint_log.txt lint_results.md PR_number.txt + diff --git a/bin/scrape_software_versions.py b/bin/scrape_software_versions.py index f5f47b5b..b87f78a2 100755 --- a/bin/scrape_software_versions.py +++ b/bin/scrape_software_versions.py @@ -3,32 +3,34 @@ import os results = {} -version_files = [x for x in os.listdir('.') if x.endswith('.version.txt')] +version_files = [x for x in os.listdir(".") if x.endswith(".version.txt")] for version_file in version_files: - software = version_file.replace('.version.txt','') - if software == 'pipeline': - software = 'nf-core/cutandrun' + software = version_file.replace(".version.txt", "") + if software == "pipeline": + software = "nf-core/cutandrun" with open(version_file) as fin: version = fin.read().strip() results[software] = version # Dump to YAML -print (''' +print( + """ id: 'software_versions' -section_name: 'nf-core/rnaseq Software Versions' +section_name: 'nf-core/cutandrun Software Versions' section_href: 'https://github.com/nf-core/cutandrun' plot_type: 'html' description: 'are collected at run time from the software output.' data: |
    -''') -for k,v in sorted(results.items()): - print("
    {}
    {}
    ".format(k,v)) -print ("
    ") +""" +) +for k, v in sorted(results.items()): + print("
    {}
    {}
    ".format(k, v)) +print(" ") -# Write out tsv file: -with open('software_versions.tsv', 'w') as f: - for k,v in sorted(results.items()): - f.write("{}\t{}\n".format(k,v)) +# Write out as tsv file: +with open("software_versions.tsv", "w") as f: + for k, v in sorted(results.items()): + f.write("{}\t{}\n".format(k, v)) From 5faba06192905de6841c6401a677fb82a30eaeaf Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:50:00 +0100 Subject: [PATCH 494/675] Updated multqc config to template --- assets/multiqc_config.yaml | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index 1f262584..222b3c62 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -2,34 +2,17 @@ report_comment: > This report has been generated by the nf-core/cutandrun analysis pipeline. For information about how to interpret these results, please see the documentation. +report_section_order: + software_versions: + order: -1000 + nf-core-cutandrun-summary: + order: -1001 + +export_plots: true report_header_info: - Contact E-mail: "chris.cheshire@crick.ac.uk" - Application Type: "CUT&RUN" - - Project Type: "Application" - # - Sequencing Platform: "HiSeq 2500 High Output V4" - # - Sequencing Setup: "2x50" - -# show_analysis_paths: True -# show_analysis_time: True - -# show_hide_buttons: -# - Read Group 1 -# - Read Group 2 -# - Controls -# - Conditions -# show_hide_mode: -# - show -# - show -# - show -# - show -# show_hide_patterns: -# - _r1 -# - _r2 -# - igg_ -# - ["h3k4me3_", "h3k27me3_"] - -# export_plots: true # Run only these modules run_modules: From ee858ba0400da06766e41f6c76113114b3ead7be Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:58:34 +0100 Subject: [PATCH 495/675] Updated modules.json --- modules.json | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 413ade64..b735dc52 100644 --- a/modules.json +++ b/modules.json @@ -9,24 +9,60 @@ "bedtools/merge": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, - "bowtie2/build": { + "bowtie2/align": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "bowtie2/build": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, "cat/fastq": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "deeptools/computematrix": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, + "deeptools/plotheatmap": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, "fastqc": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, "gunzip": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "picard/markduplicates": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, + "samtools/flagstat": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, + "samtools/idxstats": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, + "samtools/index": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, + "samtools/sort": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, + "samtools/stats": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, + "samtools/view": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, "seacr/callpeak": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "trimgalore": { + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + }, "ucsc/bedclip": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "ucsc/bedgraphtobigwig": { + "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + }, "untar": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" } From 5cb60809c04678556c1844b223813c8b75b137f8 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:58:45 +0100 Subject: [PATCH 496/675] Updated bowtie2 align --- modules/nf-core/modules/bowtie2/align/main.nf | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/nf-core/modules/bowtie2/align/main.nf b/modules/nf-core/modules/bowtie2/align/main.nf index 1ac8e973..d43d479d 100644 --- a/modules/nf-core/modules/bowtie2/align/main.nf +++ b/modules/nf-core/modules/bowtie2/align/main.nf @@ -29,8 +29,9 @@ process BOWTIE2_ALIGN { tuple val(meta), path('*fastq.gz'), optional:true, emit: fastq script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def split_cpus = Math.floor(task.cpus/2) + def software = getSoftwareName(task.process) + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { def unaligned = params.save_unaligned ? "--un-gz ${prefix}.unmapped.fastq.gz" : '' """ @@ -38,11 +39,11 @@ process BOWTIE2_ALIGN { bowtie2 \\ -x \$INDEX \\ -U $reads \\ - --threads $task.cpus \\ + --threads ${split_cpus} \\ $unaligned \\ $options.args \\ 2> ${prefix}.bowtie2.log \\ - | samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - + | samtools view -@ ${split_cpus} $options.args2 -bhS -o ${prefix}.bam - echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//' > ${software}.version.txt """ @@ -54,11 +55,11 @@ process BOWTIE2_ALIGN { -x \$INDEX \\ -1 ${reads[0]} \\ -2 ${reads[1]} \\ - --threads $task.cpus \\ + --threads ${split_cpus} \\ $unaligned \\ $options.args \\ 2> ${prefix}.bowtie2.log \\ - | samtools view -@ $task.cpus $options.args2 -bhS -o ${prefix}.bam - + | samtools view -@ ${split_cpus} $options.args2 -bhS -o ${prefix}.bam - if [ -f ${prefix}.unmapped.fastq.1.gz ]; then mv ${prefix}.unmapped.fastq.1.gz ${prefix}.unmapped_1.fastq.gz From 03ae3773618daee3ff44718e4617263cefacec13 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 21:59:00 +0100 Subject: [PATCH 497/675] Updated bowtie2 build --- modules/nf-core/modules/bowtie2/build/main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/nf-core/modules/bowtie2/build/main.nf b/modules/nf-core/modules/bowtie2/build/main.nf index 42ff1d20..442fed18 100644 --- a/modules/nf-core/modules/bowtie2/build/main.nf +++ b/modules/nf-core/modules/bowtie2/build/main.nf @@ -11,11 +11,11 @@ process BOWTIE2_BUILD { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'index', meta:[:], publish_by_meta:[]) } - conda (params.enable_conda ? 'bioconda::bowtie2=2.4.2' : null) + conda (params.enable_conda ? 'bioconda::bowtie2=2.4.4' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container 'https://depot.galaxyproject.org/singularity/bowtie2:2.4.2--py38h1c8e9b9_1' + container 'https://depot.galaxyproject.org/singularity/bowtie2:2.4.4--py39hbb4e92a_0' } else { - container 'quay.io/biocontainers/bowtie2:2.4.2--py38h1c8e9b9_1' + container 'quay.io/biocontainers/bowtie2:2.4.4--py36hd4290be_0' } input: From 42efc361d70f37e64075e4c99b120820046c9b69 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:00:00 +0100 Subject: [PATCH 498/675] updated deeptools compute matrix --- .../deeptools/computematrix/functions.nf | 32 +++++++++---------- .../modules/deeptools/computematrix/main.nf | 6 ++-- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/modules/nf-core/modules/deeptools/computematrix/functions.nf b/modules/nf-core/modules/deeptools/computematrix/functions.nf index 9d0137e3..da9da093 100644 --- a/modules/nf-core/modules/deeptools/computematrix/functions.nf +++ b/modules/nf-core/modules/deeptools/computematrix/functions.nf @@ -1,19 +1,17 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] options.args = args.args ?: '' @@ -26,18 +24,18 @@ def initOptions(Map args) { return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { def ioptions = initOptions(args.options) diff --git a/modules/nf-core/modules/deeptools/computematrix/main.nf b/modules/nf-core/modules/deeptools/computematrix/main.nf index bee16d3c..739e7cc1 100644 --- a/modules/nf-core/modules/deeptools/computematrix/main.nf +++ b/modules/nf-core/modules/deeptools/computematrix/main.nf @@ -11,11 +11,11 @@ process DEEPTOOLS_COMPUTEMATRIX { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) + conda (params.enable_conda ? 'bioconda::deeptools=3.5.1' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/deeptools:3.5.0--py_0" + container "https://depot.galaxyproject.org/singularity/deeptools:3.5.1--py_0" } else { - container "quay.io/biocontainers/deeptools:3.5.0--py_0" + container "quay.io/biocontainers/deeptools:3.5.1--py_0" } input: From 8985a20673f169f94062042a89d1658bd0ea3bae Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:00:40 +0100 Subject: [PATCH 499/675] Updated deeptools plot heatmap --- .../deeptools/plotheatmap/functions.nf | 32 +++++++++---------- .../modules/deeptools/plotheatmap/main.nf | 6 ++-- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/modules/nf-core/modules/deeptools/plotheatmap/functions.nf b/modules/nf-core/modules/deeptools/plotheatmap/functions.nf index 9d0137e3..da9da093 100644 --- a/modules/nf-core/modules/deeptools/plotheatmap/functions.nf +++ b/modules/nf-core/modules/deeptools/plotheatmap/functions.nf @@ -1,19 +1,17 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] options.args = args.args ?: '' @@ -26,18 +24,18 @@ def initOptions(Map args) { return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { def ioptions = initOptions(args.options) diff --git a/modules/nf-core/modules/deeptools/plotheatmap/main.nf b/modules/nf-core/modules/deeptools/plotheatmap/main.nf index 552dc117..8e25d96f 100644 --- a/modules/nf-core/modules/deeptools/plotheatmap/main.nf +++ b/modules/nf-core/modules/deeptools/plotheatmap/main.nf @@ -11,11 +11,11 @@ process DEEPTOOLS_PLOTHEATMAP { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::deeptools=3.5.0" : null) + conda (params.enable_conda ? 'bioconda::deeptools=3.5.1' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/deeptools:3.5.0--py_0" + container "https://depot.galaxyproject.org/singularity/deeptools:3.5.1--py_0" } else { - container "quay.io/biocontainers/deeptools:3.5.0--py_0" + container "quay.io/biocontainers/deeptools:3.5.1--py_0" } input: From dc45476f6284c4f65cd49cdc2296be23958b5f20 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:01:27 +0100 Subject: [PATCH 500/675] Updated picard --- .../picard/markduplicates/functions.nf | 65 +++++++++++-------- .../modules/picard/markduplicates/main.nf | 10 +-- .../modules/picard/markduplicates/meta.yml | 21 ------ 3 files changed, 42 insertions(+), 54 deletions(-) diff --git a/modules/nf-core/modules/picard/markduplicates/functions.nf b/modules/nf-core/modules/picard/markduplicates/functions.nf index d25eea86..da9da093 100644 --- a/modules/nf-core/modules/picard/markduplicates/functions.nf +++ b/modules/nf-core/modules/picard/markduplicates/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 958f4502..d20014bf 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -2,20 +2,20 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process PICARD_MARKDUPLICATES { tag "$meta.id" label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::picard=2.23.9" : null) + conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/picard:2.23.9--0" + container "https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0" } else { - container "quay.io/biocontainers/picard:2.23.9--0" + container "quay.io/biocontainers/picard:2.25.7--hdfd78af_0" } input: diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml index d9d8619a..6420ce9a 100644 --- a/modules/nf-core/modules/picard/markduplicates/meta.yml +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -14,27 +14,6 @@ tools: data and formats such as SAM/BAM/CRAM and VCF. homepage: https://broadinstitute.github.io/picard/ documentation: https://broadinstitute.github.io/picard/ -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. input: - meta: type: map From f5afd78ef49bf708861eaa95e4d03b3b0f4189ba Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:02:17 +0100 Subject: [PATCH 501/675] Updating samtools flagstats --- .../modules/samtools/flagstat/functions.nf | 65 +++++++++++-------- .../nf-core/modules/samtools/flagstat/main.nf | 12 ++-- .../modules/samtools/flagstat/meta.yml | 21 ------ 3 files changed, 44 insertions(+), 54 deletions(-) diff --git a/modules/nf-core/modules/samtools/flagstat/functions.nf b/modules/nf-core/modules/samtools/flagstat/functions.nf index d25eea86..da9da093 100644 --- a/modules/nf-core/modules/samtools/flagstat/functions.nf +++ b/modules/nf-core/modules/samtools/flagstat/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/nf-core/modules/samtools/flagstat/main.nf b/modules/nf-core/modules/samtools/flagstat/main.nf index 9b663ee7..d4852c66 100644 --- a/modules/nf-core/modules/samtools/flagstat/main.nf +++ b/modules/nf-core/modules/samtools/flagstat/main.nf @@ -1,19 +1,21 @@ // Import generic module functions -include { saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] +options = initOptions(params.options) process SAMTOOLS_FLAGSTAT { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: diff --git a/modules/nf-core/modules/samtools/flagstat/meta.yml b/modules/nf-core/modules/samtools/flagstat/meta.yml index a140c795..8414bf54 100644 --- a/modules/nf-core/modules/samtools/flagstat/meta.yml +++ b/modules/nf-core/modules/samtools/flagstat/meta.yml @@ -16,27 +16,6 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. input: - meta: type: map From 049a99ce20dc6c75363512a04a724b9d181c7723 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:03:04 +0100 Subject: [PATCH 502/675] Update samtools idx stats --- .../modules/samtools/idxstats/functions.nf | 65 +++++++++++-------- .../nf-core/modules/samtools/idxstats/main.nf | 12 ++-- .../modules/samtools/idxstats/meta.yml | 21 ------ 3 files changed, 44 insertions(+), 54 deletions(-) diff --git a/modules/nf-core/modules/samtools/idxstats/functions.nf b/modules/nf-core/modules/samtools/idxstats/functions.nf index d25eea86..da9da093 100644 --- a/modules/nf-core/modules/samtools/idxstats/functions.nf +++ b/modules/nf-core/modules/samtools/idxstats/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/nf-core/modules/samtools/idxstats/main.nf b/modules/nf-core/modules/samtools/idxstats/main.nf index 26ff4075..14a07cfb 100644 --- a/modules/nf-core/modules/samtools/idxstats/main.nf +++ b/modules/nf-core/modules/samtools/idxstats/main.nf @@ -1,19 +1,21 @@ // Import generic module functions -include { saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] +options = initOptions(params.options) process SAMTOOLS_IDXSTATS { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: diff --git a/modules/nf-core/modules/samtools/idxstats/meta.yml b/modules/nf-core/modules/samtools/idxstats/meta.yml index 6ff30433..530d0772 100644 --- a/modules/nf-core/modules/samtools/idxstats/meta.yml +++ b/modules/nf-core/modules/samtools/idxstats/meta.yml @@ -17,27 +17,6 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. input: - meta: type: map From b528b05749aa478e753e449a1ce22d2942514e69 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:03:44 +0100 Subject: [PATCH 503/675] Updated samtools index --- .../modules/samtools/index/functions.nf | 65 +++++++++++-------- .../nf-core/modules/samtools/index/main.nf | 17 +++-- .../nf-core/modules/samtools/index/meta.yml | 25 ++----- 3 files changed, 51 insertions(+), 56 deletions(-) diff --git a/modules/nf-core/modules/samtools/index/functions.nf b/modules/nf-core/modules/samtools/index/functions.nf index d25eea86..da9da093 100644 --- a/modules/nf-core/modules/samtools/index/functions.nf +++ b/modules/nf-core/modules/samtools/index/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/nf-core/modules/samtools/index/main.nf b/modules/nf-core/modules/samtools/index/main.nf index 5dd631da..e1966fb3 100644 --- a/modules/nf-core/modules/samtools/index/main.nf +++ b/modules/nf-core/modules/samtools/index/main.nf @@ -1,32 +1,35 @@ // Import generic module functions -include { saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] +options = initOptions(params.options) process SAMTOOLS_INDEX { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: tuple val(meta), path(bam) output: - tuple val(meta), path("*.bai"), emit: bai + tuple val(meta), path("*.bai"), optional:true, emit: bai + tuple val(meta), path("*.csi"), optional:true, emit: csi path "*.version.txt" , emit: version script: def software = getSoftwareName(task.process) """ - samtools index $bam + samtools index $options.args $bam echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' > ${software}.version.txt """ } diff --git a/modules/nf-core/modules/samtools/index/meta.yml b/modules/nf-core/modules/samtools/index/meta.yml index 089a83be..5d076e3b 100644 --- a/modules/nf-core/modules/samtools/index/meta.yml +++ b/modules/nf-core/modules/samtools/index/meta.yml @@ -14,27 +14,6 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. input: - meta: type: map @@ -55,6 +34,10 @@ output: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" + - csi: + type: file + description: CSI index file + pattern: "*.{csi}" - version: type: file description: File containing software version From fa816e1bac2744579db383bf4485af151a1ce2b7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:04:08 +0100 Subject: [PATCH 504/675] Update samtools sort --- .../modules/samtools/sort/functions.nf | 65 +++++++++++-------- modules/nf-core/modules/samtools/sort/main.nf | 10 +-- .../nf-core/modules/samtools/sort/meta.yml | 21 ------ 3 files changed, 42 insertions(+), 54 deletions(-) diff --git a/modules/nf-core/modules/samtools/sort/functions.nf b/modules/nf-core/modules/samtools/sort/functions.nf index d25eea86..da9da093 100644 --- a/modules/nf-core/modules/samtools/sort/functions.nf +++ b/modules/nf-core/modules/samtools/sort/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/nf-core/modules/samtools/sort/main.nf b/modules/nf-core/modules/samtools/sort/main.nf index 2b95b1d5..0a6b7048 100644 --- a/modules/nf-core/modules/samtools/sort/main.nf +++ b/modules/nf-core/modules/samtools/sort/main.nf @@ -2,20 +2,20 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) process SAMTOOLS_SORT { tag "$meta.id" label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: diff --git a/modules/nf-core/modules/samtools/sort/meta.yml b/modules/nf-core/modules/samtools/sort/meta.yml index d87bf858..704e8c1f 100644 --- a/modules/nf-core/modules/samtools/sort/meta.yml +++ b/modules/nf-core/modules/samtools/sort/meta.yml @@ -14,27 +14,6 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. input: - meta: type: map From 52e030f1eca443f2268a6c9813e05ab23fe461e6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:04:33 +0100 Subject: [PATCH 505/675] Updated samtools stats --- .../modules/samtools/stats/functions.nf | 65 +++++++++++-------- .../nf-core/modules/samtools/stats/main.nf | 12 ++-- .../nf-core/modules/samtools/stats/meta.yml | 21 ------ 3 files changed, 44 insertions(+), 54 deletions(-) diff --git a/modules/nf-core/modules/samtools/stats/functions.nf b/modules/nf-core/modules/samtools/stats/functions.nf index d25eea86..da9da093 100644 --- a/modules/nf-core/modules/samtools/stats/functions.nf +++ b/modules/nf-core/modules/samtools/stats/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/nf-core/modules/samtools/stats/main.nf b/modules/nf-core/modules/samtools/stats/main.nf index d8d1d020..8c72d725 100644 --- a/modules/nf-core/modules/samtools/stats/main.nf +++ b/modules/nf-core/modules/samtools/stats/main.nf @@ -1,19 +1,21 @@ // Import generic module functions -include { saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] +options = initOptions(params.options) process SAMTOOLS_STATS { tag "$meta.id" + label 'process_low' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: diff --git a/modules/nf-core/modules/samtools/stats/meta.yml b/modules/nf-core/modules/samtools/stats/meta.yml index b907df92..b549ff5c 100644 --- a/modules/nf-core/modules/samtools/stats/meta.yml +++ b/modules/nf-core/modules/samtools/stats/meta.yml @@ -15,27 +15,6 @@ tools: homepage: http://www.htslib.org/ documentation: hhttp://www.htslib.org/doc/samtools.html doi: 10.1093/bioinformatics/btp352 -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. input: - meta: type: map From 446f5776c8f00c67f2c3fa0c0d5d9d236e9b259c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:04:53 +0100 Subject: [PATCH 506/675] Update samtools view --- modules/nf-core/modules/samtools/view/main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/nf-core/modules/samtools/view/main.nf b/modules/nf-core/modules/samtools/view/main.nf index d428e447..2ca57032 100644 --- a/modules/nf-core/modules/samtools/view/main.nf +++ b/modules/nf-core/modules/samtools/view/main.nf @@ -11,11 +11,11 @@ process SAMTOOLS_VIEW { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::samtools=1.10" : null) + conda (params.enable_conda ? 'bioconda::samtools=1.13' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/samtools:1.10--h9402c20_2" + container "https://depot.galaxyproject.org/singularity/samtools:1.13--h8c37831_0" } else { - container "quay.io/biocontainers/samtools:1.10--h9402c20_2" + container "quay.io/biocontainers/samtools:1.13--h8c37831_0" } input: From a56f822826056d4515106f83023e57d2f7a4a076 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:10:17 +0100 Subject: [PATCH 507/675] Update trimgalore --- .../nf-core/modules/trimgalore/functions.nf | 127 ++++++++++-------- modules/nf-core/modules/trimgalore/main.nf | 37 ++--- modules/nf-core/modules/trimgalore/meta.yml | 41 ------ 3 files changed, 80 insertions(+), 125 deletions(-) diff --git a/modules/nf-core/modules/trimgalore/functions.nf b/modules/nf-core/modules/trimgalore/functions.nf index b3ac3801..da9da093 100644 --- a/modules/nf-core/modules/trimgalore/functions.nf +++ b/modules/nf-core/modules/trimgalore/functions.nf @@ -1,59 +1,68 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/nf-core/modules/trimgalore/main.nf b/modules/nf-core/modules/trimgalore/main.nf index f393cf9e..3c16d66f 100644 --- a/modules/nf-core/modules/trimgalore/main.nf +++ b/modules/nf-core/modules/trimgalore/main.nf @@ -11,20 +11,20 @@ process TRIMGALORE { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::trim-galore=0.6.6" : null) + conda (params.enable_conda ? 'bioconda::trim-galore=0.6.7' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/trim-galore:0.6.6--0" + container "https://depot.galaxyproject.org/singularity/trim-galore:0.6.7--hdfd78af_0" } else { - container "quay.io/biocontainers/trim-galore:0.6.6--0" + container "quay.io/biocontainers/trim-galore:0.6.7--hdfd78af_0" } input: tuple val(meta), path(reads) output: - tuple val(meta), path("*trimmed.fastq.gz") , emit: reads - tuple val(meta), path("*report.txt") , emit: log - path "*.version.txt" , emit: version + tuple val(meta), path("*.fq.gz") , emit: reads + tuple val(meta), path("*report.txt"), emit: log + path "*.version.txt" , emit: version tuple val(meta), path("*.html"), emit: html optional true tuple val(meta), path("*.zip") , emit: zip optional true @@ -49,11 +49,7 @@ process TRIMGALORE { // Added soft-links to original fastqs for consistent naming in MultiQC def software = getSoftwareName(task.process) - def suffix = options.suffix ? "${options.suffix}.trimmed" : ".trimmed" - def prefix_1 = "${meta.id}_1${suffix}" - def prefix_2 = "${meta.id}_2${suffix}" - def prefix = "${meta.id}${suffix}" - + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz @@ -68,8 +64,8 @@ process TRIMGALORE { """ } else { """ - [ ! -f ${meta.id}_1.fastq.gz ] && ln -s ${reads[0]} ${meta.id}_1.fastq.gz - [ ! -f ${meta.id}_2.fastq.gz ] && ln -s ${reads[1]} ${meta.id}_2.fastq.gz + [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz + [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz trim_galore \\ $options.args \\ --cores $cores \\ @@ -79,18 +75,9 @@ process TRIMGALORE { $c_r2 \\ $tpc_r1 \\ $tpc_r2 \\ - ${meta.id}_1.fastq.gz \\ - ${meta.id}_2.fastq.gz + ${prefix}_1.fastq.gz \\ + ${prefix}_2.fastq.gz echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//' > ${software}.version.txt - - mv ${meta.id}_1_val_1.fq.gz ${prefix_1}.fastq.gz - mv ${meta.id}_2_val_2.fq.gz ${prefix_2}.fastq.gz - - [ ! -f ${meta.id}_1_val_1_fastqc.html ] || mv ${meta.id}_1_val_1_fastqc.html ${meta.id}_1_fastqc${suffix}.html - [ ! -f ${meta.id}_2_val_2_fastqc.html ] || mv ${meta.id}_2_val_2_fastqc.html ${meta.id}_2_fastqc${suffix}.html - - [ ! -f ${meta.id}_1_val_1_fastqc.zip ] || mv ${meta.id}_1_val_1_fastqc.zip ${meta.id}_1_fastqc${suffix}.zip - [ ! -f ${meta.id}_2_val_2_fastqc.zip ] || mv ${meta.id}_2_val_2_fastqc.zip ${meta.id}_2_fastqc${suffix}.zip """ } -} \ No newline at end of file +} diff --git a/modules/nf-core/modules/trimgalore/meta.yml b/modules/nf-core/modules/trimgalore/meta.yml index 86ba5cd4..73538707 100644 --- a/modules/nf-core/modules/trimgalore/meta.yml +++ b/modules/nf-core/modules/trimgalore/meta.yml @@ -13,47 +13,6 @@ tools: MspI-digested RRBS-type (Reduced Representation Bisufite-Seq) libraries. homepage: https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/ documentation: https://github.com/FelixKrueger/TrimGalore/blob/master/Docs/Trim_Galore_User_Guide.md -params: - - outdir: - type: string - description: | - The pipeline's output directory. By default, the module will - output files into `$params.outdir/` - - publish_dir_mode: - type: string - description: | - Value for the Nextflow `publishDir` mode parameter. - Available: symlink, rellink, link, copy, copyNoFollow, move. - - enable_conda: - type: boolean - description: | - Run the module with Conda using the software specified - via the `conda` directive - - singularity_pull_docker_container: - type: boolean - description: | - Instead of directly downloading Singularity images for use with Singularity, - force the workflow to pull and convert Docker containers instead. - - clip_r1: - type: integer - description: | - Instructs Trim Galore to remove bp from the 5' end of read 1 - (or single-end reads) - - clip_r2: - type: integer - description: | - Instructs Trim Galore to remove bp from the 5' end of read 2 - (paired-end reads only) - - three_prime_clip_r1: - type: integer - description: | - Instructs Trim Galore to remove bp from the 3' end of read 1 - AFTER adapter/quality trimming has been performed - - three_prime_clip_r2: - type: integer - description: | - Instructs Trim Galore to re move bp from the 3' end of read 2 - AFTER adapter/quality trimming has been performed input: - meta: type: map From be7b4318216fec3fc498d1f7b0d4de0173b23b58 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Sun, 8 Aug 2021 22:12:50 +0100 Subject: [PATCH 508/675] Updated bedgraphtobigwig --- .../ucsc/bedgraphtobigwig/functions.nf | 65 +++++++++++-------- .../modules/ucsc/bedgraphtobigwig/main.nf | 4 +- .../modules/ucsc/bedgraphtobigwig/meta.yml | 46 +++++++++++++ 3 files changed, 85 insertions(+), 30 deletions(-) create mode 100644 modules/nf-core/modules/ucsc/bedgraphtobigwig/meta.yml diff --git a/modules/nf-core/modules/ucsc/bedgraphtobigwig/functions.nf b/modules/nf-core/modules/ucsc/bedgraphtobigwig/functions.nf index d25eea86..da9da093 100644 --- a/modules/nf-core/modules/ucsc/bedgraphtobigwig/functions.nf +++ b/modules/nf-core/modules/ucsc/bedgraphtobigwig/functions.nf @@ -1,48 +1,57 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ +// +// Utility functions used in nf-core DSL2 module files +// -/* - * Extract name of software tool from process name using $task.process - */ +// +// Extract name of software tool from process name using $task.process +// def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// def initOptions(Map args) { def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' return options } -/* - * Tidy up and join elements of a list to return a path string - */ +// +// Tidy up and join elements of a list to return a path string +// def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes return paths.join('/') } -/* - * Function to save/publish module results - */ +// +// Function to save/publish module results +// def saveFiles(Map args) { if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) + def ioptions = initOptions(args.options) def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } } if (ioptions.publish_files instanceof Map) { for (ext in ioptions.publish_files) { diff --git a/modules/nf-core/modules/ucsc/bedgraphtobigwig/main.nf b/modules/nf-core/modules/ucsc/bedgraphtobigwig/main.nf index 10300280..e5fe3b7f 100644 --- a/modules/nf-core/modules/ucsc/bedgraphtobigwig/main.nf +++ b/modules/nf-core/modules/ucsc/bedgraphtobigwig/main.nf @@ -2,7 +2,7 @@ include { initOptions; saveFiles; getSoftwareName } from './functions' params.options = [:] -def options = initOptions(params.options) +options = initOptions(params.options) def VERSION = '377' @@ -11,7 +11,7 @@ process UCSC_BEDGRAPHTOBIGWIG { label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } conda (params.enable_conda ? "bioconda::ucsc-bedgraphtobigwig=377" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { diff --git a/modules/nf-core/modules/ucsc/bedgraphtobigwig/meta.yml b/modules/nf-core/modules/ucsc/bedgraphtobigwig/meta.yml new file mode 100644 index 00000000..31365f48 --- /dev/null +++ b/modules/nf-core/modules/ucsc/bedgraphtobigwig/meta.yml @@ -0,0 +1,46 @@ +name: ucsc_bedgraphtobigwig +description: Convert a bedGraph file to bigWig format. +keywords: + - bedgraph + - bigwig +tools: + - ucsc: + description: Convert a bedGraph file to bigWig format. + homepage: None + documentation: None + tool_dev_url: None + doi: "" + licence: ["varies; see http://genome.ucsc.edu/license"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bedgraph: + type: file + description: bedGraph file + pattern: "*.{bedGraph}" + - sizes: + type: file + description: chromosome sizes file + pattern: "*.{sizes}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" + - bigwig: + type: file + description: bigWig file + pattern: "*.{bigWig}" + +authors: + - "@drpatelh" From 9b7c20343be53b68a7dda1380ca6f6a00662f96d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 08:46:24 +0100 Subject: [PATCH 509/675] Updated fastqc --- modules/nf-core/modules/fastqc/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nf-core/modules/fastqc/main.nf b/modules/nf-core/modules/fastqc/main.nf index 7ce76adf..39c327b2 100644 --- a/modules/nf-core/modules/fastqc/main.nf +++ b/modules/nf-core/modules/fastqc/main.nf @@ -29,7 +29,7 @@ process FASTQC { script: // Add soft-links to original FastQs for consistent naming in pipeline def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}.${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz From 4c2e98d1f078c69d5413bed0f152df027728a5ec Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:07:28 +0100 Subject: [PATCH 510/675] Added unit testing to CI --- .github/workflows/ci.yml | 89 +++++++++++++++++++++- tests/test_verify_output_save_merged.yml | 1 + tests/test_verify_output_save_ref.yml | 1 + tests/test_verify_output_save_trimmed.yml | 1 + tests/test_verify_output_skip_fastqc.yml | 1 + tests/test_verify_output_skip_trimming.yml | 1 + 6 files changed, 93 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 316aa9eb..277fc4e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,6 +9,9 @@ on: types: [published] jobs: + ############################## + ### SMALL INTEGRATION TEST ### + ############################## test: name: Run standard pipeline test # Only run on push if this is the nf-core dev branch (merged PRs) @@ -33,6 +36,9 @@ jobs: - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile docker,test + ############################## + ### LARGE INTEGRATION TEST ### + ############################## test_full_small: name: Run extended pipeline test # Only run on push if this is the nf-core dev branch (merged PRs) @@ -56,4 +62,85 @@ jobs: - name: Run pipeline with test data run: | - nextflow run ${GITHUB_WORKSPACE} -profile docker,test_full_small \ No newline at end of file + nextflow run ${GITHUB_WORKSPACE} -profile docker,test_full_small + ############################## + ### UNIT TESTS ### + ############################## + unit_tests: + name: ${{ matrix.nxf_version }} ${{ matrix.tags }} + if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/cutandrun') }} + runs-on: ubuntu-20.04 + env: + NXF_ANSI_LOG: false + strategy: + matrix: + nxf_version: ["21.04.0", ''] + tags: ["samplesheet", "verify_output/input", "verify_output/align", "verify_output/peak_calling", "verify_output/reporting", verify_output/save", "verify_output/skip"] + steps: + - uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.x" + + - uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.x" + + - name: Install Python dependencies + run: python -m pip install --upgrade pip pytest-workflow + + - uses: actions/cache@v2 + with: + path: /usr/local/bin/nextflow + key: ${{ runner.os }}-nextflow-${{ matrix.nxf_version }} + restore-keys: | + ${{ runner.os }}-nextflow- + - name: Install Nextflow + env: + NXF_VER: ${{ matrix.nxf_version }} + CAPSULE_LOG: none + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + - name: Set up Singularity + if: matrix.profile == 'singularity' + uses: eWaterCycle/setup-singularity@v5 + with: + singularity-version: 3.7.1 + + - name: Setup miniconda + if: matrix.profile == 'conda' + uses: conda-incubator/setup-miniconda@v2 + with: + auto-update-conda: true + channels: conda-forge,bioconda,defaults + python-version: ${{ matrix.python-version }} + + - name: Conda clean + if: matrix.profile == 'conda' + run: conda clean -a + + # Test the module + - name: Run pytest-workflow + # only use one thread for pytest-workflow to avoid race condition on conda cache. + run: TMPDIR=~ PROFILE=${{ matrix.profile }} pytest --tag ${{ matrix.tags }} --symlink --kwdof + + - name: Upload logs on failure + if: failure() + uses: actions/upload-artifact@v2 + with: + name: logs-${{ matrix.tags }}-${{ matrix.profile }}-${{ matrix.nxf_version }} + path: | + /home/runner/pytest_workflow_*/*/.nextflow.log + /home/runner/pytest_workflow_*/*/log.out + /home/runner/pytest_workflow_*/*/log.err + /home/runner/pytest_workflow_*/*/work \ No newline at end of file diff --git a/tests/test_verify_output_save_merged.yml b/tests/test_verify_output_save_merged.yml index b41562f4..46f7ca35 100644 --- a/tests/test_verify_output_save_merged.yml +++ b/tests/test_verify_output_save_merged.yml @@ -2,6 +2,7 @@ command: nextflow run main.nf -profile docker,test_tech_reps --save_merged_fastq true --only_preqc true tags: - verify_output + - verify_output/save - verify_output/save_merged files: - path: results/01_prealign/merged_fastq/h3k27me3_R1_1.merged.fastq.gz diff --git a/tests/test_verify_output_save_ref.yml b/tests/test_verify_output_save_ref.yml index cbfbf400..40b09a66 100644 --- a/tests/test_verify_output_save_ref.yml +++ b/tests/test_verify_output_save_ref.yml @@ -2,6 +2,7 @@ command: nextflow run main.nf -profile docker,test --save_reference true --only_genome true tags: - verify_output + - verify_output/save - verify_output/save_ref files: - path: results/00_genome/target/hg38-chr20-genes.bed diff --git a/tests/test_verify_output_save_trimmed.yml b/tests/test_verify_output_save_trimmed.yml index a2944572..743b6896 100644 --- a/tests/test_verify_output_save_trimmed.yml +++ b/tests/test_verify_output_save_trimmed.yml @@ -2,6 +2,7 @@ command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true tags: - verify_output + - verify_output/save - verify_output/save_trimmed files: - path: results/01_prealign/trimgalore/h3k27me3_R1_1.trimmed.fastq.gz \ No newline at end of file diff --git a/tests/test_verify_output_skip_fastqc.yml b/tests/test_verify_output_skip_fastqc.yml index 029427b2..1ad7440a 100644 --- a/tests/test_verify_output_skip_fastqc.yml +++ b/tests/test_verify_output_skip_fastqc.yml @@ -2,6 +2,7 @@ command: nextflow run main.nf -profile docker,test --only_preqc true --skip_fastqc true tags: - verify_output + - verify_output/skip - verify_output/skip_fastqc - verify_output/skip_fastqc/true files: diff --git a/tests/test_verify_output_skip_trimming.yml b/tests/test_verify_output_skip_trimming.yml index 8b12c326..5916937d 100644 --- a/tests/test_verify_output_skip_trimming.yml +++ b/tests/test_verify_output_skip_trimming.yml @@ -2,6 +2,7 @@ command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true --skip_trimming true tags: - verify_output + - verify_output/skip - verify_output/skip_trimming files: - path: results/01_prealign/trimgalore/h3k27me3_R1_1.trimmed.fastq.gz From 58592a544eb68dbc18202e6f86304db7102d7fa3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:10:00 +0100 Subject: [PATCH 511/675] Fixed CI syntax error --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 277fc4e0..1478a472 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,7 +75,7 @@ jobs: strategy: matrix: nxf_version: ["21.04.0", ''] - tags: ["samplesheet", "verify_output/input", "verify_output/align", "verify_output/peak_calling", "verify_output/reporting", verify_output/save", "verify_output/skip"] + tags: ["samplesheet", "verify_output/input", "verify_output/align", "verify_output/peak_calling", "verify_output/reporting", "verify_output/save", "verify_output/skip"] steps: - uses: actions/checkout@v2 From 5324ef0e5585e0aa8298f5d3b345e08b7173804b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:12:32 +0100 Subject: [PATCH 512/675] Removed dup header from markdown --- docs/output.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/output.md b/docs/output.md index 87f9c261..bcf37821 100644 --- a/docs/output.md +++ b/docs/output.md @@ -257,8 +257,6 @@ Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data a > **NB:** The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. -### MultiQC -
    Output files From 9875836646bcb795c95bffe00ed38c4ab2ea32de Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:15:55 +0100 Subject: [PATCH 513/675] Editor config whitespace fixes --- .github/workflows/ci.yml | 2 +- bin/lib/reports.py | 4 ++-- conf/modules.config | 4 ++-- subworkflows/nf-core/fastqc_trimgalore.nf | 4 ++-- workflows/cutandrun.nf | 28 +++++++++++------------ 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1478a472..b4d49f8c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -143,4 +143,4 @@ jobs: /home/runner/pytest_workflow_*/*/.nextflow.log /home/runner/pytest_workflow_*/*/log.out /home/runner/pytest_workflow_*/*/log.err - /home/runner/pytest_workflow_*/*/work \ No newline at end of file + /home/runner/pytest_workflow_*/*/work diff --git a/bin/lib/reports.py b/bin/lib/reports.py index d4a7fc7c..b2ff8513 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -421,7 +421,7 @@ def gen_plots_to_folder(self, output_path): # Save data to output folder for key in data: data[key].to_csv(os.path.join(abs_path, key + '.csv'), index=False) - + # Save plots to output folder for key in plots: plots[key].savefig(os.path.join(abs_path, key + '.png')) @@ -523,7 +523,7 @@ def duplication_summary(self): df_data['dedup_percent_duplication'] *= 100 df_data['unique_frag_num'] = df_data['dedup_read_pairs_examined'] * (1-df_data['dedup_percent_duplication']/100) - # Create plots array + # Create plots array figs = [] # Duplication rate diff --git a/conf/modules.config b/conf/modules.config index 0b5d0692..9f87dbc2 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -161,7 +161,7 @@ params { /* ======================================================================================== - CONSENSUS PEAKS + CONSENSUS PEAKS ======================================================================================== */ @@ -196,7 +196,7 @@ params { /* ======================================================================================== - REPORTING + REPORTING ======================================================================================== */ diff --git a/subworkflows/nf-core/fastqc_trimgalore.nf b/subworkflows/nf-core/fastqc_trimgalore.nf index 59e68a4b..a702f32f 100644 --- a/subworkflows/nf-core/fastqc_trimgalore.nf +++ b/subworkflows/nf-core/fastqc_trimgalore.nf @@ -30,8 +30,8 @@ workflow FASTQC_TRIMGALORE { trimgalore_version = Channel.empty() ch_output_reads = reads if (!skip_trimming) { - TRIMGALORE ( - reads + TRIMGALORE ( + reads ) ch_output_reads = TRIMGALORE.out.reads trim_html = TRIMGALORE.out.html diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index fa258784..2c32fc9c 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -424,7 +424,7 @@ workflow CUTANDRUN { ch_samtools_spikein_flagstat = Channel.empty() ch_samtools_spikein_idxstats = Channel.empty() if(run_alignment) { - + if (params.aligner == "bowtie2") { ALIGN_BOWTIE2 ( ch_trimmed_reads, @@ -696,8 +696,8 @@ workflow CUTANDRUN { /* * MODULE: Add sample identifier column to peak beds */ - AWK_NAME_PEAK_BED ( - ch_seacr_bed + AWK_NAME_PEAK_BED ( + ch_seacr_bed ) // EXAMPLE CHANNEL STRUCT: [[META], BED] //AWK_NAME_PEAK_BED.out.file | view @@ -720,8 +720,8 @@ workflow CUTANDRUN { /* * SUBWORKFLOW: Construct group consensus peaks */ - CONSENSUS_PEAKS_ALL ( - ch_seacr_bed_all + CONSENSUS_PEAKS_ALL ( + ch_seacr_bed_all ) // EXAMPLE CHANNEL STRUCT: [[META], BED] //CONSENSUS_PEAKS_ALL.out.bed | view @@ -745,19 +745,19 @@ workflow CUTANDRUN { * SUBWORKFLOW: Construct group consensus peaks * where there is more than 1 replicate in a group */ - CONSENSUS_PEAKS ( - ch_seacr_bed_group + CONSENSUS_PEAKS ( + ch_seacr_bed_group ) // EXAMPLE CHANNEL STRUCT: [[META], BED] //CONSENSUS_PEAKS.out.bed | view - /* - * SUBWORKFLOW: Calculate fragment bed from bams - * - Filter for mapped reads - * - Convert to bed file - * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp - * - Only extract the fragment related columns using cut - */ + /* + * SUBWORKFLOW: Calculate fragment bed from bams + * - Filter for mapped reads + * - Convert to bed file + * - Keep the read pairs that are on the same chromosome and fragment length less than 1000bp + * - Only extract the fragment related columns using cut + */ CALCULATE_FRAGMENTS ( ch_samtools_bam ) From d8c5d9194b49a81b707e299d453f65ccfc35d453 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:16:43 +0100 Subject: [PATCH 514/675] Yaml liniting fixes --- assets/multiqc_config.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index 222b3c62..d0119917 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -47,12 +47,6 @@ module_order: - picard - custom_content -report_section_order: - software_versions: - order: -1000 - nf-core-cutandrun-summary: - order: -1001 - # Don't show % Dups in the General Stats table (we have this from Picard) table_columns_visible: FastQC: From 2e6c9c53c520786f24637f33fa0dacefc71234a6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:38:15 +0100 Subject: [PATCH 515/675] Changed tagging system in pytest to remove forward slahes --- .github/workflows/ci.yml | 2 +- tests/test_samplesheet_check.yml | 30 +++++++++---------- tests/test_verify_output_align_intermed.yml | 4 +-- tests/test_verify_output_duplicates.yml | 18 +++++------ tests/test_verify_output_only_align.yml | 4 +-- tests/test_verify_output_only_input.yml | 4 +-- .../test_verify_output_only_peak_calling.yml | 4 +-- tests/test_verify_output_only_q_filter.yml | 4 +-- tests/test_verify_output_save_merged.yml | 4 +-- tests/test_verify_output_save_ref.yml | 4 +-- .../test_verify_output_save_spikein_align.yml | 4 +-- tests/test_verify_output_save_trimmed.yml | 4 +-- tests/test_verify_output_save_unaligned.yml | 4 +-- tests/test_verify_output_skip_fastqc.yml | 6 ++-- tests/test_verify_output_skip_reporting.yml | 4 +-- tests/test_verify_output_skip_trimming.yml | 4 +-- 16 files changed, 52 insertions(+), 52 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4d49f8c..f042f6d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,7 +75,7 @@ jobs: strategy: matrix: nxf_version: ["21.04.0", ''] - tags: ["samplesheet", "verify_output/input", "verify_output/align", "verify_output/peak_calling", "verify_output/reporting", "verify_output/save", "verify_output/skip"] + tags: ["samplesheet", "verify_output_input", "verify_output_align", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] steps: - uses: actions/checkout@v2 diff --git a/tests/test_samplesheet_check.yml b/tests/test_samplesheet_check.yml index 638b09ea..1da05401 100644 --- a/tests/test_samplesheet_check.yml +++ b/tests/test_samplesheet_check.yml @@ -2,15 +2,15 @@ command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/rep_id_start_1.csv tags: - samplesheet - - samplesheet/start_1 + - samplesheet_start_1 exit_code: 1 - name: test_samplesheet_check_noigg_pos command: nextflow run main.nf -profile docker,test --only_input true --igg_control false --input tests/data/samplesheets/no_igg.csv tags: - samplesheet - - samplesheet/no_igg - - samplesheet/no_igg/pos + - samplesheet_no_igg + - samplesheet_no_igg_pos files: - path: results/pipeline_info/samplesheet.valid.csv @@ -18,16 +18,16 @@ command: nextflow run main.nf -profile docker,test --only_input true --igg_control true --input tests/data/samplesheets/no_igg.csv tags: - samplesheet - - samplesheet/no_igg - - samplesheet/no_igg/neg + - samplesheet_no_igg + - samplesheet_no_igg_neg exit_code: 1 - name: test_samplesheet_check_1_1_pos command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg.csv tags: - samplesheet - - samplesheet/1_1 - - samplesheet/1_1/pos + - samplesheet_1_1 + - samplesheet_1_1_pos files: - path: results/pipeline_info/samplesheet.valid.csv @@ -35,31 +35,31 @@ command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_neg.csv tags: - samplesheet - - samplesheet/1_1 - - samplesheet/1_1/neg + - samplesheet_1_1 + - samplesheet_1_1_neg exit_code: 1 - name: test_samplesheet_check_1_2_group_match command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv tags: - samplesheet - - samplesheet/1_2 - - samplesheet/1_2/group_match + - samplesheet_1_2 + - samplesheet_1_2_group_match exit_code: 1 - name: test_samplesheet_check_2_2_group_match_tech_rep command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv tags: - samplesheet - - samplesheet/2_2 - - samplesheet/2_2/group_match_tech_rep + - samplesheet_2_2 + - samplesheet-2_2_group_match_tech_rep exit_code: 1 - name: test_samplesheet_check_multiple_sample_single_igg command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_single_igg.csv tags: - samplesheet - - samplesheet/M_1 + - samplesheet_M_1 files: - path: results/pipeline_info/samplesheet.valid.csv @@ -67,6 +67,6 @@ command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_multiple_igg.csv tags: - samplesheet - - samplesheet/M_M + - samplesheet_M_M files: - path: results/pipeline_info/samplesheet.valid.csv \ No newline at end of file diff --git a/tests/test_verify_output_align_intermed.yml b/tests/test_verify_output_align_intermed.yml index 7d7d9305..cdaad8ac 100644 --- a/tests/test_verify_output_align_intermed.yml +++ b/tests/test_verify_output_align_intermed.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --save_align_intermed true tags: - verify_output - - verify_output/align - - verify_output/align/intermed + - verify_output_align + - verify_output_align_intermed files: - path: results/02_alignment/bowtie2/target/intermed/align/h3k27me3_R1.target.sorted.bam - path: results/02_alignment/bowtie2/target/intermed/qfilter/h3k27me3_R1.target.filtered.bam diff --git a/tests/test_verify_output_duplicates.yml b/tests/test_verify_output_duplicates.yml index 35297929..35f22b2b 100644 --- a/tests/test_verify_output_duplicates.yml +++ b/tests/test_verify_output_duplicates.yml @@ -2,9 +2,9 @@ command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --skip_removeduplicates true tags: - verify_output - - verify_output/align - - verify_output/align/duplicates - - verify_output/align/duplicates/mark + - verify_output_align + - verify_output_align_duplicates + - verify_output_align_duplicates_mark files: - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam - path: results/02_alignment/bowtie2/target/markdup/igg_R1.target.markdup.bam @@ -17,9 +17,9 @@ command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --dedup_target_reads false tags: - verify_output - - verify_output/align - - verify_output/align/duplicates - - verify_output/align/duplicates/remove + - verify_output_align + - verify_output_align_duplicates + - verify_output_align_duplicates_remove files: - path: results/02_alignment/bowtie2/target/markdup/h3k27me3_R1.target.markdup.bam - path: results/02_alignment/bowtie2/target/dedup/igg_R1.target.dedup.bam @@ -34,9 +34,9 @@ command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --dedup_target_reads true tags: - verify_output - - verify_output/align - - verify_output/align/duplicates - - verify_output/align/duplicates/remove_target + - verify_output_align + - verify_output_align_duplicates + - verify_output_align_duplicates_remove_target files: - path: results/02_alignment/bowtie2/target/dedup/h3k27me3_R1.target.dedup.bam - path: results/02_alignment/bowtie2/target/dedup/igg_R1.target.dedup.bam diff --git a/tests/test_verify_output_only_align.yml b/tests/test_verify_output_only_align.yml index 361a0307..9f2c49d1 100644 --- a/tests/test_verify_output_only_align.yml +++ b/tests/test_verify_output_only_align.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true tags: - verify_output - - verify_output/align - - verify_output/align/only_align + - verify_output_align + - verify_output_align_only_align files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.sorted.bam - path: results/02_alignment/bowtie2/target/igg_R1.target.sorted.bam diff --git a/tests/test_verify_output_only_input.yml b/tests/test_verify_output_only_input.yml index 1c29d17a..463840cc 100644 --- a/tests/test_verify_output_only_input.yml +++ b/tests/test_verify_output_only_input.yml @@ -2,7 +2,7 @@ command: nextflow run main.nf -profile docker,test --only_input true tags: - verify_output - - verify_output/input - - verify_output/only_input + - verify_output_input + - verify_output_only_input files: - path: results/pipeline_info/samplesheet.valid.csv \ No newline at end of file diff --git a/tests/test_verify_output_only_peak_calling.yml b/tests/test_verify_output_only_peak_calling.yml index d2de1900..d38237f2 100644 --- a/tests/test_verify_output_only_peak_calling.yml +++ b/tests/test_verify_output_only_peak_calling.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true tags: - verify_output - - verify_output/peak_calling - - verify_output/peak_calling/only_peak_calling + - verify_output_peak_calling + - verify_output_peak_calling_only_peak_calling files: - path: results/03_peak_calling/01_bam_to_bedgraph/h3k27me3_R1.bedGraph - path: results/03_peak_calling/01_bam_to_bedgraph/igg_R1.bedGraph diff --git a/tests/test_verify_output_only_q_filter.yml b/tests/test_verify_output_only_q_filter.yml index fb78109d..73768732 100644 --- a/tests/test_verify_output_only_q_filter.yml +++ b/tests/test_verify_output_only_q_filter.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true minimum_alignment_q_score 10 --skip_markduplicates true --skip_removeduplicates true tags: - verify_output - - verify_output/align - - verify_output/align/only_q_filter + - verify_output_align + - verify_output_align_only_q_filter files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam diff --git a/tests/test_verify_output_save_merged.yml b/tests/test_verify_output_save_merged.yml index 46f7ca35..ea715bb6 100644 --- a/tests/test_verify_output_save_merged.yml +++ b/tests/test_verify_output_save_merged.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test_tech_reps --save_merged_fastq true --only_preqc true tags: - verify_output - - verify_output/save - - verify_output/save_merged + - verify_output_save + - verify_output_save_merged files: - path: results/01_prealign/merged_fastq/h3k27me3_R1_1.merged.fastq.gz - path: results/01_prealign/merged_fastq/h3k27me3_R1_2.merged.fastq.gz \ No newline at end of file diff --git a/tests/test_verify_output_save_ref.yml b/tests/test_verify_output_save_ref.yml index 40b09a66..41b31a22 100644 --- a/tests/test_verify_output_save_ref.yml +++ b/tests/test_verify_output_save_ref.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --save_reference true --only_genome true tags: - verify_output - - verify_output/save - - verify_output/save_ref + - verify_output_save + - verify_output_save_ref files: - path: results/00_genome/target/hg38-chr20-genes.bed - path: results/00_genome/target/hg38-chr20-genes.gtf diff --git a/tests/test_verify_output_save_spikein_align.yml b/tests/test_verify_output_save_spikein_align.yml index 93a91a9f..0623788b 100644 --- a/tests/test_verify_output_save_spikein_align.yml +++ b/tests/test_verify_output_save_spikein_align.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --only_alignment true --save_spikein_aligned true --skip_fastqc true tags: - verify_output - - verify_output/align - - verify_output/align/save_spikein_align + - verify_output_align + - verify_output_align_save_spikein_align files: - path: results/02_alignment/bowtie2/spikein/h3k27me3_R1.spikein.sorted.bam - path: results/02_alignment/bowtie2/spikein/igg_R1.spikein.sorted.bam diff --git a/tests/test_verify_output_save_trimmed.yml b/tests/test_verify_output_save_trimmed.yml index 743b6896..ea5a1da5 100644 --- a/tests/test_verify_output_save_trimmed.yml +++ b/tests/test_verify_output_save_trimmed.yml @@ -2,7 +2,7 @@ command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true tags: - verify_output - - verify_output/save - - verify_output/save_trimmed + - verify_output_save + - verify_output_save_trimmed files: - path: results/01_prealign/trimgalore/h3k27me3_R1_1.trimmed.fastq.gz \ No newline at end of file diff --git a/tests/test_verify_output_save_unaligned.yml b/tests/test_verify_output_save_unaligned.yml index fa651b5b..e7ee3010 100644 --- a/tests/test_verify_output_save_unaligned.yml +++ b/tests/test_verify_output_save_unaligned.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true --save_unaligned true tags: - verify_output - - verify_output/align - - verify_output/align/save_unaligned + - verify_output_align + - verify_output_align_save_unaligned files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.unmapped_1.fastq.gz - path: results/02_alignment/bowtie2/target/igg_R1.target.unmapped_2.fastq.gz diff --git a/tests/test_verify_output_skip_fastqc.yml b/tests/test_verify_output_skip_fastqc.yml index 1ad7440a..7dad0458 100644 --- a/tests/test_verify_output_skip_fastqc.yml +++ b/tests/test_verify_output_skip_fastqc.yml @@ -2,9 +2,9 @@ command: nextflow run main.nf -profile docker,test --only_preqc true --skip_fastqc true tags: - verify_output - - verify_output/skip - - verify_output/skip_fastqc - - verify_output/skip_fastqc/true + - verify_output_skip + - verify_output_skip_fastqc + - verify_output_skip_fastqc_true files: - path: results/01_prealign/pretrim_fastqc/h3k27me3_R1_1_fastqc.html should_exist: false diff --git a/tests/test_verify_output_skip_reporting.yml b/tests/test_verify_output_skip_reporting.yml index 3f9f6792..da2d5d06 100644 --- a/tests/test_verify_output_skip_reporting.yml +++ b/tests/test_verify_output_skip_reporting.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --skip_fastqc true --skip_reporting true tags: - verify_output - - verify_output/reporting - - verify_output/reporting/skip_reporting + - verify_output_reporting + - verify_output_reporting_skip_reporting files: - path: results/06_reporting/qc/merged_report.pdf should_exist: false diff --git a/tests/test_verify_output_skip_trimming.yml b/tests/test_verify_output_skip_trimming.yml index 5916937d..0d838783 100644 --- a/tests/test_verify_output_skip_trimming.yml +++ b/tests/test_verify_output_skip_trimming.yml @@ -2,8 +2,8 @@ command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true --skip_trimming true tags: - verify_output - - verify_output/skip - - verify_output/skip_trimming + - verify_output_skip + - verify_output_skip_trimming files: - path: results/01_prealign/trimgalore/h3k27me3_R1_1.trimmed.fastq.gz should_exist: false \ No newline at end of file From dd782879f9b749096b45087dae0ff69405ba4665 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:40:03 +0100 Subject: [PATCH 516/675] Updated CI --- .github/workflows/ci.yml | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f042f6d6..7e5f9ea8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,28 +111,8 @@ jobs: run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - - name: Set up Singularity - if: matrix.profile == 'singularity' - uses: eWaterCycle/setup-singularity@v5 - with: - singularity-version: 3.7.1 - - - name: Setup miniconda - if: matrix.profile == 'conda' - uses: conda-incubator/setup-miniconda@v2 - with: - auto-update-conda: true - channels: conda-forge,bioconda,defaults - python-version: ${{ matrix.python-version }} - - - name: Conda clean - if: matrix.profile == 'conda' - run: conda clean -a - - # Test the module - name: Run pytest-workflow - # only use one thread for pytest-workflow to avoid race condition on conda cache. - run: TMPDIR=~ PROFILE=${{ matrix.profile }} pytest --tag ${{ matrix.tags }} --symlink --kwdof + run: pytest --tag ${{ matrix.tags }} --symlink --kwdof - name: Upload logs on failure if: failure() From 3c708ca7f9241820bb7aaa369b1b768f9749ad30 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:42:20 +0100 Subject: [PATCH 517/675] CI Disabled fast fail --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7e5f9ea8..94d131c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,6 +74,7 @@ jobs: NXF_ANSI_LOG: false strategy: matrix: + fail-fast: false nxf_version: ["21.04.0", ''] tags: ["samplesheet", "verify_output_input", "verify_output_align", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] steps: From caba95d1cb9863ceea26b39da12136d95e48c265 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:44:42 +0100 Subject: [PATCH 518/675] Fixed CI sytax error --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 94d131c9..b7e68cf4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,8 +73,8 @@ jobs: env: NXF_ANSI_LOG: false strategy: + fail-fast: false matrix: - fail-fast: false nxf_version: ["21.04.0", ''] tags: ["samplesheet", "verify_output_input", "verify_output_align", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] steps: From 4d76c50b282de0e8e75199212f0ce8b019bd6c9b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 09:57:36 +0100 Subject: [PATCH 519/675] added unit test config --- tests/config/nextflow.config | 10 ++++++++++ tests/test_samplesheet_check.yml | 18 +++++++++--------- tests/test_verify_output_align_intermed.yml | 2 +- tests/test_verify_output_duplicates.yml | 2 +- tests/test_verify_output_only_align.yml | 2 +- tests/test_verify_output_only_input.yml | 2 +- tests/test_verify_output_only_peak_calling.yml | 2 +- tests/test_verify_output_only_q_filter.yml | 2 +- tests/test_verify_output_save_merged.yml | 2 +- tests/test_verify_output_save_ref.yml | 2 +- .../test_verify_output_save_spikein_align.yml | 2 +- tests/test_verify_output_save_trimmed.yml | 2 +- tests/test_verify_output_save_unaligned.yml | 2 +- tests/test_verify_output_skip_fastqc.yml | 2 +- tests/test_verify_output_skip_reporting.yml | 2 +- tests/test_verify_output_skip_trimming.yml | 2 +- 16 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 tests/config/nextflow.config diff --git a/tests/config/nextflow.config b/tests/config/nextflow.config new file mode 100644 index 00000000..8c62e29e --- /dev/null +++ b/tests/config/nextflow.config @@ -0,0 +1,10 @@ +params { + outdir = "results/" + publish_dir_mode = "copy" +} + +process { + cpus = 2 + memory = 6.GB + time = 6.h +} \ No newline at end of file diff --git a/tests/test_samplesheet_check.yml b/tests/test_samplesheet_check.yml index 1da05401..9ba9e11d 100644 --- a/tests/test_samplesheet_check.yml +++ b/tests/test_samplesheet_check.yml @@ -1,12 +1,12 @@ - name: test_samplesheet_check_test_id_1 - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/rep_id_start_1.csv + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/rep_id_start_1.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_start_1 exit_code: 1 - name: test_samplesheet_check_noigg_pos - command: nextflow run main.nf -profile docker,test --only_input true --igg_control false --input tests/data/samplesheets/no_igg.csv + command: nextflow run main.nf -profile docker,test --only_input true --igg_control false --input tests/data/samplesheets/no_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_no_igg @@ -15,7 +15,7 @@ - path: results/pipeline_info/samplesheet.valid.csv - name: test_samplesheet_check_noigg_neg - command: nextflow run main.nf -profile docker,test --only_input true --igg_control true --input tests/data/samplesheets/no_igg.csv + command: nextflow run main.nf -profile docker,test --only_input true --igg_control true --input tests/data/samplesheets/no_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_no_igg @@ -23,7 +23,7 @@ exit_code: 1 - name: test_samplesheet_check_1_1_pos - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg.csv + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_1_1 @@ -32,7 +32,7 @@ - path: results/pipeline_info/samplesheet.valid.csv - name: test_samplesheet_check_1_1_neg - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_neg.csv + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_neg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_1_1 @@ -40,7 +40,7 @@ exit_code: 1 - name: test_samplesheet_check_1_2_group_match - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_1_2 @@ -48,7 +48,7 @@ exit_code: 1 - name: test_samplesheet_check_2_2_group_match_tech_rep - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_2_2 @@ -56,7 +56,7 @@ exit_code: 1 - name: test_samplesheet_check_multiple_sample_single_igg - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_single_igg.csv + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_single_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_M_1 @@ -64,7 +64,7 @@ - path: results/pipeline_info/samplesheet.valid.csv - name: test_samplesheet_check_multiple_sample_multiple_igg - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_multiple_igg.csv + command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_multiple_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_M_M diff --git a/tests/test_verify_output_align_intermed.yml b/tests/test_verify_output_align_intermed.yml index cdaad8ac..5048c0f8 100644 --- a/tests/test_verify_output_align_intermed.yml +++ b/tests/test_verify_output_align_intermed.yml @@ -1,5 +1,5 @@ - name: test_verify_output_align_intermed - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --save_align_intermed true + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --save_align_intermed true -c tests/config/nextflow.config tags: - verify_output - verify_output_align diff --git a/tests/test_verify_output_duplicates.yml b/tests/test_verify_output_duplicates.yml index 35f22b2b..48866533 100644 --- a/tests/test_verify_output_duplicates.yml +++ b/tests/test_verify_output_duplicates.yml @@ -1,5 +1,5 @@ - name: test_verify_output_duplicates_mark - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --skip_removeduplicates true + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --skip_removeduplicates true -c tests/config/nextflow.config tags: - verify_output - verify_output_align diff --git a/tests/test_verify_output_only_align.yml b/tests/test_verify_output_only_align.yml index 9f2c49d1..c640f266 100644 --- a/tests/test_verify_output_only_align.yml +++ b/tests/test_verify_output_only_align.yml @@ -1,5 +1,5 @@ - name: test_verify_output_only_align - command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true + command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true -c tests/config/nextflow.config tags: - verify_output - verify_output_align diff --git a/tests/test_verify_output_only_input.yml b/tests/test_verify_output_only_input.yml index 463840cc..783c1e8e 100644 --- a/tests/test_verify_output_only_input.yml +++ b/tests/test_verify_output_only_input.yml @@ -1,5 +1,5 @@ - name: test_verify_output_only_input - command: nextflow run main.nf -profile docker,test --only_input true + command: nextflow run main.nf -profile docker,test --only_input true -c tests/config/nextflow.config tags: - verify_output - verify_output_input diff --git a/tests/test_verify_output_only_peak_calling.yml b/tests/test_verify_output_only_peak_calling.yml index d38237f2..f945d5b0 100644 --- a/tests/test_verify_output_only_peak_calling.yml +++ b/tests/test_verify_output_only_peak_calling.yml @@ -1,5 +1,5 @@ - name: test_verify_output_only_peak_calling - command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true + command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true -c tests/config/nextflow.config tags: - verify_output - verify_output_peak_calling diff --git a/tests/test_verify_output_only_q_filter.yml b/tests/test_verify_output_only_q_filter.yml index 73768732..6b3bbaa7 100644 --- a/tests/test_verify_output_only_q_filter.yml +++ b/tests/test_verify_output_only_q_filter.yml @@ -1,5 +1,5 @@ - name: test_verify_output_only_q_filter - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true minimum_alignment_q_score 10 --skip_markduplicates true --skip_removeduplicates true + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true minimum_alignment_q_score 10 --skip_markduplicates true --skip_removeduplicates true -c tests/config/nextflow.config tags: - verify_output - verify_output_align diff --git a/tests/test_verify_output_save_merged.yml b/tests/test_verify_output_save_merged.yml index ea715bb6..e8f49adf 100644 --- a/tests/test_verify_output_save_merged.yml +++ b/tests/test_verify_output_save_merged.yml @@ -1,5 +1,5 @@ - name: test_verify_output_save_merged - command: nextflow run main.nf -profile docker,test_tech_reps --save_merged_fastq true --only_preqc true + command: nextflow run main.nf -profile docker,test_tech_reps --save_merged_fastq true --only_preqc true -c tests/config/nextflow.config tags: - verify_output - verify_output_save diff --git a/tests/test_verify_output_save_ref.yml b/tests/test_verify_output_save_ref.yml index 41b31a22..a3fefa00 100644 --- a/tests/test_verify_output_save_ref.yml +++ b/tests/test_verify_output_save_ref.yml @@ -1,5 +1,5 @@ - name: test_verify_output_save_ref - command: nextflow run main.nf -profile docker,test --save_reference true --only_genome true + command: nextflow run main.nf -profile docker,test --save_reference true --only_genome true -c tests/config/nextflow.config tags: - verify_output - verify_output_save diff --git a/tests/test_verify_output_save_spikein_align.yml b/tests/test_verify_output_save_spikein_align.yml index 0623788b..52b7ae94 100644 --- a/tests/test_verify_output_save_spikein_align.yml +++ b/tests/test_verify_output_save_spikein_align.yml @@ -1,5 +1,5 @@ - name: test_verify_output_save_spikein_align - command: nextflow run main.nf -profile docker,test --only_alignment true --save_spikein_aligned true --skip_fastqc true + command: nextflow run main.nf -profile docker,test --only_alignment true --save_spikein_aligned true --skip_fastqc true -c tests/config/nextflow.config tags: - verify_output - verify_output_align diff --git a/tests/test_verify_output_save_trimmed.yml b/tests/test_verify_output_save_trimmed.yml index ea5a1da5..cf0f85da 100644 --- a/tests/test_verify_output_save_trimmed.yml +++ b/tests/test_verify_output_save_trimmed.yml @@ -1,5 +1,5 @@ - name: test_verify_output_save_trimmed - command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true + command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true -c tests/config/nextflow.config tags: - verify_output - verify_output_save diff --git a/tests/test_verify_output_save_unaligned.yml b/tests/test_verify_output_save_unaligned.yml index e7ee3010..85d3e5ab 100644 --- a/tests/test_verify_output_save_unaligned.yml +++ b/tests/test_verify_output_save_unaligned.yml @@ -1,5 +1,5 @@ - name: test_verify_output_save_unaligned - command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true --save_unaligned true + command: nextflow run main.nf -profile docker,test --only_alignment true --skip_fastqc true --save_unaligned true -c tests/config/nextflow.config tags: - verify_output - verify_output_align diff --git a/tests/test_verify_output_skip_fastqc.yml b/tests/test_verify_output_skip_fastqc.yml index 7dad0458..a407766e 100644 --- a/tests/test_verify_output_skip_fastqc.yml +++ b/tests/test_verify_output_skip_fastqc.yml @@ -1,5 +1,5 @@ - name: test_verify_output_skip_fastqc_true - command: nextflow run main.nf -profile docker,test --only_preqc true --skip_fastqc true + command: nextflow run main.nf -profile docker,test --only_preqc true --skip_fastqc true -c tests/config/nextflow.config tags: - verify_output - verify_output_skip diff --git a/tests/test_verify_output_skip_reporting.yml b/tests/test_verify_output_skip_reporting.yml index da2d5d06..e7f3a232 100644 --- a/tests/test_verify_output_skip_reporting.yml +++ b/tests/test_verify_output_skip_reporting.yml @@ -1,5 +1,5 @@ - name: test_verify_output_skip_reporting - command: nextflow run main.nf -profile docker,test --skip_fastqc true --skip_reporting true + command: nextflow run main.nf -profile docker,test --skip_fastqc true --skip_reporting true -c tests/config/nextflow.config tags: - verify_output - verify_output_reporting diff --git a/tests/test_verify_output_skip_trimming.yml b/tests/test_verify_output_skip_trimming.yml index 0d838783..286f8261 100644 --- a/tests/test_verify_output_skip_trimming.yml +++ b/tests/test_verify_output_skip_trimming.yml @@ -1,5 +1,5 @@ - name: test_verify_output_skip_trimming - command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true --skip_trimming true + command: nextflow run main.nf -profile docker,test --only_preqc true --save_trimmed true --skip_trimming true -c tests/config/nextflow.config tags: - verify_output - verify_output_skip From 84f285fdec65db2fe5857315e832f0bd1bd10b5d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:02:58 +0100 Subject: [PATCH 520/675] CI fixes --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b7e68cf4..88811078 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -121,7 +121,7 @@ jobs: with: name: logs-${{ matrix.tags }}-${{ matrix.profile }}-${{ matrix.nxf_version }} path: | - /home/runner/pytest_workflow_*/*/.nextflow.log - /home/runner/pytest_workflow_*/*/log.out - /home/runner/pytest_workflow_*/*/log.err - /home/runner/pytest_workflow_*/*/work + /tmp/pytest_workflow_*/*/.nextflow.log + /tmp/pytest_workflow_*/*/log.out + /tmp/pytest_workflow_*/*/log.err + /tmp/pytest_workflow_*/*/work From 182bb243145cec3b5dd78389f83a33c49e741f9f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:05:58 +0100 Subject: [PATCH 521/675] CI Fixes --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 88811078..4b0fe540 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -113,7 +113,7 @@ jobs: wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - name: Run pytest-workflow - run: pytest --tag ${{ matrix.tags }} --symlink --kwdof + run: pytest --tag ${{ matrix.tags }} --kwdof - name: Upload logs on failure if: failure() From 563565b532147c874dc0ff8f82cb118e26584992 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:15:58 +0100 Subject: [PATCH 522/675] Moved trimgalore --- modules/{nf-core => local}/modules/trimgalore/functions.nf | 0 modules/{nf-core => local}/modules/trimgalore/main.nf | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename modules/{nf-core => local}/modules/trimgalore/functions.nf (100%) rename modules/{nf-core => local}/modules/trimgalore/main.nf (100%) diff --git a/modules/nf-core/modules/trimgalore/functions.nf b/modules/local/modules/trimgalore/functions.nf similarity index 100% rename from modules/nf-core/modules/trimgalore/functions.nf rename to modules/local/modules/trimgalore/functions.nf diff --git a/modules/nf-core/modules/trimgalore/main.nf b/modules/local/modules/trimgalore/main.nf similarity index 100% rename from modules/nf-core/modules/trimgalore/main.nf rename to modules/local/modules/trimgalore/main.nf From e0f31a5c30b522dbd05a418bcd3a0c1b6e649b2b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:23:59 +0100 Subject: [PATCH 523/675] Moved trimgalore to custom module --- modules.json | 3 - modules/local/modules/trimgalore/main.nf | 37 ++++++++---- modules/nf-core/modules/trimgalore/meta.yml | 58 ------------------- .../{nf-core => local}/fastqc_trimgalore.nf | 4 +- workflows/cutandrun.nf | 24 ++++---- 5 files changed, 39 insertions(+), 87 deletions(-) delete mode 100644 modules/nf-core/modules/trimgalore/meta.yml rename subworkflows/{nf-core => local}/fastqc_trimgalore.nf (89%) diff --git a/modules.json b/modules.json index b735dc52..ce4380e8 100644 --- a/modules.json +++ b/modules.json @@ -54,9 +54,6 @@ "seacr/callpeak": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, - "trimgalore": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" - }, "ucsc/bedclip": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, diff --git a/modules/local/modules/trimgalore/main.nf b/modules/local/modules/trimgalore/main.nf index 3c16d66f..f393cf9e 100644 --- a/modules/local/modules/trimgalore/main.nf +++ b/modules/local/modules/trimgalore/main.nf @@ -11,20 +11,20 @@ process TRIMGALORE { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? 'bioconda::trim-galore=0.6.7' : null) + conda (params.enable_conda ? "bioconda::trim-galore=0.6.6" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/trim-galore:0.6.7--hdfd78af_0" + container "https://depot.galaxyproject.org/singularity/trim-galore:0.6.6--0" } else { - container "quay.io/biocontainers/trim-galore:0.6.7--hdfd78af_0" + container "quay.io/biocontainers/trim-galore:0.6.6--0" } input: tuple val(meta), path(reads) output: - tuple val(meta), path("*.fq.gz") , emit: reads - tuple val(meta), path("*report.txt"), emit: log - path "*.version.txt" , emit: version + tuple val(meta), path("*trimmed.fastq.gz") , emit: reads + tuple val(meta), path("*report.txt") , emit: log + path "*.version.txt" , emit: version tuple val(meta), path("*.html"), emit: html optional true tuple val(meta), path("*.zip") , emit: zip optional true @@ -49,7 +49,11 @@ process TRIMGALORE { // Added soft-links to original fastqs for consistent naming in MultiQC def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def suffix = options.suffix ? "${options.suffix}.trimmed" : ".trimmed" + def prefix_1 = "${meta.id}_1${suffix}" + def prefix_2 = "${meta.id}_2${suffix}" + def prefix = "${meta.id}${suffix}" + if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz @@ -64,8 +68,8 @@ process TRIMGALORE { """ } else { """ - [ ! -f ${prefix}_1.fastq.gz ] && ln -s ${reads[0]} ${prefix}_1.fastq.gz - [ ! -f ${prefix}_2.fastq.gz ] && ln -s ${reads[1]} ${prefix}_2.fastq.gz + [ ! -f ${meta.id}_1.fastq.gz ] && ln -s ${reads[0]} ${meta.id}_1.fastq.gz + [ ! -f ${meta.id}_2.fastq.gz ] && ln -s ${reads[1]} ${meta.id}_2.fastq.gz trim_galore \\ $options.args \\ --cores $cores \\ @@ -75,9 +79,18 @@ process TRIMGALORE { $c_r2 \\ $tpc_r1 \\ $tpc_r2 \\ - ${prefix}_1.fastq.gz \\ - ${prefix}_2.fastq.gz + ${meta.id}_1.fastq.gz \\ + ${meta.id}_2.fastq.gz echo \$(trim_galore --version 2>&1) | sed 's/^.*version //; s/Last.*\$//' > ${software}.version.txt + + mv ${meta.id}_1_val_1.fq.gz ${prefix_1}.fastq.gz + mv ${meta.id}_2_val_2.fq.gz ${prefix_2}.fastq.gz + + [ ! -f ${meta.id}_1_val_1_fastqc.html ] || mv ${meta.id}_1_val_1_fastqc.html ${meta.id}_1_fastqc${suffix}.html + [ ! -f ${meta.id}_2_val_2_fastqc.html ] || mv ${meta.id}_2_val_2_fastqc.html ${meta.id}_2_fastqc${suffix}.html + + [ ! -f ${meta.id}_1_val_1_fastqc.zip ] || mv ${meta.id}_1_val_1_fastqc.zip ${meta.id}_1_fastqc${suffix}.zip + [ ! -f ${meta.id}_2_val_2_fastqc.zip ] || mv ${meta.id}_2_val_2_fastqc.zip ${meta.id}_2_fastqc${suffix}.zip """ } -} +} \ No newline at end of file diff --git a/modules/nf-core/modules/trimgalore/meta.yml b/modules/nf-core/modules/trimgalore/meta.yml deleted file mode 100644 index 73538707..00000000 --- a/modules/nf-core/modules/trimgalore/meta.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: trimgalore -description: Trim FastQ files using Trim Galore! -keywords: - - trimming - - adapters - - sequencing adapters - - fastq -tools: - - trimgalore: - description: | - A wrapper tool around Cutadapt and FastQC to consistently apply quality - and adapter trimming to FastQ files, with some extra functionality for - MspI-digested RRBS-type (Reduced Representation Bisufite-Seq) libraries. - homepage: https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/ - documentation: https://github.com/FelixKrueger/TrimGalore/blob/master/Docs/Trim_Galore_User_Guide.md -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input FastQ files of size 1 and 2 for single-end and paired-end data, - respectively. -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: | - List of input adapter trimmed FastQ files of size 1 and 2 for - single-end and paired-end data, respectively. - pattern: "*.{fq.gz}" - - html: - type: file - description: FastQC report (optional) - pattern: "*_{fastqc.html}" - - zip: - type: file - description: FastQC report archive (optional) - pattern: "*_{fastqc.zip}" - - log: - type: file - description: Trim Galore! trimming report - pattern: "*_{report.txt}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" -authors: - - "@drpatelh" - - "@ewels" - - "@FelixKrueger" diff --git a/subworkflows/nf-core/fastqc_trimgalore.nf b/subworkflows/local/fastqc_trimgalore.nf similarity index 89% rename from subworkflows/nf-core/fastqc_trimgalore.nf rename to subworkflows/local/fastqc_trimgalore.nf index a702f32f..0992f9c6 100644 --- a/subworkflows/nf-core/fastqc_trimgalore.nf +++ b/subworkflows/local/fastqc_trimgalore.nf @@ -5,8 +5,8 @@ params.fastqc_options = [:] params.trimgalore_options = [:] -include { FASTQC } from '../../modules/nf-core/modules/fastqc/main' addParams( options: params.fastqc_options ) -include { TRIMGALORE } from '../../modules/nf-core/modules/trimgalore/main' addParams( options: params.trimgalore_options ) +include { FASTQC } from '../../modules/nf-core/modules/fastqc/main' addParams( options: params.fastqc_options ) +include { TRIMGALORE } from '../../modules/local/modules/trimgalore/main' addParams( options: params.trimgalore_options ) workflow FASTQC_TRIMGALORE { take: diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 2c32fc9c..774fe4d2 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -281,14 +281,14 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title * MODULES */ include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) +include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) -include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) @@ -297,15 +297,16 @@ include { MULTIQC } from "../modules/local/multiqc" /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules */ -include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) -include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options, samtools_options: samtools_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) -include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) -include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) -include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL} from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) -include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", meta_prefix: "dedup_", script_mode: false ) -include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) +include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) +include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options, samtools_options: samtools_sort_options ) +include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) +include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) +include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) +include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) +include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", meta_prefix: "dedup_", script_mode: false ) +include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) +include { FASTQC_TRIMGALORE } from "../subworkflows/local/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) /* ======================================================================================== @@ -329,7 +330,6 @@ include { SAMTOOLS_INDEX } from "../mo /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { FASTQC_TRIMGALORE } from "../subworkflows/nf-core/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) From a55aa68e54fecad1c77d7958245cf744b4004ed3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:26:27 +0100 Subject: [PATCH 524/675] split align CI tests --- .github/workflows/ci.yml | 2 +- tests/test_verify_output_align_intermed.yml | 1 + tests/test_verify_output_duplicates.yml | 1 + tests/test_verify_output_only_align.yml | 1 + tests/test_verify_output_only_q_filter.yml | 1 + tests/test_verify_output_save_spikein_align.yml | 1 + tests/test_verify_output_save_unaligned.yml | 1 + 7 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b0fe540..ca728c6e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,7 +76,7 @@ jobs: fail-fast: false matrix: nxf_version: ["21.04.0", ''] - tags: ["samplesheet", "verify_output_input", "verify_output_align", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] + tags: ["samplesheet", "verify_output_input", "verify_output_align_short", "verify_output_align_long", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] steps: - uses: actions/checkout@v2 diff --git a/tests/test_verify_output_align_intermed.yml b/tests/test_verify_output_align_intermed.yml index 5048c0f8..93f43b19 100644 --- a/tests/test_verify_output_align_intermed.yml +++ b/tests/test_verify_output_align_intermed.yml @@ -3,6 +3,7 @@ tags: - verify_output - verify_output_align + - verify_output_align_short - verify_output_align_intermed files: - path: results/02_alignment/bowtie2/target/intermed/align/h3k27me3_R1.target.sorted.bam diff --git a/tests/test_verify_output_duplicates.yml b/tests/test_verify_output_duplicates.yml index 48866533..6e8eee49 100644 --- a/tests/test_verify_output_duplicates.yml +++ b/tests/test_verify_output_duplicates.yml @@ -3,6 +3,7 @@ tags: - verify_output - verify_output_align + - verify_output_align_long - verify_output_align_duplicates - verify_output_align_duplicates_mark files: diff --git a/tests/test_verify_output_only_align.yml b/tests/test_verify_output_only_align.yml index c640f266..2fd8407e 100644 --- a/tests/test_verify_output_only_align.yml +++ b/tests/test_verify_output_only_align.yml @@ -3,6 +3,7 @@ tags: - verify_output - verify_output_align + - verify_output_align_short - verify_output_align_only_align files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.sorted.bam diff --git a/tests/test_verify_output_only_q_filter.yml b/tests/test_verify_output_only_q_filter.yml index 6b3bbaa7..5e908ba0 100644 --- a/tests/test_verify_output_only_q_filter.yml +++ b/tests/test_verify_output_only_q_filter.yml @@ -3,6 +3,7 @@ tags: - verify_output - verify_output_align + - verify_output_align_short - verify_output_align_only_q_filter files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam diff --git a/tests/test_verify_output_save_spikein_align.yml b/tests/test_verify_output_save_spikein_align.yml index 52b7ae94..4cb0bd78 100644 --- a/tests/test_verify_output_save_spikein_align.yml +++ b/tests/test_verify_output_save_spikein_align.yml @@ -3,6 +3,7 @@ tags: - verify_output - verify_output_align + - verify_output_align_short - verify_output_align_save_spikein_align files: - path: results/02_alignment/bowtie2/spikein/h3k27me3_R1.spikein.sorted.bam diff --git a/tests/test_verify_output_save_unaligned.yml b/tests/test_verify_output_save_unaligned.yml index 85d3e5ab..185721d8 100644 --- a/tests/test_verify_output_save_unaligned.yml +++ b/tests/test_verify_output_save_unaligned.yml @@ -3,6 +3,7 @@ tags: - verify_output - verify_output_align + - verify_output_align_short - verify_output_align_save_unaligned files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.unmapped_1.fastq.gz From 1e7fcc7a14c654787bacc1da296df588c03c6c8f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:27:55 +0100 Subject: [PATCH 525/675] Fixed whitespace --- modules/local/modules/trimgalore/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/modules/trimgalore/main.nf b/modules/local/modules/trimgalore/main.nf index f393cf9e..3914cd42 100644 --- a/modules/local/modules/trimgalore/main.nf +++ b/modules/local/modules/trimgalore/main.nf @@ -53,7 +53,7 @@ process TRIMGALORE { def prefix_1 = "${meta.id}_1${suffix}" def prefix_2 = "${meta.id}_2${suffix}" def prefix = "${meta.id}${suffix}" - + if (meta.single_end) { """ [ ! -f ${prefix}.fastq.gz ] && ln -s $reads ${prefix}.fastq.gz From 28306e65925ff6673fec67fa678e97fbb314c56e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:33:11 +0100 Subject: [PATCH 526/675] rebalanced unit tests --- tests/test_verify_output_only_q_filter.yml | 2 +- tests/test_verify_output_save_unaligned.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_verify_output_only_q_filter.yml b/tests/test_verify_output_only_q_filter.yml index 5e908ba0..5db9b380 100644 --- a/tests/test_verify_output_only_q_filter.yml +++ b/tests/test_verify_output_only_q_filter.yml @@ -3,7 +3,7 @@ tags: - verify_output - verify_output_align - - verify_output_align_short + - verify_output_align_long - verify_output_align_only_q_filter files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam diff --git a/tests/test_verify_output_save_unaligned.yml b/tests/test_verify_output_save_unaligned.yml index 185721d8..d4d6f3f4 100644 --- a/tests/test_verify_output_save_unaligned.yml +++ b/tests/test_verify_output_save_unaligned.yml @@ -3,7 +3,7 @@ tags: - verify_output - verify_output_align - - verify_output_align_short + - verify_output_align_long - verify_output_align_save_unaligned files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.unmapped_1.fastq.gz From ed2eafd3f12fc0046b8d50b7ea7523e3c73c245f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 10:37:50 +0100 Subject: [PATCH 527/675] New line error --- modules/local/modules/trimgalore/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/modules/trimgalore/main.nf b/modules/local/modules/trimgalore/main.nf index 3914cd42..5d0a27d1 100644 --- a/modules/local/modules/trimgalore/main.nf +++ b/modules/local/modules/trimgalore/main.nf @@ -93,4 +93,4 @@ process TRIMGALORE { [ ! -f ${meta.id}_2_val_2_fastqc.zip ] || mv ${meta.id}_2_val_2_fastqc.zip ${meta.id}_2_fastqc${suffix}.zip """ } -} \ No newline at end of file +} From 1972e6d3550faec3a17145fda39f5eefc872de31 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 11:06:56 +0100 Subject: [PATCH 528/675] Updated schema --- nextflow_schema.json | 496 +++++++++++++++++++++++-------------------- 1 file changed, 267 insertions(+), 229 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index b80bf884..93eb050c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -5,6 +5,121 @@ "description": "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis.", "type": "object", "definitions": { + "input_output_options": { + "title": "Input/output options", + "type": "object", + "fa_icon": "fas fa-terminal", + "description": "Define where the pipeline should find input data and save output data.", + "required": [ + "input" + ], + "properties": { + "input": { + "type": "string", + "format": "file-path", + "mimetype": "text/csv", + "pattern": "^\\S+\\.csv$", + "schema": "assets/schema_input.json", + "description": "Path to comma-separated file containing information about the samples in the experiment.", + "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re//usage#samplesheet-input).", + "fa_icon": "fas fa-file-csv" + }, + "outdir": { + "type": "string", + "description": "Path to the output directory where the results will be saved.", + "default": "./results", + "fa_icon": "fas fa-folder-open" + }, + "email": { + "type": "string", + "description": "Email address for completion summary.", + "fa_icon": "fas fa-envelope", + "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + }, + "multiqc_title": { + "type": "string", + "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", + "fa_icon": "fas fa-file-signature" + }, + "save_reference": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus", + "description": "Save reference data to output directory" + }, + "save_merged_fastq": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus", + "description": "Save any technical replicates that were merged to output directory" + }, + "save_trimmed": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus", + "description": "Save trimmed fastqs to output directory" + }, + "save_spikein_aligned": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus", + "description": "Save bam files aligned to the spike-in genome to output directory" + }, + "save_unaligned": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus", + "description": "Save unaligned sequences to output directory" + }, + "save_align_intermed": { + "type": "boolean", + "fa_icon": "fas fa-folder-plus", + "description": "Save alignment intermediates to output directory (WARNING: can be very large)" + }, + "aligner": { + "type": "string", + "default": "bowtie2", + "hidden": true, + "fa_icon": "fas fa-align-justify", + "description": "Select aligner" + } + } + }, + "trimming_options": { + "title": "Trimming Options", + "type": "object", + "description": "", + "default": "", + "properties": { + "clip_r1": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify", + "description": "Trim galore param" + }, + "clip_r2": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify", + "description": "Trim galore param" + }, + "three_prime_clip_r1": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify", + "description": "Trim galore param" + }, + "three_prime_clip_r2": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify", + "description": "Trim galore param" + }, + "trim_nextseq": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-align-justify", + "description": "Trim galore param" + } + }, + "fa_icon": "fas fa-cut" + }, "reference_data_options": { "title": "Reference data options", "type": "object", @@ -19,15 +134,18 @@ }, "bowtie2": { "type": "string", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-book", + "description": "Path to bowtie2 index" }, "gtf": { "type": "string", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-book", + "description": "Path to GTF annotation file" }, "blacklist": { "type": "string", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-book", + "description": "Path to genome blacklist" }, "spikein_genome": { "type": "string", @@ -37,11 +155,13 @@ }, "spikein_bowtie2": { "type": "string", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-book", + "description": "Path to spike-in bowtie2 index" }, "spikein_fasta": { "type": "string", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-book", + "description": "Path to spike-in fasta" }, "fasta": { "type": "string", @@ -69,6 +189,140 @@ } } }, + "pipeline_options": { + "title": "Pipeline Options", + "type": "object", + "description": "", + "default": "", + "properties": { + "minimum_alignment_q_score": { + "type": "integer", + "default": 0, + "fa_icon": "fas fa-sort-numeric-down", + "description": "Filter reads below a q-score threshold" + }, + "dedup_target_reads": { + "type": "boolean", + "fa_icon": "fas fa-clone", + "description": "Deduplicate non-control reads" + }, + "normalisation_c": { + "type": "integer", + "default": 10000, + "hidden": true, + "fa_icon": "fas fa-align-justify", + "description": "Normalisation constant" + }, + "igg_control": { + "type": "boolean", + "default": true, + "fa_icon": "fas fa-align-justify", + "description": "Specifies if the samplesheet contains an IgG control" + }, + "peak_threshold": { + "type": "number", + "default": 0.05, + "fa_icon": "fas fa-align-justify", + "description": "Threshold for peak calling when no IgG is present" + }, + "gene_bed": { + "type": "string", + "fa_icon": "fas fa-align-justify", + "description": "Path to gene bed file" + }, + "replicate_threshold": { + "type": "integer", + "default": 1, + "fa_icon": "fas fa-align-justify", + "description": "Minimum number of overlapping replicates needed for a consensus peak" + } + }, + "fa_icon": "fas fa-cog" + }, + "flow_switching_options": { + "title": "Flow switching options", + "type": "object", + "description": "", + "default": "", + "properties": { + "only_genome": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Run pipeline up to reference preparation" + }, + "only_input": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Run pipeline up to input checking" + }, + "only_preqc": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Run pipeline up to pre-alignment" + }, + "only_alignment": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Run pipeline up to alignment" + }, + "only_filtering": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Run pipeline up to q-filtering" + }, + "only_peak_calling": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Run pipeline up to peak calling" + }, + "skip_fastqc": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skips fastqc reporting" + }, + "skip_trimming": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skips trimming" + }, + "skip_removeduplicates": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skips de-duplication" + }, + "skip_scale": { + "type": "boolean", + "description": "Skips scalefactor normalisation", + "fa_icon": "fas fa-align-justify" + }, + "skip_reporting": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skips reporting" + }, + "skip_igv": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skips igv session generation" + }, + "skip_heatmaps": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skips deeptools heatmaps" + }, + "skip_multiqc": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skips multiqc" + }, + "skip_upset_plots": { + "type": "boolean", + "fa_icon": "fas fa-align-justify", + "description": "Skip upset plot calculation" + } + }, + "fa_icon": "fas fa-exchange-alt" + }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -256,248 +510,32 @@ "help_text": "This may be useful for example if you are unable to directly pull Singularity containers to run the pipeline due to http/https proxy issues." } } - }, - "trimming_options": { - "title": "Trimming Options", - "type": "object", - "description": "", - "default": "", - "properties": { - "clip_r1": { - "type": "integer", - "default": 0, - "fa_icon": "fas fa-align-justify" - }, - "clip_r2": { - "type": "integer", - "default": 0, - "fa_icon": "fas fa-align-justify" - }, - "three_prime_clip_r1": { - "type": "integer", - "default": 0, - "fa_icon": "fas fa-align-justify" - }, - "three_prime_clip_r2": { - "type": "integer", - "default": 0, - "fa_icon": "fas fa-align-justify" - }, - "trim_nextseq": { - "type": "integer", - "default": 0, - "fa_icon": "fas fa-align-justify" - } - }, - "fa_icon": "fas fa-cut" - }, - "input_output_options": { - "title": "Input/output options", - "type": "object", - "fa_icon": "fas fa-terminal", - "description": "Define where the pipeline should find input data and save output data.", - "required": [ - "input" - ], - "properties": { - "input": { - "type": "string", - "format": "file-path", - "mimetype": "text/csv", - "pattern": "^\\S+\\.csv$", - "schema": "assets/schema_input.json", - "description": "Path to comma-separated file containing information about the samples in the experiment.", - "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re//usage#samplesheet-input).", - "fa_icon": "fas fa-file-csv" - }, - "outdir": { - "type": "string", - "description": "Path to the output directory where the results will be saved.", - "default": "./results", - "fa_icon": "fas fa-folder-open" - }, - "email": { - "type": "string", - "description": "Email address for completion summary.", - "fa_icon": "fas fa-envelope", - "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" - }, - "multiqc_title": { - "type": "string", - "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", - "fa_icon": "fas fa-file-signature" - }, - "save_reference": { - "type": "boolean", - "fa_icon": "fas fa-folder-plus" - }, - "save_merged_fastq": { - "type": "boolean", - "fa_icon": "fas fa-folder-plus" - }, - "save_trimmed": { - "type": "boolean", - "fa_icon": "fas fa-folder-plus" - }, - "save_spikein_aligned": { - "type": "boolean", - "fa_icon": "fas fa-folder-plus" - }, - "save_unaligned": { - "type": "boolean", - "fa_icon": "fas fa-folder-plus" - }, - "save_align_intermed": { - "type": "boolean", - "fa_icon": "fas fa-folder-plus" - }, - "aligner": { - "type": "string", - "default": "bowtie2", - "hidden": true, - "fa_icon": "fas fa-align-justify" - } - } - }, - "flow_switching_options": { - "title": "Flow switching options", - "type": "object", - "description": "", - "default": "", - "properties": { - "only_genome": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "only_input": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "only_preqc": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "only_alignment": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "only_filtering": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "only_peak_calling": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_fastqc": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_trimming": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_removeduplicates": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_scale": { - "type": "boolean", - "description": "Skip scalefactor normalisation", - "fa_icon": "fas fa-align-justify" - }, - "skip_reporting": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_igv": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_heatmaps": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_multiqc": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - }, - "skip_upset_plots": { - "type": "boolean", - "fa_icon": "fas fa-align-justify" - } - }, - "fa_icon": "fas fa-exchange-alt" - }, - "pipeline_options": { - "title": "Pipeline Options", - "type": "object", - "description": "", - "default": "", - "properties": { - "minimum_alignment_q_score": { - "type": "integer", - "default": 0, - "fa_icon": "fas fa-sort-numeric-down" - }, - "dedup_target_reads": { - "type": "boolean", - "fa_icon": "fas fa-clone" - }, - "normalisation_c": { - "type": "integer", - "default": 10000, - "hidden": true, - "fa_icon": "fas fa-align-justify" - }, - "igg_control": { - "type": "boolean", - "default": true, - "fa_icon": "fas fa-align-justify" - }, - "peak_threshold": { - "type": "number", - "default": 0.05, - "fa_icon": "fas fa-align-justify" - }, - "gene_bed": { - "type": "string", - "fa_icon": "fas fa-align-justify" - }, - "replicate_threshold": { - "type": "integer", - "default": 1, - "fa_icon": "fas fa-align-justify" - } - }, - "fa_icon": "fas fa-cog" } }, "allOf": [ { - "$ref": "#/definitions/reference_data_options" + "$ref": "#/definitions/input_output_options" }, { - "$ref": "#/definitions/institutional_config_options" + "$ref": "#/definitions/trimming_options" }, { - "$ref": "#/definitions/max_job_request_options" + "$ref": "#/definitions/reference_data_options" }, { - "$ref": "#/definitions/generic_options" + "$ref": "#/definitions/pipeline_options" }, { - "$ref": "#/definitions/trimming_options" + "$ref": "#/definitions/flow_switching_options" }, { - "$ref": "#/definitions/input_output_options" + "$ref": "#/definitions/institutional_config_options" }, { - "$ref": "#/definitions/flow_switching_options" + "$ref": "#/definitions/max_job_request_options" }, { - "$ref": "#/definitions/pipeline_options" + "$ref": "#/definitions/generic_options" } ] } \ No newline at end of file From 66d7f019b519cd57ebe78d13f89eb1260bd8726f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 11:20:07 +0100 Subject: [PATCH 529/675] Updated CI --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ca728c6e..1696af35 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,8 +49,8 @@ jobs: NXF_ANSI_LOG: false strategy: matrix: - # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['21.04.0', ''] + # We only run this on the specified nextflow version for the pipeline + nxf_ver: ['21.04.0'] steps: - name: Check out pipeline code uses: actions/checkout@v2 From 3fb47bbd97e01becfea1b59da8e857c74920ba2a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 11:24:29 +0100 Subject: [PATCH 530/675] Updated conda versions --- modules/local/awk.nf | 2 +- modules/local/awk_script.nf | 2 +- modules/local/cat_fastq.nf | 2 +- modules/local/export_meta.nf | 2 +- modules/local/sort.nf | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/awk.nf b/modules/local/awk.nf index a7f11d63..23737a0f 100644 --- a/modules/local/awk.nf +++ b/modules/local/awk.nf @@ -13,7 +13,7 @@ process AWK { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - conda (params.enable_conda ? null : null) + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { diff --git a/modules/local/awk_script.nf b/modules/local/awk_script.nf index dc0044a6..74f77c2a 100644 --- a/modules/local/awk_script.nf +++ b/modules/local/awk_script.nf @@ -10,7 +10,7 @@ process AWK_SCRIPT { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - conda (params.enable_conda ? null : null) + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { diff --git a/modules/local/cat_fastq.nf b/modules/local/cat_fastq.nf index dfad2908..4cf541ec 100644 --- a/modules/local/cat_fastq.nf +++ b/modules/local/cat_fastq.nf @@ -14,7 +14,7 @@ process CAT_FASTQ { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', publish_id:meta.id) } - conda (params.enable_conda ? null : null) + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { diff --git a/modules/local/export_meta.nf b/modules/local/export_meta.nf index dbf7399f..bdc9977a 100644 --- a/modules/local/export_meta.nf +++ b/modules/local/export_meta.nf @@ -9,7 +9,7 @@ process EXPORT_META { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - conda (params.enable_conda ? "" : null) + conda (params.enable_conda ? null : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { diff --git a/modules/local/sort.nf b/modules/local/sort.nf index 88345e3e..871135a7 100644 --- a/modules/local/sort.nf +++ b/modules/local/sort.nf @@ -15,7 +15,7 @@ process SORT { saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - conda (params.enable_conda ? null : null) + conda (params.enable_conda ? "conda-forge::sed=4.7" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" } else { From 6e1e82ca8743a816bb83595c0603289a5dbb53ce Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 11:36:15 +0100 Subject: [PATCH 531/675] Updated q-filter test --- tests/test_verify_output_only_q_filter.yml | 2 +- workflows/cutandrun.nf | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_verify_output_only_q_filter.yml b/tests/test_verify_output_only_q_filter.yml index 5db9b380..65044aad 100644 --- a/tests/test_verify_output_only_q_filter.yml +++ b/tests/test_verify_output_only_q_filter.yml @@ -1,5 +1,5 @@ - name: test_verify_output_only_q_filter - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true minimum_alignment_q_score 10 --skip_markduplicates true --skip_removeduplicates true -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true minimum_alignment_q_score 10 --skip_removeduplicates true -c tests/config/nextflow.config tags: - verify_output - verify_output_align diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 774fe4d2..79466a79 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -86,7 +86,6 @@ if(params.skip_reporting) { run_peak_plotting = false } - if(params.only_input) { run_genome_prep = false run_cat_fastq = false @@ -134,6 +133,8 @@ if(params.only_alignment) { } if(params.only_filtering) { + run_mark_dups = false + run_remove_dups = false run_peak_calling = false run_reporting = false run_multiqc = false From 6b64164190fe232d307fa656482cef7545ee2d0c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 11:37:28 +0100 Subject: [PATCH 532/675] Updated CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1696af35..ad609fa5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,7 +75,7 @@ jobs: strategy: fail-fast: false matrix: - nxf_version: ["21.04.0", ''] + nxf_version: ["21.04.0"] tags: ["samplesheet", "verify_output_input", "verify_output_align_short", "verify_output_align_long", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] steps: - uses: actions/checkout@v2 From 940fe4127e6c9ba674a40fcf8c3bc3a29fc94252 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 11:51:47 +0100 Subject: [PATCH 533/675] Updated sample sheet and schema input --- assets/samplesheet.csv | 10 +++++++--- assets/schema_input.json | 33 +++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index 5f653ab7..ab6d7d48 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,3 +1,7 @@ -sample,fastq_1,fastq_2 -SAMPLE_PAIRED_END,/path/to/fastq/files/AEG588A1_S1_L002_R1_001.fastq.gz,/path/to/fastq/files/AEG588A1_S1_L002_R2_001.fastq.gz -SAMPLE_SINGLE_END,/path/to/fastq/files/AEG588A4_S4_L003_R1_001.fastq.gz, +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,READ1_FASTQ,READ2_FASTQC +h3k27me3,2,1,READ1_FASTQ,READ2_FASTQC +h3k4me3,1,2,READ1_FASTQ,READ2_FASTQC +h3k4me3,2,2,READ1_FASTQ,READ2_FASTQC +igg,1,1,READ1_FASTQ,READ2_FASTQC +igg,2,2,READ1_FASTQ,READ2_FASTQC \ No newline at end of file diff --git a/assets/schema_input.json b/assets/schema_input.json index 02fd3d93..dbbed3b2 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -7,10 +7,20 @@ "items": { "type": "object", "properties": { - "sample": { + "group": { "type": "string", "pattern": "^\\S+$", - "errorMessage": "Sample name must be provided and cannot contain spaces" + "errorMessage": "Sample group must be provided and cannot contain spaces" + }, + "replicate": { + "type": "integer", + "pattern": "^[0-9]*$", + "errorMessage": "Biological Replicate number within the group - technical replicates must have the same replicate number" + }, + "control_group": { + "type": "integer", + "pattern": "^[0-9]*$", + "errorMessage": "Group ID that matches to the IgG control group (if provided) - otherwise set to 0" }, "fastq_1": { "type": "string", @@ -18,22 +28,17 @@ "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'", - "anyOf": [ - { - "type": "string", - "pattern": "^\\S+\\.f(ast)?q\\.gz$" - }, - { - "type": "string", - "maxLength": 0 - } - ] + "type": "string", + "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "errorMessage": "FastQ file for reads 2 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" } }, "required": [ "sample", - "fastq_1" + "replicate", + "control_group", + "fastq_1", + "fastq_2" ] } } From 1594991d71ad52a398cb7a615c4672562f89a3df Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 12:04:23 +0100 Subject: [PATCH 534/675] Fixed align intermed tests --- tests/test_verify_output_align_intermed.yml | 4 ++-- tests/test_verify_output_save_unaligned.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_verify_output_align_intermed.yml b/tests/test_verify_output_align_intermed.yml index 93f43b19..6bea24cb 100644 --- a/tests/test_verify_output_align_intermed.yml +++ b/tests/test_verify_output_align_intermed.yml @@ -1,9 +1,9 @@ - name: test_verify_output_align_intermed - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --save_align_intermed true -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true --save_align_intermed true -c tests/config/nextflow.config tags: - verify_output - verify_output_align - - verify_output_align_short + - verify_output_align_long - verify_output_align_intermed files: - path: results/02_alignment/bowtie2/target/intermed/align/h3k27me3_R1.target.sorted.bam diff --git a/tests/test_verify_output_save_unaligned.yml b/tests/test_verify_output_save_unaligned.yml index d4d6f3f4..185721d8 100644 --- a/tests/test_verify_output_save_unaligned.yml +++ b/tests/test_verify_output_save_unaligned.yml @@ -3,7 +3,7 @@ tags: - verify_output - verify_output_align - - verify_output_align_long + - verify_output_align_short - verify_output_align_save_unaligned files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.unmapped_1.fastq.gz From 9194318cb74ff067d45184f5ee2399cbb96f33f8 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 12:22:33 +0100 Subject: [PATCH 535/675] Fixed duplicates tests --- nextflow.config | 1 - tests/test_verify_output_duplicates.yml | 6 +++--- workflows/cutandrun.nf | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/nextflow.config b/nextflow.config index d61e6bb2..e489d35f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -51,7 +51,6 @@ params { minimum_alignment_q_score = 0 // Deduplication - //skip_markduplicates = false skip_removeduplicates = false dedup_target_reads = false only_filtering = false diff --git a/tests/test_verify_output_duplicates.yml b/tests/test_verify_output_duplicates.yml index 6e8eee49..3e6e37ef 100644 --- a/tests/test_verify_output_duplicates.yml +++ b/tests/test_verify_output_duplicates.yml @@ -1,5 +1,5 @@ - name: test_verify_output_duplicates_mark - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --skip_removeduplicates true -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true --skip_removeduplicates true -c tests/config/nextflow.config tags: - verify_output - verify_output_align @@ -15,7 +15,7 @@ - path: results/02_alignment/bowtie2/target/markdup/samtools_stats/igg_R1.target.markdup.bam.flagstat - name: test_verify_output_duplicates_remove - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --dedup_target_reads false + command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true --dedup_target_reads false tags: - verify_output - verify_output_align @@ -32,7 +32,7 @@ should_exist: false - name: test_verify_output_duplicates_remove_target - command: nextflow run main.nf -profile docker,test --only_filtering true --skip_fastqc true --dedup_target_reads true + command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true --dedup_target_reads true tags: - verify_output - verify_output_align diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 79466a79..4b037204 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -74,9 +74,7 @@ def run_multiqc = true def run_peak_plotting = true if(params.minimum_alignment_q_score > 0) { run_q_filter = true } -//if(params.skip_markduplicates) { run_mark_dups = false } if(params.skip_removeduplicates || !run_mark_dups) { run_remove_dups = false } -//if(params.skip_peak_calling) { run_peak_calling = false } if(!params.gene_bed || params.skip_heatmaps) { run_deep_tools = false } if(params.skip_multiqc) { run_multiqc = false } if(params.skip_upset_plots) { run_peak_plotting = false } From 48ae7b0bb8d69a9731adcfaeba587ab396ec9027 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 12:24:52 +0100 Subject: [PATCH 536/675] Fixed line endings --- assets/samplesheet.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index ab6d7d48..513d91d1 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -4,4 +4,4 @@ h3k27me3,2,1,READ1_FASTQ,READ2_FASTQC h3k4me3,1,2,READ1_FASTQ,READ2_FASTQC h3k4me3,2,2,READ1_FASTQ,READ2_FASTQC igg,1,1,READ1_FASTQ,READ2_FASTQC -igg,2,2,READ1_FASTQ,READ2_FASTQC \ No newline at end of file +igg,2,2,READ1_FASTQ,READ2_FASTQC From f1b5a315bfdf1c31ceb2283635e4c61bd4af19ac Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 14:38:59 +0100 Subject: [PATCH 537/675] removed test templates --- tests/_INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml | 0 tests/_INOMPLETE_IGG_FLOW_TESTS.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/_INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml delete mode 100644 tests/_INOMPLETE_IGG_FLOW_TESTS.yml diff --git a/tests/_INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml b/tests/_INCOMPLETE_TESTS_FOR_CONSESUS_MERGING.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/_INOMPLETE_IGG_FLOW_TESTS.yml b/tests/_INOMPLETE_IGG_FLOW_TESTS.yml deleted file mode 100644 index e69de29b..00000000 From 3b4c4385862dfcd96c2ce957adf5c8b2e96854a6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 14:45:35 +0100 Subject: [PATCH 538/675] Cleanup --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index e489d35f..44b615fc 100644 --- a/nextflow.config +++ b/nextflow.config @@ -63,7 +63,6 @@ params { igg_control = true peak_threshold = 0.05 replicate_threshold = 1 - //skip_peak_calling = false only_peak_calling = false // Reporting and Visualisation From 9b20adfd1d963073af1f08215c65364baec9000b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 15:06:02 +0100 Subject: [PATCH 539/675] Downgrade picard --- modules/nf-core/modules/picard/markduplicates/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index d20014bf..42344616 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -13,9 +13,9 @@ process PICARD_MARKDUPLICATES { conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0" + container "https://depot.galaxyproject.org/singularity/picard:2.23.9--0" } else { - container "quay.io/biocontainers/picard:2.25.7--hdfd78af_0" + container "quay.io/biocontainers/picard:2.23.9--0" } input: From 99448cabfa71d3813475b87818a8597d8f127012 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 15:46:33 +0100 Subject: [PATCH 540/675] Updated readme --- README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 54539418..ca9aad6b 100644 --- a/README.md +++ b/README.md @@ -16,30 +16,30 @@ ## Introduction -**nf-core/cutandrun** is a bioinformatics best-practise analysis pipeline for CUT&Run and CUT&Tag sequencing data analysis to study protein-DNA interactions and epigenomic profiling. +**nf-core/cutandrun** is a best-practice bioinformatic analysis pipeline for CUT&Run and CUT&Tag experimental protocols that where developed to study protein-DNA interactions and epigenomic profiling. -The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It uses Docker/Singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it much easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules) in order to make them available to all nf-core pipelines, and to everyone within the Nextflow community! +The pipeline is built using [Nextflow](https://www.nextflow.io), a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It is capable of using docker/singularity containers making installation trivial and results highly reproducible. The [Nextflow DSL2](https://www.nextflow.io/docs/latest/dsl2.html) implementation of this pipeline uses one container per process which makes it easier to maintain and update software dependencies. Where possible, these processes have been submitted to and installed from [nf-core/modules](https://github.com/nf-core/modules). - -On release, automated continuous integration tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/cutandrun/results). +The pipeline has been developed with continuous integration (CI) in mind. nf-core code and module linting as well as a battery of over 100 unit and integration tests run on pull request to the main repository and on release of the pipeline. On official release, automated CI tests run the pipeline on a full-sized dataset on the AWS cloud infrastructure. This ensures that the pipeline runs on AWS, has sensible resource allocation defaults set to run on real-world datasets, and permits the persistent storage of results to benchmark between pipeline releases and other analysis sources. The results obtained from the full-sized test can be viewed on the [nf-core website](https://nf-co.re/cutandrun/results). ## Pipeline summary -1. Merge re-sequenced FastQ files ([`cat`](http://www.linfo.org/cat.html)) -2. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -3. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/)) -4. Alignment to both target and spike-in genomes ([`Bowtie 2`](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml)) -5. Filter on quality, sort and index alignments ([`SAMtools`](https://sourceforge.net/projects/samtools/files/samtools/)) -6. Duplicate read marking ([`picard MarkDuplicates`](https://broadinstitute.github.io/picard/)) -7. Create bedGraph files ([`BEDTools`](https://github.com/arq5x/bedtools2/) -8. Create bigWig coverage files ([`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) -9. Peak calling specifically tailored for low background noise ([`SEACR`](https://github.com/FredHutch/SEACR)) -10. Quality control and analysis: - 1. Alignment, fragment length and peak analysis and replicate reproducibility ([`Python`](https://www.python.org/)) - 2. Differential peak analysis ([`DESeq2`](https://bioconductor.org/packages/release/bioc/html/DESeq2.html)) - 3. Heatmap peak analysis ([`deepTools`](https://github.com/deeptools/deepTools/)) -11. Genome browser session ([`IGV`](https://software.broadinstitute.org/software/igv/)) -12. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/)) +1. Check input files +2. Merge re-sequenced FastQ files ([`cat`](http://www.linfo.org/cat.html)) +3. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) +4. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/)) +5. Alignment to both target and spike-in genomes ([`Bowtie 2`](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml)) +6. Filter on quality, sort and index alignments ([`samtools`](https://sourceforge.net/projects/samtools/files/samtools/)) +7. Duplicate read marking ([`picard`](https://broadinstitute.github.io/picard/)) +8. Create bedGraph files ([`bedtools`](https://github.com/arq5x/bedtools2/) +9. Create bigWig coverage files ([`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) +10. Peak calling specifically tailored for low background noise experiments ([`SEACR`](https://github.com/FredHutch/SEACR)) +11. Consensus peak merging and reporting ([`bedtools`](https://github.com/arq5x/bedtools2/)) +12. Quality control and analysis: + 1. Alignment, fragment length and peak analysis and replicate reproducibility ([`python`](https://www.python.org/)) + 2. Heatmap peak analysis ([`deepTools`](https://github.com/deeptools/deepTools/)) +13. Genome browser session ([`IGV`](https://software.broadinstitute.org/software/igv/)) +14. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/)) ## Quick Start @@ -65,7 +65,7 @@ On release, automated continuous integration tests run the pipeline on a full-si nextflow run nf-core/cutandrun \ -profile \ --input samplesheet.csv \ - --genome GRCh37 + --genome GRCh38 ``` See [usage docs](https://nf-co.re/cutandrun/usage) for all of the available options when running the pipeline. From 11c7a2279de02f0c2086c76a49b405ef06445a54 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 15:06:02 +0100 Subject: [PATCH 541/675] Revert "Downgrade picard" This reverts commit 9b20adfd1d963073af1f08215c65364baec9000b. --- modules/nf-core/modules/picard/markduplicates/main.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index 42344616..d20014bf 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -13,9 +13,9 @@ process PICARD_MARKDUPLICATES { conda (params.enable_conda ? 'bioconda::picard=2.25.7' : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/picard:2.23.9--0" + container "https://depot.galaxyproject.org/singularity/picard:2.25.7--hdfd78af_0" } else { - container "quay.io/biocontainers/picard:2.23.9--0" + container "quay.io/biocontainers/picard:2.25.7--hdfd78af_0" } input: From e4cd57d0ad60f8b4a35c2483cbb9eb16b78ea5a2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 16:16:50 +0100 Subject: [PATCH 542/675] Updated usage --- docs/usage.md | 82 ++++++++++++++++++--------------------------------- 1 file changed, 28 insertions(+), 54 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index f250debc..96c42228 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -6,81 +6,55 @@ ## Samplesheet input -You will need to create a samplesheet file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 4 columns, and a header row as shown in the examples below. +You will need to create a samplesheet file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with the correct data structure as shown in the examples below. ```bash ---input '[path to samplesheet file]' +--input ``` -### Multiple replicates - -The `group` identifier is the same when you have multiple biological replicates from the same experimental group, just increment the `replicate` identifier appropriately. A special case for `group` is if you have non-specific IgG antibody control data that can be used for normalising your experimental CUT&Run (OR CUT&Tag) data. In this case, the `group` name for the IgG control data _must_ be set to `igg`. Below is an example for a single target group in triplicate, complemented by an IgG control duplicate: - -```bash -group,replicate,fastq_1,fastq_2 -target,1,H3K27me3_S1_L001_R1.fastq.gz,H3K27me3_S1_L001_R2.fastq.gz -target,2,H3K27me3_S2_L001_R1.fastq.gz,H3K27me3_S2_L001_R2.fastq.gz -target,3,H3K27me3_S3_L001_R1.fastq.gz,H3K27me3_S3_L001_R2.fastq.gz -igg,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz -igg,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz -``` - -There are 4 use-cases for various combinations of experimental and IgG control replicate numbers that are note-worthy: - -* One-to-one: -Across all experimental groups and IgG control, the number of replicates are the same and numbered in a uniform fashion. In this case, IgG normalisation at the peak-calling level is done for matching replicate numbers. -* Many experimental replicates, one IgG replicate: -Each experimental replicate will be normalised by the given single IgG replicate. -* Equal numbers of replicates across experimental groups and more than one IgG replicate: -If the user puts forward groups with equal amounts of uniformly numbered replicates, but different to the multiple IgG replicates, then a warning will show informing the user that just the first IgG replicate will be used for normalisation. -* Varying experimental and IgG replicates: -If the user puts forward groups with varying, ununiform experimental replicate numbers and more than one IgG replicate, an error will be thrown up and the pipeline will hault. If you wish to merge the IgG control data in this case, see next steps. - -It is _recommended_ to have an IgG control for normalising your experimental data and this is the default action for the pipeline. However, if you run the pipeline without IgG control data you must supply `--igg_control false`. - -### Multiple runs of the same library - -The `group` and `replicate` identifiers are the same when you have re-sequenced the same sample more than once (e.g. to increase sequencing depth), or if you would like to merge technical replicates. The pipeline will concatenate the raw reads before alignment. Below is an example for two samples, one experimental and one control, sequenced across multiple lanes: - -```bash -group,replicate,fastq_1,fastq_2 -target,1,H3K27me3_S1_L001_R1.fastq.gz,H3K27me3_S1_L001_R2.fastq.gz -target,1,H3K27me3_S1_L002_R1.fastq.gz,H3K27me3_S1_L002_R2.fastq.gz -igg,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz -igg,1,IGG_S1_L002_R1.fastq.gz,IGG_S1_L002_R2.fastq.gz -``` - -### Full design - -A final design file may look something like the one below. This is for one experimental group in triplicate where the last replicate of the `treatment` group has been sequenced twice, another experimental group in duplicate, and one IgG control group. +An example sample sheet structure is shown below. This defines two target experimental groups for the histone marks h3k27me3 and h3k4me3 with two biological replicates per group. Each antibody target also had an IgG control performed alongside. The two IgG experiments are configured as biological replicates with the `igg` group keyword with a unique control group assignment. The target experiments are then assigned to the igg control group using the `control_group` column. ```bash -group,replicate,fastq_1,fastq_2 -h3k27me3,1,H3K27me3_S1_L001_R1.fastq.gz,H3K27me3_S1_L001_R2.fastq.gz -h3k27me3,2,H3K27me3_S2_L001_R1.fastq.gz,H3K27me3_S2_L001_R2.fastq.gz -h3k27me3,3,H3K27me3_S3_L001_R1.fastq.gz,H3K27me3_S3_L001_R2.fastq.gz -h3k27me3,3,H3K27me3_S3_L002_R1.fastq.gz,H3K27me3_S3_L002_R2.fastq.gz -h3k4me3,1,H3K4me3_S1_L001_R1.fastq.gz,H3K4me3_S1_L001_R2.fastq.gz -h3k4me3,2,H3K4me3_S2_L001_R1.fastq.gz,H3K4me3_S2_L001_R2.fastq.gz -igg,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz -igg,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,H3K27ME3_S1_L001_R1.fastq.gz,H3K27ME3_S1_L001_R2.fastq.gz +h3k27me3,2,1,H3K27ME3_S2_L001_R1.fastq.gz,H3K27ME3_S2_L001_R2.fastq.gz +h3k4me3,1,2,H3K4ME3_S1_L001_R1.fastq.gz,H3K4ME3_S1_L001_R2.fastq.gz +h3k4me3,2,2,H3K4ME3_S2_L001_R1.fastq.gz,H3K4MES_S2_L001_R2.fastq.gz +igg,1,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz +igg,2,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz ``` | Column | Description | |----------------|-------------------------------------------------------------------------------------------------------------| | `group` | Group identifier for sample. This will be identical for replicate samples from the same experimental group. | | `replicate` | Integer representing replicate number. | +| `control_group` | Integer representing the IgG control group the target is assigned to. | | `fastq_1` | Full path to FastQ file for read 1. File has to be zipped and have the extension ".fastq.gz" or ".fq.gz". | | `fastq_2` | Full path to FastQ file for read 2. File has to be zipped and have the extension ".fastq.gz" or ".fq.gz". | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. +### Multiple replicates and IgG controls + +To assign biological replicates to the same group use the same group identifier but increment the `replicate` column appropriately. To merge multiple fastq files from the same library or to merge technical replicate data, use identical `group` AND `replicate` column identifiers. The pipeline will automatically merge these samples and treat them as one biological replicate. An example of this type of sample sheet configuration is shown below where each biological replicate has two fastq files: + +```bash +group,replicate,control_group,fastq_1,fastq_2 +h3k27me3,1,1,H3K27ME3_S1_L001_R1.fastq.gz,H3K27ME3_S1_L001_R2.fastq.gz +h3k27me3,1,1,H3K27ME3_S2_L001_R1.fastq.gz,H3K27ME3_S2_L001_R2.fastq.gz +h3k27me3,2,1,H3K27ME3_S3_L001_R1.fastq.gz,H3K27ME3_S3_L001_R2.fastq.gz +h3k27me3,2,1,H3K27ME3_S4_L001_R1.fastq.gz,H3K27ME3_S4_L001_R2.fastq.gz +igg,1,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz +``` + +To add any IgG controls that were processed, use the `igg` keyword in the `group` column and increment as with the target samples. The IgG control will be used to normalising your experimental CUT&Run (OR CUT&Tag) data. It is _recommended_ to have an IgG control for normalising your experimental data and this is the default action for the pipeline. However, if you run the pipeline without IgG control data you must supply `--igg_control false`. + ## Running the pipeline The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/cutandrun --input samplesheet.csv --genome GRCh37 -profile docker +nextflow run nf-core/cutandrun --input samplesheet.csv --genome GRCh38 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -120,7 +94,7 @@ Use this parameter to choose a configuration profile. Profiles can give configur Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Conda) - see below. When using Biocontainers, most of these software packaging methods pull Docker containers from quay.io e.g [FastQC](https://quay.io/repository/biocontainers/fastqc) except for Singularity which directly downloads Singularity images via https hosted by the [Galaxy project](https://depot.galaxyproject.org/singularity/) and Conda which downloads and installs software locally from [Bioconda](https://bioconda.github.io/). -> We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. +> We recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). From afa0fb9d573112356634292d7ec1cca8a89b80b0 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 16:54:57 +0100 Subject: [PATCH 543/675] Updated output --- docs/output.md | 178 ++++++++++++++++++++++++------------------------- 1 file changed, 87 insertions(+), 91 deletions(-) diff --git a/docs/output.md b/docs/output.md index bcf37821..1e2deb6d 100644 --- a/docs/output.md +++ b/docs/output.md @@ -2,7 +2,7 @@ ## Introduction -This document describes the output produced by the pipeline. Plots are taken from the python report which details summary details and analyses specific to CUT&Run/CUT&Tag data, and MultiQC report, which summarises results from tools used, at the end of the pipeline. +This document describes the output produced by the pipeline. Example plots are taken from the pdf report which details summary details and analyses specific to CUT&Run/CUT&Tag data, and the MultiQC report, which summarises results from some tools used, at the end of the pipeline. The directories listed below will be created in the results directory after the pipeline has finished. All paths are relative to the top-level results directory. @@ -10,39 +10,46 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -* [Preprocessing](#preprocessing) - * [cat](#cat) - Merge re-sequenced FastQ files - * [FastQC](#fastqc) - Raw read QC - * [TrimGalore](#trimgalore) - Adapter and quality trimming -* [Alignment](#alignment) - * [Bowtie 2](#bowtie-2) - Align reads to target and spike-in genomes -* [Alignment post-processing](#alignment-post-processing) - * [SAMtools](#samtools) - Quality filter, sort and index alignments - * [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking -* [Other steps](#other-steps) - * [Calculate scale factor](#scale-factor) - Normalise between samples - * [BEDTools and bedGraphToBigWig](#bedtools-and-bedgraphtobigwig) - Create bigWig coverage files -* [Peak calling](#peak-calling) - * [SEACR](#seacr) - Peak calling for high signal-noise data - * [Deeptools](#deeptools) - Analysis of peaks - * [BEDTools](#bedtools) - merge peaks to create consensus peaks -* [Summary and quality control](#summary-and-quality-control) - * [DESeq2](#deseq2) - PCA plot and differential peak analysis - * [Python reporting](#python-reporting) - * [MultiQC](#multiqc) - Present QC for raw reads, alignment, read counting and sample similarity - * [IGV](#igv) - Genome browser for viewing bigWigs in relation to genes -* [Workflow reporting and genomes](#workflow-reporting-and-genomes) - * [Reference genome files](#reference-genome-files) - Saving reference genome indices/files - * [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution +- [nf-core/cutandrun: Output](#nf-corecutandrun-output) + - [Introduction](#introduction) + - [Pipeline overview](#pipeline-overview) + - [Preprocessing](#preprocessing) + - [Samplesheet check](#samplesheet-check) + - [Fastq merging](#fastq-merging) + - [FastQC](#fastqc) + - [TrimGalore](#trimgalore) + - [Alignment](#alignment) + - [Bowtie 2](#bowtie-2) + - [Alignment post-processing](#alignment-post-processing) + - [samtools](#samtools) + - [picard MarkDuplicates/RemoveDuplicates](#picard-markduplicatesremoveduplicates) + - [Peak Calling](#peak-calling) + - [Bam to bedgraph](#bam-to-bedgraph) + - [Clip bedfiles](#clip-bedfiles) + - [Bed to bigwig](#bed-to-bigwig) + - [SEACR peak calling](#seacr-peak-calling) + - [BEDtools](#bedtools) + - [Reporting](#reporting) + - [Python reporting](#python-reporting) + - [MultiQC](#multiqc) + - [IGV](#igv) + - [Deeptools](#deeptools) + - [Workflow reporting and genomes](#workflow-reporting-and-genomes) + - [Reference genome files](#reference-genome-files) + - [Pipeline information](#pipeline-information) ## Preprocessing -### cat +### Samplesheet check + +The first step of the pipeline is to verify the samplesheet structure and experimental design to ensure that it is valid. + +### Fastq merging
    Output files -* `fastq/` +* `01_prealign/merged_fastq/` * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory.
    @@ -54,11 +61,11 @@ If multiple libraries/runs have been provided for the same sample in the input s
    Output files -* `fastqc/` +* `01_prealign/pretrim_fastqc/` * `*_fastqc.html`: FastQC report containing quality metrics. * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. -> **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `trimgalore/fastqc/` directory. +> **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `01_prealign/trimgalore/fastqc/` directory.
    @@ -73,10 +80,10 @@ If multiple libraries/runs have been provided for the same sample in the input s
    Output files -* `trimgalore/` +* `01_prealign/trimgalore/` * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. * `*_trimming_report.txt`: Log file generated by Trim Galore!. -* `trimgalore/fastqc/` +* `01_prealign/trimgalore/fastqc/` * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. @@ -95,26 +102,23 @@ If multiple libraries/runs have been provided for the same sample in the input s
    Output files -* `aligner/bowtie2/intermediate/` - * `.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. - * `.bam.bai`: BAI file for BAM. -* `aligner/bowtie2/intermediate/samtools_stats` - * `.bam.*stats`: various statistics regarding the BAM files. -* `aligner/bowtie2/spikein/` - * `.bam`: BAM file of reads aligned to the spike-in genome - * `.bam.bai`: BAI file for spike-in BAM. -* `aligner/bowtie2/spikein/samtools_stats` - * `.bam.*stats`: various statistics regarding the spike-in BAM files. +* `02_alignment/bowtie2`
    -Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowtie 2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml). A genome index is required to run Bowtie2 which is created automatically from the genome fasta input. By default, the only alignment files output are the quality filtered, marked and/or deduplicated alignment files. To output all alignment files including those directly from the aligner, set `--publish_align_intermed true`. By default, spike-in BAMs are not pubished to results. This can be overridden with `--save_spikein_aligned`. +Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowtie 2](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml). A genome index is required to run Bowtie2 which is created automatically from the genome fasta input. + +The pipeline will output the `.bam` files with index and samtools stats for only the final set by default. For example, the full pipeline will only output picard duplicates processed files as this is the final step before peak calling. If the pipeline is run with `--only_align`, then the `bam` files from the initial sorting and indexing will be copied to the output directory as the other steps are not run. + +If `--save_align_intermed` is specified then all the `bam` files from all stages will be copied over to the output directory. + +If `--save_spikein_aligned` is specified then the spike-in alignment files will also be published. ![MultiQC - Bowtie2 paired-end mapping stats](images/mqc_bowtie2_pe.png) ## Alignment post-processing -###  SAMtools +### samtools
    Output files @@ -127,70 +131,70 @@ Adapter-trimmed reads are mapped to the target and spike-in genomes using [Bowti
    -BAM files are filtered for a minimum quality score of 0 using [SAMtools](http://samtools.sourceforge.net/). If duplicate marking and deduplication is skipped, then these will be the final alignment files under `aligner/bowtie2/`. Otherwise, these files can be included in the output by specifying `--publish_align_intermed true`. +BAM files are filtered for a minimum quality score of 0 using [SAMtools](http://samtools.sourceforge.net/). -### picard MarkDuplicates +### picard MarkDuplicates/RemoveDuplicates
    Output files -* `aligner/bowtie2/` +* `02_alignment/bowtie2/target/markdup/` * `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. * `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. -* `aligner/bowtie2/picard_metrics` +* `02_alignment/bowtie2/target/markdup/picard_metrics` * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates.
    -By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to gauge the overall level of duplication in your samples. If your data includes IgG controls, these will additionally be deduplicated. You can skip this step via the `--skip_markduplicates` parameter. By default, this is the final processing step for the target BAM files and will appear in `aligner/bowtie2/`. However, if `--skip_markduplicates true` is set, this step will be skipped. +By default, the pipeline uses [picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) to *mark* the duplicate reads identified amongst the alignments to allow you to gauge the overall level of duplication in your samples. + +If your data includes IgG controls, these will additionally be de-duplicated. It is not the normal protocol to de-duplicate the target reads, however, if this is required, use the `--dedup_target_reads true` switch. ![MultiQC - Picard MarkDuplicates metrics plot](images/mqc_picard_markduplicates.png) -## Other steps +## Peak Calling -### BEDTools and bedGraphToBigWig +### Bam to bedgraph
    Output files -* `ucsc/` - * `*.bigWig`: bigWig coverage file. +* `03_peak_calling/01_bam_to_bedgraph` + * `*.bedgraph`: bedgraph coverage file.
    -The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an indexed binary format useful for displaying dense, continuous data in Genome Browsers such as the [UCSC](https://genome.ucsc.edu/cgi-bin/hgTracks) and [IGV](http://software.broadinstitute.org/software/igv/). This mitigates the need to load the much larger BAM files for data visualisation purposes which will be slower and result in memory issues. The bigWig format is also supported by various bioinformatics software for downstream processing such as meta-profile plotting. +Converts bam files to the bedgraph format. -## Peak calling +### Clip bedfiles -### SEACR +### Bed to bigwig
    Output files -* `seacr/` - * `.peaks*.bed`: BED file containing peak coordinates and peak signal. +* `03_peak_calling/03_bed_to_bigwig` + * `*.bigWig`: bigWig coverage file.
    -[SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. - -![Python reporting - peaks reproduced](images/py_reproduced_peaks.png) - -![Python reporting - aligned fragments within peaks](images/py_frags_in_peaks.png) +The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an indexed binary format useful for displaying dense, continuous data in Genome Browsers such as the [UCSC](https://genome.ucsc.edu/cgi-bin/hgTracks) and [IGV](http://software.broadinstitute.org/software/igv/). This mitigates the need to load the much larger BAM files for data visualisation purposes which will be slower and result in memory issues. The bigWig format is also supported by various bioinformatics software for downstream processing such as meta-profile plotting. -### Deeptools +### SEACR peak calling
    Output files -* `deeptools/heatmaps/` - * `.plotHeatmap.pdf`: heatmap PDF. - * `.computeMatrix.mat.gz`: heatmap matrix. - * `*.mat.tab`: matrix and heatmap configs. +* `03_peak_calling/04_called_peaks/` + * `.peaks*.bed`: BED file containing peak coordinates and peak signal.
    -[Deeptools](https://github.com/deeptools/deepTools/) sub-tools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. +[SEACR](https://github.com/FredHutch/SEACR) is a peak caller for data with low background-noise, so is well suited to CUT&Run/CUT&Tag data. SEACR can take in IgG control bedGraph files in order to avoid calling peaks in regions of the experimental data for which the IgG control is enriched. If `--igg_control false` is specified, SEACR calls enriched regions in target data by selecting the top 5% of regions by AUC by default. This threshold can be overwritten using `--peak_threshold`. + +![Python reporting - peaks reproduced](images/py_reproduced_peaks.png) + +![Python reporting - aligned fragments within peaks](images/py_frags_in_peaks.png) ### BEDtools @@ -211,29 +215,7 @@ The merge function from [BEDtools](https://github.com/arq5x/bedtools2) is used t ![Peak calling - group consensus peak plot](images/consensus_peaks.png) ![Peak calling - group consensus peak plot](images/all_consensus_peaks.png) -##  Summary and quality control - -###  DESeq2 - -
    -Output files - -* `deseq2_qc/` - * `*.plots.pdf`: File containing PCA and hierarchical clustering plots. - * `*.dds.RData`: File containing R `DESeqDataSet` object generated - by DESeq2, with either an rlog or vst `assay` storing the - variance-stabilised data. - * `*pca.vals.txt`: Matrix of values for the first 2 principal components. - * `*sample.dists.txt`: Sample distance matrix. - * `R_sessionInfo.log`: File containing information about R, the OS and attached or loaded packages. -* `deseq2_qc/size_factors/` - * `*.txt`, `*.RData`: Files containing DESeq2 sizeFactors per sample. - -
    - -[DESeq2](https://bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html) is one of the most commonly used software packages to perform differential expression analysis for RNA-seq datasets, but is used in this instance to compare between experimental CUT&Run datasets. - -The script included in the pipeline uses DESeq2 to normalise read counts across all of the provided samples in order to create a PCA plot and a clustered heatmap showing pairwise Euclidean distances between the samples in the experiment. These help to show the similarity between groups of samples and can reveal batch effects and other potential issues with the experiment. +##  Reporting ### Python reporting @@ -280,6 +262,20 @@ An IGV session file will be created at the end of the pipeline containing the no > **NB:** If you are not using an in-built genome provided by IGV you will need to load the annotation yourself e.g. in .gtf and/or .bed format. +### Deeptools + +
    +Output files + +* `deeptools/heatmaps/` + * `.plotHeatmap.pdf`: heatmap PDF. + * `.computeMatrix.mat.gz`: heatmap matrix. + * `*.mat.tab`: matrix and heatmap configs. + +
    + +[Deeptools](https://github.com/deeptools/deepTools/) sub-tools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. + ## Workflow reporting and genomes ### Reference genome files From fd7a6b52ddc8392a7c46e7c768c187698598fcf2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 16:59:20 +0100 Subject: [PATCH 544/675] updated ignore list --- .ecrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ecrc b/.ecrc index 9e8b2ee3..9d6340f8 100644 --- a/.ecrc +++ b/.ecrc @@ -1,3 +1,3 @@ { - "Exclude": ["README.md", "\\.bed$", "conf/igenomes.config"] + "Exclude": ["README.md", "docs/output.md", "docs/usage.md", "\\.bed$", "conf/igenomes.config"] } From 9b89dd73b9bdcee718dd6801a1dcdde3b801633e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 21:29:05 +0100 Subject: [PATCH 545/675] Updated linting --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 3b448773..a8eddeef 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -59,7 +59,7 @@ jobs: run: npm install -g editorconfig-checker - name: Run ECLint check - run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) + run: editorconfig-checker -exclude README.md,docs/output.md,docs/usage.md $(git ls-files | grep -v test) YAML: runs-on: ubuntu-latest From d1d20e1b7c6cf16ea4cbe6f7c7bd317457c5679b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 21:33:53 +0100 Subject: [PATCH 546/675] Updated linting --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index a8eddeef..3b448773 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -59,7 +59,7 @@ jobs: run: npm install -g editorconfig-checker - name: Run ECLint check - run: editorconfig-checker -exclude README.md,docs/output.md,docs/usage.md $(git ls-files | grep -v test) + run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) YAML: runs-on: ubuntu-latest From 767d08d0def66ece22bab405acbe228cea7aa284 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 21:41:01 +0100 Subject: [PATCH 547/675] Updated output --- docs/output.md | 52 +++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/output.md b/docs/output.md index 1e2deb6d..31508ca4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -11,32 +11,32 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: - [nf-core/cutandrun: Output](#nf-corecutandrun-output) - - [Introduction](#introduction) - - [Pipeline overview](#pipeline-overview) - - [Preprocessing](#preprocessing) - - [Samplesheet check](#samplesheet-check) - - [Fastq merging](#fastq-merging) - - [FastQC](#fastqc) - - [TrimGalore](#trimgalore) - - [Alignment](#alignment) - - [Bowtie 2](#bowtie-2) - - [Alignment post-processing](#alignment-post-processing) - - [samtools](#samtools) - - [picard MarkDuplicates/RemoveDuplicates](#picard-markduplicatesremoveduplicates) - - [Peak Calling](#peak-calling) - - [Bam to bedgraph](#bam-to-bedgraph) - - [Clip bedfiles](#clip-bedfiles) - - [Bed to bigwig](#bed-to-bigwig) - - [SEACR peak calling](#seacr-peak-calling) - - [BEDtools](#bedtools) - - [Reporting](#reporting) - - [Python reporting](#python-reporting) - - [MultiQC](#multiqc) - - [IGV](#igv) - - [Deeptools](#deeptools) - - [Workflow reporting and genomes](#workflow-reporting-and-genomes) - - [Reference genome files](#reference-genome-files) - - [Pipeline information](#pipeline-information) + - [Introduction](#introduction) + - [Pipeline overview](#pipeline-overview) + - [Preprocessing](#preprocessing) + - [Samplesheet check](#samplesheet-check) + - [Fastq merging](#fastq-merging) + - [FastQC](#fastqc) + - [TrimGalore](#trimgalore) + - [Alignment](#alignment) + - [Bowtie 2](#bowtie-2) + - [Alignment post-processing](#alignment-post-processing) + - [samtools](#samtools) + - [picard MarkDuplicates/RemoveDuplicates](#picard-markduplicatesremoveduplicates) + - [Peak Calling](#peak-calling) + - [Bam to bedgraph](#bam-to-bedgraph) + - [Clip bedfiles](#clip-bedfiles) + - [Bed to bigwig](#bed-to-bigwig) + - [SEACR peak calling](#seacr-peak-calling) + - [BEDtools](#bedtools) + - [Reporting](#reporting) + - [Python reporting](#python-reporting) + - [MultiQC](#multiqc) + - [IGV](#igv) + - [Deeptools](#deeptools) + - [Workflow reporting and genomes](#workflow-reporting-and-genomes) + - [Reference genome files](#reference-genome-files) + - [Pipeline information](#pipeline-information) ## Preprocessing From 6249d8f792941d4c823f517ebfbfe567d3269ab5 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 22:03:04 +0100 Subject: [PATCH 548/675] Updated output --- docs/output.md | 120 +++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 59 deletions(-) diff --git a/docs/output.md b/docs/output.md index 31508ca4..376d15e7 100644 --- a/docs/output.md +++ b/docs/output.md @@ -49,8 +49,8 @@ The first step of the pipeline is to verify the samplesheet structure and experi
    Output files -* `01_prealign/merged_fastq/` - * `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory. +- `01_prealign/merged_fastq/` + - `*.merged.fastq.gz`: If `--save_merged_fastq` is specified, concatenated FastQ files will be placed in this directory.
    @@ -61,9 +61,9 @@ If multiple libraries/runs have been provided for the same sample in the input s
    Output files -* `01_prealign/pretrim_fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. +- `01_prealign/pretrim_fastqc/` + - `*_fastqc.html`: FastQC report containing quality metrics. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. > **NB:** The FastQC plots in this directory are generated relative to the raw, input reads. They may contain adapter sequence and regions of low quality. To see how your reads look after adapter and quality trimming please refer to the FastQC reports in the `01_prealign/trimgalore/fastqc/` directory. @@ -80,12 +80,12 @@ If multiple libraries/runs have been provided for the same sample in the input s
    Output files -* `01_prealign/trimgalore/` - * `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. - * `*_trimming_report.txt`: Log file generated by Trim Galore!. -* `01_prealign/trimgalore/fastqc/` - * `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. - * `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images. +- `01_prealign/trimgalore/` + - `*.fq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. + - `*_trimming_report.txt`: Log file generated by Trim Galore!. +- `01_prealign/trimgalore/fastqc/` + - `*_fastqc.html`: FastQC report containing quality metrics for read 1 (*and read2 if paired-end*) **after** adapter trimming. + - `*_fastqc.zip`: Zip archive containing the FastQC report, tab-delimited data file and plot images.
    @@ -102,7 +102,7 @@ If multiple libraries/runs have been provided for the same sample in the input s
    Output files -* `02_alignment/bowtie2` +- `02_alignment/bowtie2`
    @@ -123,11 +123,11 @@ If `--save_spikein_aligned` is specified then the spike-in alignment files will
    Output files -* `aligner/bowtie2/intermediate/` - * `.filtered.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. - * `.filtered.bam.bai`: BAI file for BAM. -* `aligner/bowtie2/intermediate/samtools_stats` - * `.filtered.bam.*stats`: various statistics regarding the BAM files. +- `aligner/bowtie2/intermediate/` + - `.filtered.bam`: If `--publish_align_intermeds` is specified the original BAM file containing read alignments to the target genome will be placed in this directory. + - `.filtered.bam.bai`: BAI file for BAM. +- `aligner/bowtie2/intermediate/samtools_stats` + - `.filtered.bam.*stats`: various statistics regarding the BAM files.
    @@ -138,11 +138,11 @@ BAM files are filtered for a minimum quality score of 0 using [SAMtools](http://
    Output files -* `02_alignment/bowtie2/target/markdup/` - * `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. - * `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. -* `02_alignment/bowtie2/target/markdup/picard_metrics` - * `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates. +- `02_alignment/bowtie2/target/markdup/` + - `.markdup.bam`: Coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM file and so will be saved by default in the results directory. + - `.markdup.bam.bai`: BAI index file for coordinate sorted BAM file after duplicate marking. This is the final post-processed BAM index file and so will be saved by default in the results directory. +- `02_alignment/bowtie2/target/markdup/picard_metrics` + - `.markdup.MarkDuplicates.metrics.txt`: Metrics file from MarkDuplicates.
    @@ -159,8 +159,8 @@ If your data includes IgG controls, these will additionally be de-duplicated. It
    Output files -* `03_peak_calling/01_bam_to_bedgraph` - * `*.bedgraph`: bedgraph coverage file. +- `03_peak_calling/01_bam_to_bedgraph` + - `*.bedgraph`: bedgraph coverage file.
    @@ -173,8 +173,8 @@ Converts bam files to the bedgraph format.
    Output files -* `03_peak_calling/03_bed_to_bigwig` - * `*.bigWig`: bigWig coverage file. +- `03_peak_calling/03_bed_to_bigwig` + - `*.bigWig`: bigWig coverage file.
    @@ -185,8 +185,8 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i
    Output files -* `03_peak_calling/04_called_peaks/` - * `.peaks*.bed`: BED file containing peak coordinates and peak signal. +- `03_peak_calling/04_called_peaks/` + - `.peaks*.bed`: BED file containing peak coordinates and peak signal.
    @@ -201,12 +201,12 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i
    Output files -* `seacr/` - * `{group}.consensus_peaks.pdf`: schematic showing which consensus peaks are shared across replicates within groups - * `all_peaks.consensus_peaks.pdf`: schematic showing which consensus peaks are shared across all samples -* `seacr/consensus_peaks` - * `{group}.consensus.peaks.bed`: BED containing consensus peaks for each group - * `all_peaks.consensus.peaks.bed`: BED containing consensus peaks across all samples +- `seacr/` + - `{group}.consensus_peaks.pdf`: schematic showing which consensus peaks are shared across replicates within groups + - `all_peaks.consensus_peaks.pdf`: schematic showing which consensus peaks are shared across all samples +- `seacr/consensus_peaks` + - `{group}.consensus.peaks.bed`: BED containing consensus peaks for each group + - `all_peaks.consensus.peaks.bed`: BED containing consensus peaks across all samples
    @@ -222,10 +222,10 @@ The merge function from [BEDtools](https://github.com/arq5x/bedtools2) is used t
    Output files -* `reports/` - * `report.pdf`: PDF report of all plots. - * `*.png`: individual plots featured in the PDF report. - * `*.csv`: corresponding data used to produce the plot. +- `reports/` + - `report.pdf`: PDF report of all plots. + - `*.png`: individual plots featured in the PDF report. + - `*.csv`: corresponding data used to produce the plot.
    @@ -242,19 +242,21 @@ Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data a
    Output files -* `multiqc/` - * `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - * `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - * `multiqc_plots/`: directory containing static images from the report in various formats. +- `multiqc/` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. + +
    ### IGV
    Output files -* `igv/` - * `igv_session.xml`: IGV session. - * `*.txt`: IGV input file configurations. +- `igv/` + - `igv_session.xml`: IGV session. + - `*.txt`: IGV input file configurations.
    @@ -267,10 +269,10 @@ An IGV session file will be created at the end of the pipeline containing the no
    Output files -* `deeptools/heatmaps/` - * `.plotHeatmap.pdf`: heatmap PDF. - * `.computeMatrix.mat.gz`: heatmap matrix. - * `*.mat.tab`: matrix and heatmap configs. +- `deeptools/heatmaps/` + - `.plotHeatmap.pdf`: heatmap PDF. + - `.computeMatrix.mat.gz`: heatmap matrix. + - `*.mat.tab`: matrix and heatmap configs.
    @@ -283,12 +285,12 @@ An IGV session file will be created at the end of the pipeline containing the no
    Output files -* `genome/` - * `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. -* `genome/index/` - * `bowtie2`: Directory containing target Bowtie2 indices. -* `genome/spikein_index/` - * `bowtie2`: Directory containing spike-in Bowtie2 indices. +- `genome/` + - `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. +- `genome/index/` + - `bowtie2`: Directory containing target Bowtie2 indices. +- `genome/spikein_index/` + - `bowtie2`: Directory containing spike-in Bowtie2 indices.
    @@ -299,10 +301,10 @@ A number of genome-specific files are generated by the pipeline because they are
    Output files -* `pipeline_info/` - * Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. - * Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. - * Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. +- `pipeline_info/` + - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.csv`. + - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`.
    From 23fc5e975ae24cc76941c0eb4a71b55ba8e9cbd6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 9 Aug 2021 22:11:21 +0100 Subject: [PATCH 549/675] Updated output readme --- docs/output.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/output.md b/docs/output.md index 376d15e7..1492ea4c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -196,7 +196,7 @@ The [bigWig](https://genome.ucsc.edu/goldenpath/help/bigWig.html) format is an i ![Python reporting - aligned fragments within peaks](images/py_frags_in_peaks.png) -### BEDtools +### Bedtools
    Output files @@ -222,7 +222,7 @@ The merge function from [BEDtools](https://github.com/arq5x/bedtools2) is used t
    Output files -- `reports/` +- `04_reporting/qc/` - `report.pdf`: PDF report of all plots. - `*.png`: individual plots featured in the PDF report. - `*.csv`: corresponding data used to produce the plot. @@ -242,7 +242,7 @@ Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data a
    Output files -- `multiqc/` +- `04_reporting/multiqc/` - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. - `multiqc_plots/`: directory containing static images from the report in various formats. @@ -254,7 +254,7 @@ Additional QC and analysis pertaining particularly to CUT&Run and CUT&Tag data a
    Output files -- `igv/` +- `04_reporting/igv/` - `igv_session.xml`: IGV session. - `*.txt`: IGV input file configurations. @@ -269,7 +269,7 @@ An IGV session file will be created at the end of the pipeline containing the no
    Output files -- `deeptools/heatmaps/` +- `04_reporting/heatmaps//` - `.plotHeatmap.pdf`: heatmap PDF. - `.computeMatrix.mat.gz`: heatmap matrix. - `*.mat.tab`: matrix and heatmap configs. @@ -285,16 +285,16 @@ An IGV session file will be created at the end of the pipeline containing the no
    Output files -- `genome/` +- `00_genome/target/` - `*.fa`: If the `--save_reference` parameter is provided then all of the genome reference files will be placed in this directory. -- `genome/index/` +- `00_genome/target/index/` - `bowtie2`: Directory containing target Bowtie2 indices. -- `genome/spikein_index/` +- `00_genome/spikein/index/` - `bowtie2`: Directory containing spike-in Bowtie2 indices.
    -A number of genome-specific files are generated by the pipeline because they are required for the downstream processing of the results. If the `--save_reference` parameter is provided then these will be saved in the `genome/` directory. It is recommended to use the `--save_reference` parameter if you are using the pipeline to build new indices so that you can save them somewhere locally. The index building step can be quite a time-consuming process and it permits their reuse for future runs of the pipeline to save disk space. +A number of genome-specific files are generated by the pipeline because they are required for the downstream processing of the results. If the `--save_reference` parameter is provided then these will be saved in the `00_genome/` directory. It is recommended to use the `--save_reference` parameter if you are using the pipeline to build new indices so that you can save them somewhere locally. The index building step can be quite a time-consuming process and it permits their reuse for future runs of the pipeline to save disk space. ### Pipeline information From 2cf98e678da6ba3cba29f907a855933af696fd5c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 10 Aug 2021 11:13:28 +0100 Subject: [PATCH 550/675] Switched over all configs to main nf-core test data repo --- conf/test.config | 14 +++++++------- conf/test_full.config | 2 +- conf/test_full_small.config | 14 +++++++------- conf/test_no_igg.config | 14 +++++++------- conf/test_tech_reps.config | 14 +++++++------- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/conf/test.config b/conf/test.config index 86b7adb6..c72263b9 100644 --- a/conf/test.config +++ b/conf/test.config @@ -20,16 +20,16 @@ params { max_time = 6.h // Input data - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-small.csv' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-small.csv' // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' - bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' - gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' - gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' + gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 skip_upset_plots = true diff --git a/conf/test_full.config b/conf/test_full.config index a32ae138..33820156 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -15,6 +15,6 @@ params { config_profile_description = 'Full test dataset to check pipeline function' genome = 'GRCh38' - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' minimum_alignment_q_score = 10 } \ No newline at end of file diff --git a/conf/test_full_small.config b/conf/test_full_small.config index 8a255e20..9bff0fbd 100644 --- a/conf/test_full_small.config +++ b/conf/test_full_small.config @@ -8,16 +8,16 @@ params { max_time = 6.h // Input data - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-all-small.csv' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-all-small.csv' // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' - bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' - gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' - gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' + gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 } diff --git a/conf/test_no_igg.config b/conf/test_no_igg.config index ed56712e..437909f5 100644 --- a/conf/test_no_igg.config +++ b/conf/test_no_igg.config @@ -20,16 +20,16 @@ params { max_time = 6.h // Input data - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-noigg-small.csv' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-noigg-small.csv' // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' - bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' - gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' - gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' + gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 igg_control = false diff --git a/conf/test_tech_reps.config b/conf/test_tech_reps.config index 2bbe4f29..4048888a 100644 --- a/conf/test_tech_reps.config +++ b/conf/test_tech_reps.config @@ -20,16 +20,16 @@ params { max_time = 6.h // Input data - input = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/samplesheet/test-GSE145187-small-tech-reps.csv' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-small-tech-reps.csv' // Genome references - fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' - bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' - gtf = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' - gene_bed = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' + gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 skip_upset_plots = true From 0f49f18fd30e0f4870a26562f1f696406fa0139b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 10 Aug 2021 11:26:27 +0100 Subject: [PATCH 551/675] Updated output.md --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 1492ea4c..72bb9371 100644 --- a/docs/output.md +++ b/docs/output.md @@ -276,7 +276,7 @@ An IGV session file will be created at the end of the pipeline containing the no
    -[Deeptools](https://github.com/deeptools/deepTools/) sub-tools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. +[deeptools](https://github.com/deeptools/deepTools/) sub-tools computeMatrix and plotHeatmap are used to assess the distribution of fragments around genes and peaks. ## Workflow reporting and genomes From 635f2a6ebeb683684106f50e1fc3e0a996ec440a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 8 Sep 2021 12:11:28 +0100 Subject: [PATCH 552/675] BEDTOOLS_GENOMECOV_SCALE change to high --- modules/local/bedtools_genomecov_scale.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/bedtools_genomecov_scale.nf b/modules/local/bedtools_genomecov_scale.nf index 873810be..8e8da70b 100644 --- a/modules/local/bedtools_genomecov_scale.nf +++ b/modules/local/bedtools_genomecov_scale.nf @@ -6,7 +6,7 @@ options = initOptions(params.options) process BEDTOOLS_GENOMECOV_SCALE { tag "$meta.id" - label 'process_medium' + label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } From be97a94bc01af028c2c2962a756a81550b25f2a6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 9 Sep 2021 12:01:23 +0100 Subject: [PATCH 553/675] Removed consensus peak switch --- conf/test.config | 1 - conf/test_no_igg.config | 1 - conf/test_tech_reps.config | 1 - 3 files changed, 3 deletions(-) diff --git a/conf/test.config b/conf/test.config index c72263b9..dff72234 100644 --- a/conf/test.config +++ b/conf/test.config @@ -32,5 +32,4 @@ params { spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 - skip_upset_plots = true } \ No newline at end of file diff --git a/conf/test_no_igg.config b/conf/test_no_igg.config index 437909f5..fb0a23cd 100644 --- a/conf/test_no_igg.config +++ b/conf/test_no_igg.config @@ -33,5 +33,4 @@ params { minimum_alignment_q_score = 10 igg_control = false - skip_upset_plots = true } diff --git a/conf/test_tech_reps.config b/conf/test_tech_reps.config index 4048888a..693857ae 100644 --- a/conf/test_tech_reps.config +++ b/conf/test_tech_reps.config @@ -32,5 +32,4 @@ params { spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 - skip_upset_plots = true } \ No newline at end of file From 051374d14478b8c946d9b15013a2fd75557476c9 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 9 Sep 2021 12:01:38 +0100 Subject: [PATCH 554/675] Changed comments --- subworkflows/local/consensus_peaks.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/consensus_peaks.nf b/subworkflows/local/consensus_peaks.nf index a7b97164..484099a7 100644 --- a/subworkflows/local/consensus_peaks.nf +++ b/subworkflows/local/consensus_peaks.nf @@ -16,7 +16,7 @@ include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" workflow CONSENSUS_PEAKS { take: - bed // channel: [ val(meta), [ bed ] ] + bed // channel: [ val(meta), [ bed ], count] main: @@ -26,7 +26,7 @@ workflow CONSENSUS_PEAKS { // Merge peaks BEDTOOLS_MERGE ( SORT.out.file ) - // Optionally filter peaks on minimum replicate consensus and produce plot + // Filter peaks on minimum replicate consensus AWK ( BEDTOOLS_MERGE.out.bed ) // Plot consensus peak sets From 9d900d6221de6373f1356739b0668fa8b251f2a3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 9 Sep 2021 12:17:22 +0100 Subject: [PATCH 555/675] Consensus peak channel prep now filters out samples with only one rep --- workflows/cutandrun.nf | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 4b037204..aeb1df45 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -712,8 +712,15 @@ workflow CUTANDRUN { new_meta.put( "id", "all_samples" ) [ new_meta, row[1].flatten() ] } + .map { row -> + [ row[0], row[1], row[1].size() ] + } + .filter { row -> row[2] > 1 } + .map { row -> + [ row[0], row[1] ] + } .set { ch_seacr_bed_all } - // EXAMPLE CHANNEL STRUCT: [[id: all_samples], BED1, BED2, BEDn...] + // EXAMPLE CHANNEL STRUCT: [[id: all_samples], [BED1, BED2, BEDn...], count] //ch_seacr_bed_all | view /* @@ -736,8 +743,15 @@ workflow CUTANDRUN { new_meta.put( "id", row[0] ) [ new_meta, row[1].flatten() ] } + .map { row -> + [ row[0], row[1], row[1].size() ] + } + .filter { row -> row[2] > 1 } + .map { row -> + [ row[0], row[1] ] + } .set { ch_seacr_bed_group } - // EXAMPLE CHANNEL STRUCT: [[id: ], BED1, BED2, BEDn...] + // EXAMPLE CHANNEL STRUCT: [[id: ], [BED1, BED2, BEDn...], count] //ch_seacr_bed_group | view /* From cc1070f461210bc87387a0436e1893c4e9079ec6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 9 Sep 2021 12:29:20 +0100 Subject: [PATCH 556/675] Whitespace corrections --- workflows/cutandrun.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index aeb1df45..59be40f4 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -712,11 +712,11 @@ workflow CUTANDRUN { new_meta.put( "id", "all_samples" ) [ new_meta, row[1].flatten() ] } - .map { row -> + .map { row -> [ row[0], row[1], row[1].size() ] } .filter { row -> row[2] > 1 } - .map { row -> + .map { row -> [ row[0], row[1] ] } .set { ch_seacr_bed_all } @@ -743,11 +743,11 @@ workflow CUTANDRUN { new_meta.put( "id", row[0] ) [ new_meta, row[1].flatten() ] } - .map { row -> + .map { row -> [ row[0], row[1], row[1].size() ] } .filter { row -> row[2] > 1 } - .map { row -> + .map { row -> [ row[0], row[1] ] } .set { ch_seacr_bed_group } From b5f350041d5d78e0a6c17411dc08aeb57a9d18e0 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 9 Sep 2021 12:37:02 +0100 Subject: [PATCH 557/675] Peak calling tests now run on full_small dataset --- tests/test_verify_output_only_peak_calling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_verify_output_only_peak_calling.yml b/tests/test_verify_output_only_peak_calling.yml index f945d5b0..ad1d27a3 100644 --- a/tests/test_verify_output_only_peak_calling.yml +++ b/tests/test_verify_output_only_peak_calling.yml @@ -1,5 +1,5 @@ - name: test_verify_output_only_peak_calling - command: nextflow run main.nf -profile docker,test --only_peak_calling true --skip_fastqc true -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test_full_small --only_peak_calling true --skip_fastqc true -c tests/config/nextflow.config tags: - verify_output - verify_output_peak_calling From 5daad8756911b1f3880e87afd6aa0466fbd5fc76 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 14 Sep 2021 17:00:39 +0100 Subject: [PATCH 558/675] changed sort temp directory to working folder --- conf/modules.config | 6 +++--- modules/local/sort.nf | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9f87dbc2..1572120a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -277,7 +277,7 @@ params { args = "-f 1,2,6" suffix = ".frags" ext = "bed" - command = "| sort -k1,1 -k2,2n -k3,3n" + command = "| sort -T '.' -k1,1 -k2,2n -k3,3n" publish_dir = "03_peak_calling/06_fragments" } @@ -287,12 +287,12 @@ params { ext = "bed" publish_dir = "03_peak_calling/06_fragments" command = "'{print \$1, int((\$2 + \$3)/(2*w))*w + w/2, FILENAME}'" - command2 = "| sort -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -k1,1V -k2,2n" + command2 = "| sort -T '.' -k1,1V -k2,2n | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$3, \$1, \$4}' | sort -T '.' -k1,1V -k2,2n" } "samtools_frag_len" { args = "-F 0x04" - args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" + args2 = "awk -F'\\t' 'function abs(x){return ((x < 0.0) ? -x : x)} {print abs(\$9)}' | sort -T '.' | uniq -c | awk -v OFS=\"\\t\" '{print \$2, \$1/2}'" suffix = ".frag_len" publish_dir = "03_peak_calling/06_fragments" } diff --git a/modules/local/sort.nf b/modules/local/sort.nf index 871135a7..78b2593e 100644 --- a/modules/local/sort.nf +++ b/modules/local/sort.nf @@ -37,6 +37,6 @@ process SORT { String input_files = input.join(" ") """ - sort $options.args $input_files > ${prefix}.sort.${ext} + sort -T '.' $options.args $input_files > ${prefix}.sort.${ext} """ } From e9b13b6de359f8021003f33e30c84826cbff6a2c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 22 Sep 2021 09:50:02 +0100 Subject: [PATCH 559/675] Updated picard markdups --- modules.json | 2 +- .../modules/picard/markduplicates/main.nf | 7 +- .../modules/picard/markduplicates/meta.yml | 83 ++++++++++--------- 3 files changed, 49 insertions(+), 43 deletions(-) diff --git a/modules.json b/modules.json index ce4380e8..cb7f791e 100644 --- a/modules.json +++ b/modules.json @@ -31,7 +31,7 @@ "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, "picard/markduplicates": { - "git_sha": "c5235a983d454787fa0c3247b02086969217163b" + "git_sha": "b2a6f5409efa6eb065c8186c606e68ff8004ba51" }, "samtools/flagstat": { "git_sha": "c5235a983d454787fa0c3247b02086969217163b" diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index d20014bf..ac829515 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -23,6 +23,7 @@ process PICARD_MARKDUPLICATES { output: tuple val(meta), path("*.bam") , emit: bam + tuple val(meta), path("*.bai") , optional:true, emit: bai tuple val(meta), path("*.metrics.txt"), emit: metrics path "*.version.txt" , emit: version @@ -40,9 +41,9 @@ process PICARD_MARKDUPLICATES { -Xmx${avail_mem}g \\ MarkDuplicates \\ $options.args \\ - INPUT=$bam \\ - OUTPUT=${prefix}.bam \\ - METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt + -I $bam \\ + -O ${prefix}.bam \\ + -M ${prefix}.MarkDuplicates.metrics.txt echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d: > ${software}.version.txt """ diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml index 6420ce9a..b651b3a0 100644 --- a/modules/nf-core/modules/picard/markduplicates/meta.yml +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -1,46 +1,51 @@ name: picard_markduplicates description: Locate and tag duplicate reads in a BAM file keywords: - - markduplicates - - pcr - - duplicates - - bam - - sam - - cram + - markduplicates + - pcr + - duplicates + - bam + - sam + - cram tools: - - picard: - description: | - A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) - data and formats such as SAM/BAM/CRAM and VCF. - homepage: https://broadinstitute.github.io/picard/ - documentation: https://broadinstitute.github.io/picard/ + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file with duplicate reads marked/removed - pattern: "*.{bam}" - - metrics: - type: file - description: Duplicate metrics file generated by picard - pattern: "*.{metrics.txt}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" + - bai: + type: file + description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag + pattern: "*.{bai}" + - metrics: + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" authors: - - "@drpatelh" + - "@drpatelh" + - "@projectoriented" From ead3640254c146ae1f288c2d67d95f9db7c376e6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 22 Sep 2021 09:54:46 +0100 Subject: [PATCH 560/675] Tidy up --- subworkflows/local/calculate_fragments.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf index 40bbdd0d..a49845b8 100644 --- a/subworkflows/local/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -9,7 +9,7 @@ params.awk_options = [:] params.cut_options = [:] include { SAMTOOLS_VIEW_SORT_STATS } from "./samtools_view_sort_stats" addParams( samtools_options: params.samtools_options, samtools_view_options: params.samtools_view_options ) -include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/modules/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) +include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/modules/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) include { AWK } from "../../modules/local/awk" addParams( options: params.awk_options ) include { CUT } from "../../modules/local/cut" addParams( options: params.cut_options ) From 97657f8721b9008bdb07f7bd43ca29ceff24d0a1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 22 Sep 2021 09:54:57 +0100 Subject: [PATCH 561/675] Removed local bamtobed module --- modules/local/bedtools_bamtobed.nf | 36 ------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 modules/local/bedtools_bamtobed.nf diff --git a/modules/local/bedtools_bamtobed.nf b/modules/local/bedtools_bamtobed.nf deleted file mode 100644 index b556900f..00000000 --- a/modules/local/bedtools_bamtobed.nf +++ /dev/null @@ -1,36 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process BEDTOOLS_BAMTOBED { - tag "$meta.id" - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - - conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" - } else { - container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" - } - - input: - tuple val(meta), path(bam) - - output: - tuple val(meta), path("*.bed"), emit: bed - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - - """ - bedtools bamtobed -i $bam $options.args > ${prefix}.bed - bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt - """ -} From cfe177aeea38b6ba9877b7dacb7f82dec1d4b769 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 22 Sep 2021 10:11:45 +0100 Subject: [PATCH 562/675] Removed guniz from local modules --- modules/local/gunzip.nf | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 modules/local/gunzip.nf diff --git a/modules/local/gunzip.nf b/modules/local/gunzip.nf deleted file mode 100644 index d6bbe045..00000000 --- a/modules/local/gunzip.nf +++ /dev/null @@ -1,35 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -process GUNZIP { - tag "$archive" - label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" - } else { - container "biocontainers/biocontainers:v1.2.0_cv1" - } - - input: - path archive - - output: - path "$gunzip", emit: gunzip - path "*.version.txt", emit: version - - script: - def software = getSoftwareName(task.process) - gunzip = archive.toString() - '.gz' - """ - gunzip -f $options.args $archive - echo \$(gunzip --version 2>&1) | sed 's/^.*(gzip) //; s/ Copyright.*\$//' > ${software}.version.txt - """ -} From 5de503d475f6ff89406195315ff5300d33fdd1e3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 22 Sep 2021 10:16:05 +0100 Subject: [PATCH 563/675] Removed local ucsc bedclip module --- modules/local/ucsc_bedclip.nf | 38 ----------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 modules/local/ucsc_bedclip.nf diff --git a/modules/local/ucsc_bedclip.nf b/modules/local/ucsc_bedclip.nf deleted file mode 100644 index fdc16d98..00000000 --- a/modules/local/ucsc_bedclip.nf +++ /dev/null @@ -1,38 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -def VERSION = '377' - -process UCSC_BEDCLIP { - tag "$meta.id" - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - - conda (params.enable_conda ? "bioconda::ucsc-bedclip=377" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/ucsc-bedclip:377--h446ed27_1" - } else { - container "quay.io/biocontainers/ucsc-bedclip:377--h446ed27_1" - } - - input: - tuple val(meta), path(bedgraph) - path sizes - - output: - tuple val(meta), path("*.bedGraph"), emit: bedgraph - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - """ - bedClip $bedgraph $sizes ${prefix}.bedGraph - echo $VERSION > ${software}.version.txt - """ -} From a09abb4e34511ee845739403fd280b0fcfe5228f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 22 Sep 2021 15:31:59 +0100 Subject: [PATCH 564/675] Rolled back picard update due to error --- modules.json | 2 +- .../modules/picard/markduplicates/main.nf | 7 +- .../modules/picard/markduplicates/meta.yml | 83 +++++++++---------- 3 files changed, 43 insertions(+), 49 deletions(-) diff --git a/modules.json b/modules.json index cb7f791e..ce4380e8 100644 --- a/modules.json +++ b/modules.json @@ -31,7 +31,7 @@ "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, "picard/markduplicates": { - "git_sha": "b2a6f5409efa6eb065c8186c606e68ff8004ba51" + "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "samtools/flagstat": { "git_sha": "c5235a983d454787fa0c3247b02086969217163b" diff --git a/modules/nf-core/modules/picard/markduplicates/main.nf b/modules/nf-core/modules/picard/markduplicates/main.nf index ac829515..d20014bf 100644 --- a/modules/nf-core/modules/picard/markduplicates/main.nf +++ b/modules/nf-core/modules/picard/markduplicates/main.nf @@ -23,7 +23,6 @@ process PICARD_MARKDUPLICATES { output: tuple val(meta), path("*.bam") , emit: bam - tuple val(meta), path("*.bai") , optional:true, emit: bai tuple val(meta), path("*.metrics.txt"), emit: metrics path "*.version.txt" , emit: version @@ -41,9 +40,9 @@ process PICARD_MARKDUPLICATES { -Xmx${avail_mem}g \\ MarkDuplicates \\ $options.args \\ - -I $bam \\ - -O ${prefix}.bam \\ - -M ${prefix}.MarkDuplicates.metrics.txt + INPUT=$bam \\ + OUTPUT=${prefix}.bam \\ + METRICS_FILE=${prefix}.MarkDuplicates.metrics.txt echo \$(picard MarkDuplicates --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d: > ${software}.version.txt """ diff --git a/modules/nf-core/modules/picard/markduplicates/meta.yml b/modules/nf-core/modules/picard/markduplicates/meta.yml index b651b3a0..6420ce9a 100644 --- a/modules/nf-core/modules/picard/markduplicates/meta.yml +++ b/modules/nf-core/modules/picard/markduplicates/meta.yml @@ -1,51 +1,46 @@ name: picard_markduplicates description: Locate and tag duplicate reads in a BAM file keywords: - - markduplicates - - pcr - - duplicates - - bam - - sam - - cram + - markduplicates + - pcr + - duplicates + - bam + - sam + - cram tools: - - picard: - description: | - A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) - data and formats such as SAM/BAM/CRAM and VCF. - homepage: https://broadinstitute.github.io/picard/ - documentation: https://broadinstitute.github.io/picard/ + - picard: + description: | + A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) + data and formats such as SAM/BAM/CRAM and VCF. + homepage: https://broadinstitute.github.io/picard/ + documentation: https://broadinstitute.github.io/picard/ input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file - pattern: "*.{bam}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file + pattern: "*.{bam}" output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - bam: - type: file - description: BAM file with duplicate reads marked/removed - pattern: "*.{bam}" - - bai: - type: file - description: An optional BAM index file. If desired, --CREATE_INDEX must be passed as a flag - pattern: "*.{bai}" - - metrics: - type: file - description: Duplicate metrics file generated by picard - pattern: "*.{metrics.txt}" - - version: - type: file - description: File containing software version - pattern: "*.{version.txt}" + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM file with duplicate reads marked/removed + pattern: "*.{bam}" + - metrics: + type: file + description: Duplicate metrics file generated by picard + pattern: "*.{metrics.txt}" + - version: + type: file + description: File containing software version + pattern: "*.{version.txt}" authors: - - "@drpatelh" - - "@projectoriented" + - "@drpatelh" From b6a78e36a7857520796bad380f93205e8acaebb1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 23 Sep 2021 14:47:23 +0100 Subject: [PATCH 565/675] Removed custom cat fastq module as nf-core one is fixed --- modules/local/cat_fastq.nf | 59 -------------------------------------- workflows/cutandrun.nf | 2 +- 2 files changed, 1 insertion(+), 60 deletions(-) delete mode 100644 modules/local/cat_fastq.nf diff --git a/modules/local/cat_fastq.nf b/modules/local/cat_fastq.nf deleted file mode 100644 index 4cf541ec..00000000 --- a/modules/local/cat_fastq.nf +++ /dev/null @@ -1,59 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles } from './functions' - -params.options = [:] -options = initOptions(params.options) - -/* - * Concatenate FastQ files - */ -process CAT_FASTQ { - tag "$meta.id" - label 'process_low' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:'merged_fastq', publish_id:meta.id) } - - conda (params.enable_conda ? "conda-forge::sed=4.7" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://containers.biocontainers.pro/s3/SingImgsRepo/biocontainers/v1.2.0_cv1/biocontainers_v1.2.0_cv1.img" - } else { - container "biocontainers/biocontainers:v1.2.0_cv1" - } - - input: - tuple val(meta), path(reads) - - output: - tuple val(meta), path("*.merged.fastq.gz"), emit: reads - - script: - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - readList = reads.collect{it.toString()} - if (!meta.single_end) { - if (readList.size > 2) { - def read1 = [] - def read2 = [] - readList.eachWithIndex{ v, ix -> ( ix & 1 ? read2 : read1 ) << v } - """ - cat ${read1.sort().join(' ')} > ${prefix}_1.merged.fastq.gz - cat ${read2.sort().join(' ')} > ${prefix}_2.merged.fastq.gz - """ - } else { - """ - ln -s ${reads[0]} ${prefix}_1.merged.fastq.gz - ln -s ${reads[1]} ${prefix}_2.merged.fastq.gz - """ - } - } else { - if (readList.size > 1) { - """ - cat ${readList.sort().join(' ')} > ${prefix}.merged.fastq.gz - """ - } else { - """ - ln -s $reads ${prefix}.merged.fastq.gz - """ - } - } -} diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 59be40f4..68f07991 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -280,7 +280,7 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title * MODULES */ include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -include { CAT_FASTQ } from "../modules/local/cat_fastq" addParams( options: cat_fastq_options ) +include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) From 60627a6a83a96b4ccfcea61b8c5afaaa73af8d73 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 24 Sep 2021 10:06:29 +0100 Subject: [PATCH 566/675] Added support for missing genome blacklist files --- conf/test_fasta_only.config | 20 ++++++++++++++++++++ lib/WorkflowCutandrun.groovy | 8 ++++++++ nextflow.config | 1 + tests/test_param_check.yml | 13 +++++++++++++ workflows/cutandrun.nf | 10 +++++++++- 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 conf/test_fasta_only.config create mode 100644 tests/test_param_check.yml diff --git a/conf/test_fasta_only.config b/conf/test_fasta_only.config new file mode 100644 index 00000000..eefa0323 --- /dev/null +++ b/conf/test_fasta_only.config @@ -0,0 +1,20 @@ +params { + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function with custom genome files except fasta and bt index' + + // Limit resources so that this can run CI + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h + + // Input data + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-small.csv' + + // Genome references + fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz' + bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' + spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + + minimum_alignment_q_score = 10 +} \ No newline at end of file diff --git a/lib/WorkflowCutandrun.groovy b/lib/WorkflowCutandrun.groovy index 7b77a800..22240162 100755 --- a/lib/WorkflowCutandrun.groovy +++ b/lib/WorkflowCutandrun.groovy @@ -122,4 +122,12 @@ class WorkflowCutandrun { "===================================================================================" } + // + // Print a warning if not blacklist detected + // + private static void blacklistWarn(log) { + log.warn "=============================================================================\n" + + " No genome blacklist file specified, switching to dummy empty file...\n" + + "===================================================================================" + } } diff --git a/nextflow.config b/nextflow.config index 44b615fc..6736abf9 100644 --- a/nextflow.config +++ b/nextflow.config @@ -175,6 +175,7 @@ profiles { local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control + test_fasta_only { includeConfig "conf/test_fasta_only.config" } // Runs a single sample with an IgG control but with no extra genome files just as bed files and black lists test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control test_full_small { includeConfig "conf/test_full_small.config" } // Runs a full experimental configuration but with a small dataset test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control diff --git a/tests/test_param_check.yml b/tests/test_param_check.yml new file mode 100644 index 00000000..36824c29 --- /dev/null +++ b/tests/test_param_check.yml @@ -0,0 +1,13 @@ +- name: test_param_check_custom_genome_blacklist + command: nextflow run main.nf -profile docker,test_fasta_only --only_input true --gtf https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz --blacklist ./assets/blacklists/GRCh37-blacklist.bed -c tests/config/nextflow.config + tags: + - params + - params_customgenome + - params_customgenome_blacklist + +- name: test_param_check_custom_genome_noblacklist + command: nextflow run main.nf -profile docker,test_fasta_only --only_input true --gtf https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz -c tests/config/nextflow.config + tags: + - params + - params_customgenome + - params_customgenome_noblacklist \ No newline at end of file diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 68f07991..f0e58594 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -24,7 +24,15 @@ for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true // Check mandatory parameters that cannot be checked in the groovy lib as we want a channel for them if (params.input) { ch_input = file(params.input) } else { exit 1, "Input samplesheet not specified!" } -if (params.blacklist) { ch_blacklist = file(params.blacklist) } else { exit 1, "Genome blacklist file not specified!" } + +ch_blacklist = Channel.empty() +if (params.blacklist) { + ch_blacklist = file(params.blacklist) +} +else { + ch_blacklist = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) + WorkflowCutandrun.blacklistWarn(log) +} // Save AWS IGenomes file containing annotation version def anno_readme = params.genomes[ params.genome ]?.readme From ff3985d959c28f2acd817ed33e52951cc1f02c3c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 27 Sep 2021 09:51:57 +0100 Subject: [PATCH 567/675] Heatmaps no longer show black for 0 --- conf/modules.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 1572120a..6901f521 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -205,12 +205,12 @@ params { } "dt_compute_mat_gene" { - args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZeros" + args = "scale-regions --beforeRegionStartLength 3000 --regionBodyLength 5000 --afterRegionStartLength 3000 --skipZeros --missingDataAsZero" publish_dir = "04_reporting/heatmaps/gene" } "dt_compute_mat_peaks" { - args = "reference-point -a 3000 -b 3000 --referencePoint center --skipZeros" + args = "reference-point -a 3000 -b 3000 --referencePoint center --skipZeros --missingDataAsZero" publish_dir = "04_reporting/heatmaps/peaks" } From bed913cce2372bac9d1bdcb5e78e8c1ef2cb3ff2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 27 Sep 2021 09:55:11 +0100 Subject: [PATCH 568/675] Updated warning --- lib/WorkflowCutandrun.groovy | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/WorkflowCutandrun.groovy b/lib/WorkflowCutandrun.groovy index 22240162..16f7494d 100755 --- a/lib/WorkflowCutandrun.groovy +++ b/lib/WorkflowCutandrun.groovy @@ -82,10 +82,6 @@ class WorkflowCutandrun { private static void ncbiGenomeWarn(log) { log.warn "=============================================================================\n" + " When using '--genome GRCh38' the assembly is from the NCBI and NOT Ensembl.\n" + - " Biotype QC will be skipped to circumvent the issue below:\n" + - " https://github.com/nf-core/rnaseq/issues/460\n\n" + - " If you would like to use the soft-masked Ensembl assembly instead please see:\n" + - " https://github.com/nf-core/rnaseq/issues/159#issuecomment-501184312\n" + "===================================================================================" } From 268b68ba820c6c60df36c6e5f2583e186b5de2bd Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 27 Sep 2021 14:26:56 +0100 Subject: [PATCH 569/675] Updated blacklists for test configs --- conf/test.config | 2 +- conf/test_full.config | 6 ++++++ conf/test_full_small.config | 2 +- conf/test_no_igg.config | 2 +- conf/test_tech_reps.config | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/conf/test.config b/conf/test.config index dff72234..01775813 100644 --- a/conf/test.config +++ b/conf/test.config @@ -27,7 +27,7 @@ params { bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' diff --git a/conf/test_full.config b/conf/test_full.config index 33820156..5d259c85 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -16,5 +16,11 @@ params { genome = 'GRCh38' input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' + + // // Genome references + // blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + // spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + // spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + minimum_alignment_q_score = 10 } \ No newline at end of file diff --git a/conf/test_full_small.config b/conf/test_full_small.config index 9bff0fbd..7867bb4a 100644 --- a/conf/test_full_small.config +++ b/conf/test_full_small.config @@ -15,7 +15,7 @@ params { bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' diff --git a/conf/test_no_igg.config b/conf/test_no_igg.config index fb0a23cd..e450f2c3 100644 --- a/conf/test_no_igg.config +++ b/conf/test_no_igg.config @@ -27,7 +27,7 @@ params { bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' diff --git a/conf/test_tech_reps.config b/conf/test_tech_reps.config index 693857ae..2791a596 100644 --- a/conf/test_tech_reps.config +++ b/conf/test_tech_reps.config @@ -27,7 +27,7 @@ params { bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz' gtf = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz' gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' - blacklist = "${projectDir}/assets/blacklists/GRCh37-blacklist.bed" + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' From 1e6c714b6450fc59d69184889e1e259670c58796 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 27 Sep 2021 14:27:21 +0100 Subject: [PATCH 570/675] Added genome refs for full test --- conf/test_full.config | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index 5d259c85..15248927 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -17,10 +17,10 @@ params { genome = 'GRCh38' input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' - // // Genome references - // blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - // spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - // spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + // Genome references + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 } \ No newline at end of file From 645d77d7a6615239d07b2b496433ab583fe3e0b8 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 27 Sep 2021 14:28:04 +0100 Subject: [PATCH 571/675] removed genome refs for test full --- conf/test_full.config | 5 ----- 1 file changed, 5 deletions(-) diff --git a/conf/test_full.config b/conf/test_full.config index 15248927..f8e59bd7 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -17,10 +17,5 @@ params { genome = 'GRCh38' input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-all.csv' - // Genome references - blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' - minimum_alignment_q_score = 10 } \ No newline at end of file From 638f86f645e460f57e94e7e020d5c9d749a6643a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 27 Sep 2021 14:31:30 +0100 Subject: [PATCH 572/675] Updated bug where if you didnt specify a spike-in genome, the human bowtie2 index would be chosen --- main.nf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/main.nf b/main.nf index 5aa3910f..3fc30fe9 100644 --- a/main.nf +++ b/main.nf @@ -35,11 +35,10 @@ params.blacklist = WorkflowMain.getGenomeAttribute(params, 'blacklist') */ if (!params.spikein_fasta) { - params.spikein_bowtie2 = WorkflowMain.getGenomeAttribute(params, 'bowtie2') + params.spikein_bowtie2 = WorkflowMain.getGenomeAttributeSpikeIn(params, 'bowtie2') } else { - params.spikein_bowtie2 = null + params.spikein_bowtie2 = null } - params.spikein_fasta = WorkflowMain.getGenomeAttributeSpikeIn(params, 'fasta') /* From 55008ce4e7131296b832bd2d98c7c648779c0e5e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 28 Sep 2021 11:26:07 +0100 Subject: [PATCH 573/675] Sorted report columns --- bin/lib/reports.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index b2ff8513..143dd2dc 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -343,6 +343,9 @@ def generate_plots(self): self.load_data() self.annotate_data_table() + # Sort tables + self.data_table = self.data_table.sort_values('group') + # Plot 1 multi_plot, data1 = self.alignment_summary() plots["01_01_seq_depth"] = multi_plot[0] From 961fb144ca1a18653d37b041152b21e327327361 Mon Sep 17 00:00:00 2001 From: Chris Fields Date: Sun, 3 Oct 2021 22:34:46 -0500 Subject: [PATCH 574/675] fix small error popping up with newer releases of Nextflow --- main.nf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.nf b/main.nf index 5aa3910f..56dc5272 100644 --- a/main.nf +++ b/main.nf @@ -56,12 +56,13 @@ WorkflowMain.initialise(workflow, params, log) ======================================================================================== */ +include { CUTANDRUN } from './workflows/cutandrun' + workflow NFCORE_CUTANDRUN { /* * WORKFLOW: Run main nf-core/cutandrun analysis pipeline */ - include { CUTANDRUN } from './workflows/cutandrun' CUTANDRUN () } From fc630f2c03fcff2ff2f849c1896fcad2b04a637a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 10:43:33 +0100 Subject: [PATCH 575/675] Run multiqc when only running partial parts of the pipeline --- workflows/cutandrun.nf | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index f0e58594..ad3473fd 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -143,12 +143,12 @@ if(params.only_filtering) { run_remove_dups = false run_peak_calling = false run_reporting = false - run_multiqc = false + run_multiqc = true } if(params.only_peak_calling) { run_reporting = false - run_multiqc = false + run_multiqc = true } /* @@ -350,6 +350,7 @@ workflow CUTANDRUN { // Init ch_software_versions = Channel.empty() + ch_frag_len_multiqc = Channel.empty() /* * SUBWORKFLOW: Uncompress and prepare reference genome files @@ -920,7 +921,6 @@ workflow CUTANDRUN { /* * MODULE: Generate python reporting using mixture of meta-data and direct file processing */ - ch_frag_len_multiqc = Channel.empty() GENERATE_REPORTS( EXPORT_META.out.csv, // meta-data report stats SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments @@ -932,23 +932,23 @@ workflow CUTANDRUN { ) ch_frag_len_multiqc = GENERATE_REPORTS.out.frag_len_multiqc ch_software_versions = ch_software_versions.mix(GENERATE_REPORTS.out.version.ifEmpty(null)) - - /* - * MODULE: Collect software versions used in pipeline - */ - ch_software_versions - .map { it -> if (it) [ it.baseName, it ] } - .groupTuple() - .map { it[1][0] } - .flatten() - .collect() - .set { ch_software_versions } - - GET_SOFTWARE_VERSIONS ( - ch_software_versions.map { it }.collect() - ) } + /* + * MODULE: Collect software versions used in pipeline + */ + ch_software_versions + .map { it -> if (it) [ it.baseName, it ] } + .groupTuple() + .map { it[1][0] } + .flatten() + .collect() + .set { ch_software_versions } + + GET_SOFTWARE_VERSIONS ( + ch_software_versions.map { it }.collect() + ) + /* * MODULE: Multiqc */ From c58f78fc133b0998c0ed17a5c1d3afb8ac300032 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:08:29 +0100 Subject: [PATCH 576/675] Added CI support for testing against edge versions --- .github/workflows/ci.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ad609fa5..beab151e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,6 +63,33 @@ jobs: - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile docker,test_full_small + ##################################### + ### EDGE VERSION INTEGRATION TEST ### + ##################################### + test: + name: Run standard pipeline test + # Only run on push if this is the nf-core dev branch (merged PRs) + if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/cutandrun') }} + runs-on: ubuntu-latest + env: + NXF_VER: '' + NXF_EDGE: 1 + NXF_ANSI_LOG: false + steps: + - name: Check out pipeline code + uses: actions/checkout@v2 + + - name: Install Nextflow + run: | + wget -qO- get.nextflow.io | bash + sudo mv nextflow /usr/local/bin/ + + - name: Run pipeline with test data + run: | + nextflow run ${GITHUB_WORKSPACE} -profile docker,test + + + NXF_EDGE: 1 ############################## ### UNIT TESTS ### ############################## From 13329bd86621becc99e46fc10d7c6cddbdab1ea1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:09:28 +0100 Subject: [PATCH 577/675] Updated CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index beab151e..975150fb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,7 +67,7 @@ jobs: ### EDGE VERSION INTEGRATION TEST ### ##################################### test: - name: Run standard pipeline test + name: Run standard pipeline test (edge version) # Only run on push if this is the nf-core dev branch (merged PRs) if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/cutandrun') }} runs-on: ubuntu-latest From 69185e2038cd1e7030f5bca8509c4d154227b13e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:10:18 +0100 Subject: [PATCH 578/675] Updated CI --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 975150fb..19e3745d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,9 +87,6 @@ jobs: - name: Run pipeline with test data run: | nextflow run ${GITHUB_WORKSPACE} -profile docker,test - - - NXF_EDGE: 1 ############################## ### UNIT TESTS ### ############################## From e15dee376218c21f54827507dd0f0ca4b3f2f1cb Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:10:55 +0100 Subject: [PATCH 579/675] Updated CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 19e3745d..ee9c6dca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -66,7 +66,7 @@ jobs: ##################################### ### EDGE VERSION INTEGRATION TEST ### ##################################### - test: + test_edge: name: Run standard pipeline test (edge version) # Only run on push if this is the nf-core dev branch (merged PRs) if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/cutandrun') }} From 761d9ca79f0bfe391e58b39154c528a5f64a1e4d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:12:25 +0100 Subject: [PATCH 580/675] Updated CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee9c6dca..27cf1f16 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,7 +72,7 @@ jobs: if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/cutandrun') }} runs-on: ubuntu-latest env: - NXF_VER: '' + NXF_VER: '*-edge' NXF_EDGE: 1 NXF_ANSI_LOG: false steps: From 407f0a7055ece953ca4cfcef9f79e672866f1a53 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:14:54 +0100 Subject: [PATCH 581/675] Updated CI --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 27cf1f16..bf5b2a6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,7 +72,7 @@ jobs: if: ${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'nf-core/cutandrun') }} runs-on: ubuntu-latest env: - NXF_VER: '*-edge' + NXF_VER: '' NXF_EDGE: 1 NXF_ANSI_LOG: false steps: @@ -83,6 +83,7 @@ jobs: run: | wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ + nextflow self-update - name: Run pipeline with test data run: | From 9cf6950950076f23a76e218a5ea43a655ff30da7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:26:55 +0100 Subject: [PATCH 582/675] test edge CI works --- main.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.nf b/main.nf index b751d300..e7c73b1a 100644 --- a/main.nf +++ b/main.nf @@ -55,15 +55,15 @@ WorkflowMain.initialise(workflow, params, log) ======================================================================================== */ -include { CUTANDRUN } from './workflows/cutandrun' +// include { CUTANDRUN } from './workflows/cutandrun' workflow NFCORE_CUTANDRUN { + include { CUTANDRUN } from './workflows/cutandrun' + /* * WORKFLOW: Run main nf-core/cutandrun analysis pipeline */ - CUTANDRUN () - } /* From d792d1231a27524a6418aac80fb139bb4aa5fbd1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 7 Oct 2021 11:29:30 +0100 Subject: [PATCH 583/675] Removed fail test --- main.nf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/main.nf b/main.nf index e7c73b1a..4e08ecb8 100644 --- a/main.nf +++ b/main.nf @@ -55,11 +55,9 @@ WorkflowMain.initialise(workflow, params, log) ======================================================================================== */ -// include { CUTANDRUN } from './workflows/cutandrun' +include { CUTANDRUN } from './workflows/cutandrun' workflow NFCORE_CUTANDRUN { - include { CUTANDRUN } from './workflows/cutandrun' - /* * WORKFLOW: Run main nf-core/cutandrun analysis pipeline */ From 7ccd049681178b07c4f5015331188613b90e3702 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 8 Oct 2021 14:04:39 +0100 Subject: [PATCH 584/675] Tidy up reports code and add extra profiling debug --- .gitignore | 2 + bin/lib/reports.py | 393 ++++++++++-------- bin/reporting.py | 8 +- dev/docker/static_reports/run_native.sh | 10 + dev/docker/static_reports/run_native_pyspy.sh | 10 + 5 files changed, 240 insertions(+), 183 deletions(-) create mode 100755 dev/docker/static_reports/run_native.sh create mode 100755 dev/docker/static_reports/run_native_pyspy.sh diff --git a/.gitignore b/.gitignore index 86425ed2..4cdfedf4 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ dev/docker/static_reports/test_output/* !dev/docker/static_reports/test_output/_dummy.txt !tests/data/ + +profile.svg diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 143dd2dc..f849d3df 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -3,7 +3,6 @@ import os import glob -import re import numpy as np import pandas as pd import matplotlib.pyplot as plt @@ -12,10 +11,9 @@ import seaborn as sns import pyranges as pr import pysam -import time class Reports: - data_table = None + metadata_table = None frag_hist = None frag_violin = None frag_bin500 = None @@ -48,26 +46,79 @@ def format_thousands(self, x, pos): #the two args are the value and tick position return '%1.1fK' % (x * 1e-3) + def gen_pdf(self, output_path, plots): + with PdfPages(os.path.join(output_path, 'merged_report.pdf')) as pdf: + for key in plots: + pdf.savefig(plots[key]) + + #* + #======================================================================================== + # ENTRY POINTS + #======================================================================================== + #*/ + + def generate_cutandrun_reports(self, output_path): + # Init + abs_path = os.path.abspath(output_path) + + # Get plots and supporting data tables + plots, data, mqc_frag_hist = self.generate_reports() + + # # Save mqc text file + # txt_mqc = open(os.path.join(abs_path, "03_03_frag_len_mqc.txt"), "w") + # txt_mqc.write(mqc_frag_hist) + # txt_mqc.close() + + # Save data to output folder + for key in data: + data[key].to_csv(os.path.join(abs_path, key + '.csv'), index=False) + + # Save plots to output folder + for key in plots: + plots[key].savefig(os.path.join(abs_path, key + '.png')) + + # # Save pdf of the plots + # self.gen_pdf(abs_path, plots) + #* #======================================================================================== # LOAD DATA #======================================================================================== #*/ - def load_data(self): - # ---------- Data - data_table --------- # - self.data_table = pd.read_csv(self.meta_path, sep=',') + def load_meta_data(self): + # Plots supported + + # Sequencing Depth + # Alignable Fragments + # Alignment Rate (Target) + # Alignment Rate (Spike-in) + # Duplication Rate + # Estimated Library Size + # Unique Fragments + # Spike-in Scale Factor + # Normalised Fragment Count + + self.metadata_table = pd.read_csv(self.meta_path, sep=',') self.duplicate_info = False - if 'dedup_percent_duplication' in self.data_table.columns: + if 'dedup_percent_duplication' in self.metadata_table.columns: self.duplicate_info = True - # ---------- Data - Raw frag histogram --------- # + # Make new perctenage alignment columns + self.metadata_table['target_alignment_rate'] = self.metadata_table.loc[:, ('bt2_total_aligned_target')] / self.metadata_table.loc[:, ('bt2_total_reads_target')] * 100 + self.metadata_table['spikein_alignment_rate'] = self.metadata_table.loc[:, ('bt2_total_aligned_spikein')] / self.metadata_table.loc[:, ('bt2_total_reads_spikein')] * 100 + + def load_raw_frag_histogram(self): + # Plots supported + + # Fragment Length Distribution (the main frag length lineplot) + # Fragment Length Distribution (the main frag length violin plot) + # Create list of deeptools raw fragment files dt_frag_list = glob.glob(self.raw_frag_path) - for i in list(range(len(dt_frag_list))): - # create dataframe from csv file for each file and save to a list + # Create dataframe from csv file for each file and save to a list dt_frag_i = pd.read_csv(dt_frag_list[i], sep='\t', header=None, names=['Size','Occurrences']) frag_base_i = os.path.basename(dt_frag_list[i]) sample_id = frag_base_i.split(".")[0] @@ -75,7 +126,7 @@ def load_data(self): rep_i = sample_id_split[1] group_i = sample_id_split[0] - # create long forms of fragment histograms + # Create long forms of fragment histograms dt_frag_i_long = np.repeat(dt_frag_i['Size'].values, dt_frag_i['Occurrences'].values) dt_group_i_long = np.repeat(group_i, len(dt_frag_i_long)) dt_rep_i_long = np.repeat(rep_i, len(dt_frag_i_long)) @@ -102,11 +153,14 @@ def load_data(self): self.frag_hist['group'] = group_short self.frag_hist['replicate'] = rep_short - self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "group" : group_arr , "replicate": rep_arr} ) #, index = np.arange(len(frags_arr))) + self.frag_violin = pd.DataFrame( { "fragment_size" : frags_arr, "group" : group_arr , "replicate": rep_arr} ) - # ---------- Data - Binned frags --------- # - # create full join data frame for count data - # start by creating list of bin500 files + def load_binned_frags(self): + # Plots supported + + # Replicate Reproducibility + + # Start by creating list of bin500 files dt_bin_frag_list = glob.glob(self.bin_frag_path) for i in list(range(len(dt_bin_frag_list))): dt_bin_frag_i_read = pd.read_csv(dt_bin_frag_list[i], sep='\t', header=None, names=['chrom','bin','count','sample']) @@ -120,13 +174,18 @@ def load_data(self): else: self.frag_bin500 = pd.merge(self.frag_bin500, dt_bin_frag_i, on=['chrom','bin'], how='outer') - # add log2 transformed count data column + # Add log2 transformed count data column log2_counts = self.frag_bin500[self.frag_bin500.columns[-(len(dt_bin_frag_list)):]].transform(lambda x: np.log2(x)) chrom_bin_cols = self.frag_bin500[['chrom','bin']] self.frag_bin500 = pd.concat([chrom_bin_cols,log2_counts], axis=1) - # ---------- Data - Peaks --------- # - # create dataframe for seacr peaks + def load_seacr_peaks(self): + # Plots supported + + # Total Peaks + # Peak Width + + # Create dataframe for seacr peaks seacr_bed_list = glob.glob(self.seacr_bed_path) # combine all seacr bed files into one df including group and replicate info @@ -146,73 +205,76 @@ def load_data(self): else: self.seacr_beds = self.seacr_beds.append(seacr_bed_i) - # ---------- Data - target histone mark bams --------- # - bam_list = glob.glob(self.bam_path) - self.bam_df_list = list() - self.frip = pd.DataFrame(data=None, index=range(len(bam_list)), columns=['group','replicate','mapped_frags','frags_in_peaks','percentage_frags_in_peaks']) - k = 0 #counter + # Get peak stats by group and replicate + self.seacr_beds_group_rep = self.seacr_beds[['group','replicate']].groupby(['group','replicate']).size().reset_index().rename(columns={0:'all_peaks'}) - def pe_bam_to_df(bam_path): - bamfile = pysam.AlignmentFile(bam_path, "rb") - # Iterate through reads. - read1 = None - read2 = None - k=0 #counter + def pe_bam_to_df(self, bam_path): + bamfile = pysam.AlignmentFile(bam_path, "rb") + # Iterate through reads. + read1 = None + read2 = None + k=0 #counter - # get number of reads in bam - count = 0 - for _ in bamfile: - count += 1 + # get number of reads in bam + count = 0 + for _ in bamfile: + count += 1 - bamfile.close() - bamfile = pysam.AlignmentFile(bam_path, "rb") + bamfile.close() + bamfile = pysam.AlignmentFile(bam_path, "rb") - # initialise arrays - frag_no = round(count/2) - start_arr = np.zeros(frag_no, dtype=np.int64) - end_arr = np.zeros(frag_no, dtype=np.int64) - chrom_arr = np.empty(frag_no, dtype=" Date: Fri, 8 Oct 2021 14:09:06 +0100 Subject: [PATCH 585/675] Tidy --- workflows/cutandrun.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ad3473fd..b9fdf467 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -843,8 +843,8 @@ workflow CUTANDRUN { //ch_seacr_bed_id | view /* - * CHANNEL: Join beds and bigwigs on id - */ + * CHANNEL: Join beds and bigwigs on id + */ ch_bigwig_no_igg .map { row -> [row[0].id, row ].flatten()} .join ( ch_seacr_bed_id ) From 52c64652d0b7be0fd50e18f8fd38e96283f35b3d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 8 Oct 2021 14:15:18 +0100 Subject: [PATCH 586/675] Enabled some reporting features again --- bin/lib/reports.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index f849d3df..6e861faf 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -77,8 +77,8 @@ def generate_cutandrun_reports(self, output_path): for key in plots: plots[key].savefig(os.path.join(abs_path, key + '.png')) - # # Save pdf of the plots - # self.gen_pdf(abs_path, plots) + # Save pdf of the plots + self.gen_pdf(abs_path, plots) #* #======================================================================================== @@ -423,15 +423,15 @@ def generate_reports(self): plots["01_04_alignment_rate_spikein"] = multi_plot[3] data["01_alignment_summary"] = data1 - # # Plot 2 - # if self.duplicate_info == True: - # multi_plot, data2 = self.duplication_summary() - # plots["02_01_dup_rate"] = multi_plot[0] - # plots["02_02_est_lib_size"] = multi_plot[1] - # plots["02_03_unique_frags"] = multi_plot[2] - # data["02_duplication_summary"] = data2 + # Plot 2 + if self.duplicate_info == True: + multi_plot, data2 = self.duplication_summary() + plots["02_01_dup_rate"] = multi_plot[0] + plots["02_02_est_lib_size"] = multi_plot[1] + plots["02_03_unique_frags"] = multi_plot[2] + data["02_duplication_summary"] = data2 - # # Plot 3 + # Plot 3 # plot3, data3 = self.fraglen_summary_violin() # plots["03_01_frag_len_violin"] = plot3 # data["03_01_frag_len_violin"] = data3 From 613f715d34bdc8422e60a7e97e5a87cd3d4db40b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 8 Oct 2021 14:16:48 +0100 Subject: [PATCH 587/675] Enabled more reporting features --- bin/lib/reports.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 6e861faf..fb8b967f 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -64,10 +64,10 @@ def generate_cutandrun_reports(self, output_path): # Get plots and supporting data tables plots, data, mqc_frag_hist = self.generate_reports() - # # Save mqc text file - # txt_mqc = open(os.path.join(abs_path, "03_03_frag_len_mqc.txt"), "w") - # txt_mqc.write(mqc_frag_hist) - # txt_mqc.close() + # Save mqc text file + txt_mqc = open(os.path.join(abs_path, "03_03_frag_len_mqc.txt"), "w") + txt_mqc.write(mqc_frag_hist) + txt_mqc.close() # Save data to output folder for key in data: @@ -473,10 +473,8 @@ def generate_reports(self): # plots["06_04_frags_in_peaks"] = plot7d # data["06_04_frags_in_peaks"] = data7d - # # Fragment Length Histogram data in MultiQC yaml format - # mqc_frag_hist = self.frag_len_hist_mqc() - - mqc_frag_hist = None + # Fragment Length Histogram data in MultiQC yaml format + mqc_frag_hist = self.frag_len_hist_mqc() return (plots, data, mqc_frag_hist) From 11ceff75f5309583c452aa9cd6e1f0d7cadc47e0 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 8 Oct 2021 14:19:41 +0100 Subject: [PATCH 588/675] Moved some deeptools specific channel manipulations within the if block --- workflows/cutandrun.nf | 68 +++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index b9fdf467..ead073a5 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -825,43 +825,43 @@ workflow CUTANDRUN { UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) ) } + + if (run_deep_tools){ + /* + * MODULE: Extract max signal from peak beds + */ + AWK_EDIT_PEAK_BED ( + ch_seacr_bed + ) + //AWK_EDIT_PEAK_BED.out.file | view - /* - * MODULE: Extract max signal from peak beds - */ - AWK_EDIT_PEAK_BED ( - ch_seacr_bed - ) - //AWK_EDIT_PEAK_BED.out.file | view - - /* - * CHANNEL: Structure output for join on id - */ - AWK_EDIT_PEAK_BED.out.file - .map { row -> [row[0].id, row ].flatten()} - .set { ch_seacr_bed_id } - //ch_seacr_bed_id | view + /* + * CHANNEL: Structure output for join on id + */ + AWK_EDIT_PEAK_BED.out.file + .map { row -> [row[0].id, row ].flatten()} + .set { ch_seacr_bed_id } + //ch_seacr_bed_id | view - /* - * CHANNEL: Join beds and bigwigs on id - */ - ch_bigwig_no_igg - .map { row -> [row[0].id, row ].flatten()} - .join ( ch_seacr_bed_id ) - .set { ch_dt_peaks } - //ch_dt_peaks | view - - ch_dt_peaks - .map { row -> row[1,2] } - .set { ch_ordered_bigwig } - //ch_ordered_bigwig | view - - ch_dt_peaks - .map { row -> row[-1] } - .set { ch_ordered_seacr_max } - //ch_ordered_seacr_max | view + /* + * CHANNEL: Join beds and bigwigs on id + */ + ch_bigwig_no_igg + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_seacr_bed_id ) + .set { ch_dt_peaks } + //ch_dt_peaks | view + + ch_dt_peaks + .map { row -> row[1,2] } + .set { ch_ordered_bigwig } + //ch_ordered_bigwig | view + + ch_dt_peaks + .map { row -> row[-1] } + .set { ch_ordered_seacr_max } + //ch_ordered_seacr_max | view - if (run_deep_tools){ /* * MODULE: Compute DeepTools matrix used in heatmap plotting for Genes */ From 9da9b81a6a5ac9aab188207a036f4cd12673e1c7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 8 Oct 2021 16:10:04 +0100 Subject: [PATCH 589/675] Added frip calculation (unfinished) --- bin/frip.py | 62 ++++++++++++++++++ bin/lib/reports.py | 17 ----- bin/peak_reproducability.py | 74 ++++++++++++++++++++++ conf/modules.config | 8 +++ modules/local/modules/frip/Dockerfile | 6 ++ modules/local/modules/frip/environment.yml | 13 ++++ modules/local/modules/frip/functions.nf | 68 ++++++++++++++++++++ modules/local/modules/frip/main.nf | 32 ++++++++++ subworkflows/local/annotate_meta_csv.nf | 30 +++++++++ workflows/cutandrun.nf | 49 +++++++++++--- 10 files changed, 333 insertions(+), 26 deletions(-) create mode 100755 bin/frip.py create mode 100755 bin/peak_reproducability.py create mode 100644 modules/local/modules/frip/Dockerfile create mode 100644 modules/local/modules/frip/environment.yml create mode 100644 modules/local/modules/frip/functions.nf create mode 100644 modules/local/modules/frip/main.nf create mode 100644 subworkflows/local/annotate_meta_csv.nf diff --git a/bin/frip.py b/bin/frip.py new file mode 100755 index 00000000..68de71c8 --- /dev/null +++ b/bin/frip.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +import os +import glob +import argparse + +import deeptools.countReadsPerBin as crpb +import pysam + +############################################ +############################################ +## PARSE ARGUMENTS +############################################ +############################################ +Description = 'Calclate FRIP scores (FRagment proportion in Peaks regions) using deeptools for each sample' + +parser = argparse.ArgumentParser(description=Description) + +## REQUIRED PARAMETERS +parser.add_argument('--bams', help="Bam file.") +parser.add_argument('--peaks', help="Peaks interval file.") +parser.add_argument('--threads', help="the number of threads for the task.") +parser.add_argument('--outpath', help="Full path to output directory.") +args = parser.parse_args() + +############################################ +############################################ +## MAIN FUNCTION +############################################ +############################################ + +# https://deeptools.readthedocs.io/en/develop/content/example_api_tutorial.html + +# Create file lists +bam_file_list = glob.glob(args.bams) +peak_file_list = glob.glob(args.peaks) + +frips = [] +for idx, bam_file in enumerate(bam_file_list): + print("Calculating " + bam_file + " using " + peak_file_list[idx]) + cr = crpb.CountReadsPerBin([bam_file], bedFile=[peak_file_list[idx]], numberOfProcessors=int(args.threads)) + + # Calc the total number of reads in peaks per bam file + reads_at_peaks = cr.run() + total = reads_at_peaks.sum(axis=0) + + # Load up bam file and get the total number of mapped reads + bam = pysam.AlignmentFile(bam_file) + + # Calc frip + frip = float(total[0]) / bam.mapped + frips.append(str(frip)) + + # Log + print("Frip = " + str(frip)) + +# Create string and write to file +frip_string = ",".join(frips) +writer = open(os.path.join(args.outpath, "frips.csv"), "w") +writer.write("frip\n") +writer.write(frip_string) +writer.close() \ No newline at end of file diff --git a/bin/lib/reports.py b/bin/lib/reports.py index fb8b967f..13aeed19 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -381,23 +381,6 @@ def array_permutate(x): fill_reprod_rate = (self.reprod_peak_stats['no_peaks_reproduced'] / self.reprod_peak_stats['all_peaks'])*100 self.reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate - # ---------- Data - Percentage of fragments in peaks --------- # - for i in range(len(self.bam_df_list)): - bam_i = self.bam_df_list[i] - self.frip.at[i,'mapped_frags'] = bam_i.shape[0] - group_i = self.frip.at[i,'group'] - rep_i = self.frip.at[i,'replicate'] - seacr_bed_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] - pyr_seacr = pr.PyRanges(chromosomes=seacr_bed_i['chrom'], starts=seacr_bed_i['start'], ends=seacr_bed_i['end']) - pyr_bam = pr.PyRanges(df=bam_i) - sample_id = group_i + "_" + rep_i - frag_count_pyr = pyr_bam.count_overlaps(pyr_seacr) - frag_counts = np.count_nonzero(frag_count_pyr.NumberOverlaps) - - self.frip.at[i,'frags_in_peaks'] = frag_counts - - self.frip['percentage_frags_in_peaks'] = (self.frip['frags_in_peaks'] / self.frip['mapped_frags'])*100 - #* #======================================================================================== # GEN REPORTS diff --git a/bin/peak_reproducability.py b/bin/peak_reproducability.py new file mode 100755 index 00000000..1734fbc0 --- /dev/null +++ b/bin/peak_reproducability.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import os +import glob +import re +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import argparse +import upsetplot + +############################################ +############################################ +## PARSE ARGUMENTS +############################################ +############################################ +Description = 'Upset ven diagram of consensus peaks.' +Epilog = """Example usage: python consensus_peaks.py """ + +parser = argparse.ArgumentParser(description=Description, epilog=Epilog) + +## REQUIRED PARAMETERS +parser.add_argument('--peaks', help="Merged peaks interval file with replicate counts column.") +parser.add_argument('--outpath', help="Full path to output directory.") +args = parser.parse_args() + +############################################ +############################################ +## MAIN FUNCTION +############################################ +############################################ + +# create list of data frames, one for each group consensus peaks file +peak_file_list = glob.glob(args.peaks) +peak_df_list = list() +for i in list(range(len(peak_file_list))): + peaks_i = pd.read_csv(peak_file_list[i], sep='\t', header=None, usecols=[0,1,2,8,9], names=['chrom','start','end','sample_reps','count']) + peaks_i['sample_reps'] = peaks_i['sample_reps'].replace(".peaks.bed.stringent.bed", "", regex=True) + peak_df_list.append(peaks_i) + reps2 = peaks_i[peaks_i["count"]>1] + +# add sorted column to each dataframe, and make new condensed dataframe list +summary_peak_df_list = list() +for i in list(range(len(peak_df_list))): + peaks_i = peak_df_list[i] + peaks_i['sorted_samples'] = '' + rows_now = peaks_i.shape[0] + for j in list(range(rows_now)): + sample_list = peaks_i.at[j,'sample_reps'] + sample_array = np.unique(sample_list.split(',')) + sample_sorted = sorted(sample_array) + sample_str = ",".join(sample_sorted) + peaks_i.at[j,'sorted_samples'] = sample_str + summary_peaks_i = peaks_i[['sorted_samples', 'count']].groupby(['sorted_samples'], as_index = False).sum() + summary_peak_df_list.append(summary_peaks_i) + +# construct data in appropriate format for upsetplot, and plot +for i in list(range(len(summary_peak_df_list))): + df_i = summary_peak_df_list[i] + # Get group name + basename = os.path.basename(peak_file_list[i]) + group_name = basename.rsplit(".", -1)[0] + file_name = group_name + ".consensus_peaks.pdf" + categories = df_i.shape[0] + cat_list = [] + for j in list(range(categories)): + summary_sample = df_i.at[j,'sorted_samples'].split(',') + cat_list.append(summary_sample) + + # Plot + peak_counts = upsetplot.from_memberships(cat_list, data = df_i['count']) + upsetplot.plot(peak_counts) + plt.show() + plt.savefig(os.path.join(args.outpath, file_name)) diff --git a/conf/modules.config b/conf/modules.config index 6901f521..9e24160f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -239,6 +239,14 @@ params { publish_files = false } + "calc_frip" { + publish_files = false + } + + "meta_csv_frip_options" { + publish_files = false + } + "generate_reports" { publish_dir = "04_reporting/qc" } diff --git a/modules/local/modules/frip/Dockerfile b/modules/local/modules/frip/Dockerfile new file mode 100644 index 00000000..4cdda00b --- /dev/null +++ b/modules/local/modules/frip/Dockerfile @@ -0,0 +1,6 @@ +FROM nfcore/base:2.1 + +# Install conda packages +COPY ./environment.yml / +RUN conda env create -f /environment.yml && conda clean -a +ENV PATH /opt/conda/envs/packages/bin:$PATH diff --git a/modules/local/modules/frip/environment.yml b/modules/local/modules/frip/environment.yml new file mode 100644 index 00000000..7810d49d --- /dev/null +++ b/modules/local/modules/frip/environment.yml @@ -0,0 +1,13 @@ +# conda env create -f environment.yml +name: packages +channels: + - conda-forge + - bioconda + - defaults +dependencies: + # python version + - python=3.8.3 + + # conda packages + - deeptools=3.5.* + - pysam=0.17.* diff --git a/modules/local/modules/frip/functions.nf b/modules/local/modules/frip/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/local/modules/frip/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/modules/frip/main.nf b/modules/local/modules/frip/main.nf new file mode 100644 index 00000000..90473dfd --- /dev/null +++ b/modules/local/modules/frip/main.nf @@ -0,0 +1,32 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process CALCULATE_FRIP { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? "conda-forge::python=3.8.3 bioconda::deeptools=3.5.* bioconda::pysam=0.17.*" : null) + container "luslab/cutandrun-dev-frip:latest" + + input: + tuple val(meta), path(bam), path(bai), path(bed) + + output: + tuple val(meta), path('frips.csv'), emit: frips + path '*.version.txt' , emit: version + + script: + """ + frip.py \\ + --bams "*.bam" \\ + --peaks "*.bed" \\ + --threads ${task.cpus} \\ + --outpath . + + python --version | grep -E -o \"([0-9]{1,}\\.)+[0-9]{1,}\" > python.version.txt + """ +} diff --git a/subworkflows/local/annotate_meta_csv.nf b/subworkflows/local/annotate_meta_csv.nf new file mode 100644 index 00000000..41df5543 --- /dev/null +++ b/subworkflows/local/annotate_meta_csv.nf @@ -0,0 +1,30 @@ +/* + * Annotate the pipeline meta data with a csv file + */ + +params.options = [:] +params.meta_suffix = "" +params.meta_prefix = "" + +workflow ANNOTATE_META_CSV { + take: passthrough + take: reports + main: + + main: + // Strip out the sample id from the meta in the passthrough + ch_paths = passthrough.map { row -> [row[0].id, row[0], row[1..-1]].flatten() } + + reports.splitCsv(header:true) + .map { row -> + new_meta = [:] + row[1].each{ k, v -> new_meta.put(params.meta_prefix + k + params.meta_suffix, v) } + [row[0].id, new_meta] + } + .join ( ch_paths ) + .map { row -> [ row[2] << row[1], row[3..-1] ] } + .set { ch_annotated_meta } + + emit: + output = ch_annotated_meta // channel: [ val(annotated_meta), [ passthrough ] ] +} diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ead073a5..e74b964c 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -296,6 +296,7 @@ include { IGV_SESSION } from "../modules/local/igv_session" include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +include { CALCULATE_FRIP } from "../modules/local/modules/frip/main" addParams( options: modules["calc_frip"] ) include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) @@ -314,6 +315,7 @@ include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL } from "../subworkflows include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", meta_prefix: "dedup_", script_mode: false ) include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) include { FASTQC_TRIMGALORE } from "../subworkflows/local/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) +include { ANNOTATE_META_CSV as ANNOTATE_FRIP_META } from "../subworkflows/local/annotate_meta_csv" addParams( options: modules["meta_csv_frip_options"] ) /* ======================================================================================== @@ -806,15 +808,15 @@ workflow CUTANDRUN { } if(run_reporting) { - /* - * CHANNEL: Remove IgG from bigwig channel - */ - UCSC_BEDGRAPHTOBIGWIG.out.bigwig - .filter { it[0].group != "igg" } - .set { ch_bigwig_no_igg } - //ch_bigwig_no_igg | view - if(!params.skip_igv) { + /* + * CHANNEL: Remove IgG from bigwig channel + */ + UCSC_BEDGRAPHTOBIGWIG.out.bigwig + .filter { it[0].group != "igg" } + .set { ch_bigwig_no_igg } + //ch_bigwig_no_igg | view + /* * MODULE: Create igv session */ @@ -825,7 +827,7 @@ workflow CUTANDRUN { UCSC_BEDGRAPHTOBIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]) ) } - + if (run_deep_tools){ /* * MODULE: Extract max signal from peak beds @@ -896,6 +898,35 @@ workflow CUTANDRUN { ) } + /* + * CHANNEL: Join bams and beds on id + */ + ch_samtools_bam + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_samtools_bai.map { row -> [row[0].id, row ].flatten()} ) + .join ( ch_seacr_bed.map { row -> [row[0].id, row ].flatten()} ) + .map { row -> [row[1], row[2], row[4], row[6]] } + .set { ch_bam_bai_bed } + // EXAMPLE CHANNEL STRUCT: [[META], BAM, BED] + //ch_bam_bai_bed | view + + /* + * MODULE: Calculate Frip scores for samples + */ + CALCULATE_FRIP ( + ch_bam_bai_bed + ) + + /* + * SUBWORKFLOW: Annotate meta-data with frip stats + */ + ANNOTATE_FRIP_META ( + ch_samtools_bam, + CALCULATE_FRIP.out.frips + ) + ch_samtools_bam = ANNOTATE_FRIP_META.out.output + // ch_samtools_bam | view + /* * MODULE: Export meta-data to csv file */ From 783fbacc4e2c64f7d59cbe48e47d90a4099e5ccb Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 11 Oct 2021 12:24:56 +0100 Subject: [PATCH 590/675] Added bedtools intersect --- .../modules/bedtools/intersect/functions.nf | 78 +++++++++++++++++++ .../modules/bedtools/intersect/main.nf | 44 +++++++++++ .../modules/bedtools/intersect/meta.yml | 46 +++++++++++ 3 files changed, 168 insertions(+) create mode 100644 modules/nf-core/modules/bedtools/intersect/functions.nf create mode 100644 modules/nf-core/modules/bedtools/intersect/main.nf create mode 100644 modules/nf-core/modules/bedtools/intersect/meta.yml diff --git a/modules/nf-core/modules/bedtools/intersect/functions.nf b/modules/nf-core/modules/bedtools/intersect/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/bedtools/intersect/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/bedtools/intersect/main.nf b/modules/nf-core/modules/bedtools/intersect/main.nf new file mode 100644 index 00000000..1ab0a8b2 --- /dev/null +++ b/modules/nf-core/modules/bedtools/intersect/main.nf @@ -0,0 +1,44 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BEDTOOLS_INTERSECT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" + } + + input: + tuple val(meta), path(intervals1), path(intervals2) + val extension + + output: + tuple val(meta), path("*.${extension}"), emit: intersect + path "versions.yml" , emit: versions + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedtools \\ + intersect \\ + -a $intervals1 \\ + -b $intervals2 \\ + $options.args \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(bedtools --version | sed -e "s/bedtools v//g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/bedtools/intersect/meta.yml b/modules/nf-core/modules/bedtools/intersect/meta.yml new file mode 100644 index 00000000..a14bf515 --- /dev/null +++ b/modules/nf-core/modules/bedtools/intersect/meta.yml @@ -0,0 +1,46 @@ +name: bedtools_intersect +description: Allows one to screen for overlaps between two sets of genomic features. +keywords: + - bed + - intersect +tools: + - bedtools: + description: | + A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. + documentation: https://bedtools.readthedocs.io/en/latest/content/tools/intersect.html +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals1: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - intervals2: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - extension: + type: value + description: Extension of the output file. It is set by the user and corresponds to the file format which depends on arguments (e. g., ".bed", ".bam", ".txt", etc.). +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intersect: + type: file + description: File containing the description of overlaps found between the two features + pattern: "*.${extension}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@Emiller88" + - "@sruthipsuresh" + - "@drpatelh" + - "@sidorov-si" From 172f54d0bad5d10fd67c31f41edd091caa1d3497 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 11 Oct 2021 12:25:11 +0100 Subject: [PATCH 591/675] Changed frip path --- modules/local/modules/{frip => calculate_frip}/Dockerfile | 0 modules/local/modules/{frip => calculate_frip}/environment.yml | 0 modules/local/modules/{frip => calculate_frip}/functions.nf | 0 modules/local/modules/{frip => calculate_frip}/main.nf | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename modules/local/modules/{frip => calculate_frip}/Dockerfile (100%) rename modules/local/modules/{frip => calculate_frip}/environment.yml (100%) rename modules/local/modules/{frip => calculate_frip}/functions.nf (100%) rename modules/local/modules/{frip => calculate_frip}/main.nf (100%) diff --git a/modules/local/modules/frip/Dockerfile b/modules/local/modules/calculate_frip/Dockerfile similarity index 100% rename from modules/local/modules/frip/Dockerfile rename to modules/local/modules/calculate_frip/Dockerfile diff --git a/modules/local/modules/frip/environment.yml b/modules/local/modules/calculate_frip/environment.yml similarity index 100% rename from modules/local/modules/frip/environment.yml rename to modules/local/modules/calculate_frip/environment.yml diff --git a/modules/local/modules/frip/functions.nf b/modules/local/modules/calculate_frip/functions.nf similarity index 100% rename from modules/local/modules/frip/functions.nf rename to modules/local/modules/calculate_frip/functions.nf diff --git a/modules/local/modules/frip/main.nf b/modules/local/modules/calculate_frip/main.nf similarity index 100% rename from modules/local/modules/frip/main.nf rename to modules/local/modules/calculate_frip/main.nf From 3f1aa0c9c626a519eee9c27e8fbbd4af24938792 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 11 Oct 2021 12:25:43 +0100 Subject: [PATCH 592/675] Updated modules.json --- modules.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules.json b/modules.json index ce4380e8..61b30e34 100644 --- a/modules.json +++ b/modules.json @@ -6,6 +6,9 @@ "bedtools/bamtobed": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "bedtools/intersect": { + "git_sha": "49da8642876ae4d91128168cd0db4f1c858d7792" + }, "bedtools/merge": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, From 30d591d57f85985e283b05942434b8001254cebe Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Mon, 11 Oct 2021 12:26:01 +0100 Subject: [PATCH 593/675] Added bedtools intersect calculations --- conf/modules.config | 4 ++++ workflows/cutandrun.nf | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 9e24160f..6207dc87 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -247,6 +247,10 @@ params { publish_files = false } + "bedtools_intersect" { + publish_files = false + } + "generate_reports" { publish_dir = "04_reporting/qc" } diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index e74b964c..562b7e6c 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -275,6 +275,11 @@ def awk_bt2_options = modules["awk_bt2"] def awk_bt2_spikein_options = modules["awk_bt2_spikein"] def awk_dedup_options = modules["awk_dedup"] +// Reporting options +def bedtools_intersect_options = modules["bedtools_intersect"] +bedtools_intersect_options.args = "-wa -wb -filenames -sorted" + +// Multi QC def multiqc_options = modules["multiqc"] multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title\"" : "" @@ -296,7 +301,7 @@ include { IGV_SESSION } from "../modules/local/igv_session" include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) -include { CALCULATE_FRIP } from "../modules/local/modules/frip/main" addParams( options: modules["calc_frip"] ) +include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) @@ -335,6 +340,7 @@ include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../mo include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) include { SAMTOOLS_SORT } from "../modules/nf-core/modules/samtools/sort/main.nf" addParams( options: modules["samtools_sort"] ) include { SAMTOOLS_INDEX } from "../modules/nf-core/modules/samtools/index/main.nf" addParams( options: modules["samtools_index"] ) +include { BEDTOOLS_INTERSECT } from "../modules/nf-core/modules/bedtools/intersect/main.nf" addParams( options: bedtools_intersect_options ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -925,7 +931,34 @@ workflow CUTANDRUN { CALCULATE_FRIP.out.frips ) ch_samtools_bam = ANNOTATE_FRIP_META.out.output - // ch_samtools_bam | view + //ch_samtools_bam | view + + /* + * CHANNEL: Per group, create a channel per one against all combination + */ + ch_seacr_bed_group + .flatMap{ + row -> + new_output = [] + row[1].each{ file -> + files_copy = row[1].collect() + files_copy.remove(files_copy.indexOf(file)) + new_output.add([[id: file.name.split("\\.")[0]], file, files_copy]) + } + new_output + } + .set { ch_beds_intersect } + //EXAMPLE CHANNEL STRUCT: [[META], BED (-a), [BED...n] (-b)] + //ch_beds_intersect | view + + /* + * MODULE: Find intra-group overlap + */ + BEDTOOLS_INTERSECT ( + ch_beds_intersect, + "bed" + ) + //BEDTOOLS_INTERSECT.out.intersect | view /* * MODULE: Export meta-data to csv file From abc6da43a336737aa20fa9b433d84622ed1f70d2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 15:22:32 +0100 Subject: [PATCH 594/675] Changed intersect params --- workflows/cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 562b7e6c..276123aa 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -277,7 +277,7 @@ def awk_dedup_options = modules["awk_dedup"] // Reporting options def bedtools_intersect_options = modules["bedtools_intersect"] -bedtools_intersect_options.args = "-wa -wb -filenames -sorted" +bedtools_intersect_options.args = "-c -sorted" // Multi QC def multiqc_options = modules["multiqc"] From c0124b6e8508750d7ba6f2d49295ddaf328d9c33 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 15:38:06 +0100 Subject: [PATCH 595/675] Updated bedtools intersect params --- workflows/cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 276123aa..bcea9f56 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -277,7 +277,7 @@ def awk_dedup_options = modules["awk_dedup"] // Reporting options def bedtools_intersect_options = modules["bedtools_intersect"] -bedtools_intersect_options.args = "-c -sorted" +bedtools_intersect_options.args = "-C -sorted" // Multi QC def multiqc_options = modules["multiqc"] From 9dff8ba3002681107ce616e7b9592c9183dc5026 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 16:18:54 +0100 Subject: [PATCH 596/675] Added new test config --- conf/test_full_multi.config | 21 +++++++++++++++++++++ nextflow.config | 1 + 2 files changed, 22 insertions(+) create mode 100644 conf/test_full_multi.config diff --git a/conf/test_full_multi.config b/conf/test_full_multi.config new file mode 100644 index 00000000..47dfdc5e --- /dev/null +++ b/conf/test_full_multi.config @@ -0,0 +1,21 @@ +/* +======================================================================================== + Nextflow config file for running full-size tests +======================================================================================== + Defines input files and everything required to run a full size pipeline test. + + Use as follows: + nextflow run nf-core/cutandrun -profile test_full, + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Full test profile' + config_profile_description = 'Full test dataset to check pipeline function with added fake replicates to test the full reporting functionality' + + genome = 'GRCh38' + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-all-multi-rep.csv' + + minimum_alignment_q_score = 10 +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 6736abf9..8257a0ac 100644 --- a/nextflow.config +++ b/nextflow.config @@ -180,6 +180,7 @@ profiles { test_full_small { includeConfig "conf/test_full_small.config" } // Runs a full experimental configuration but with a small dataset test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control test_full { includeConfig "conf/test_full.config" } // Runs a full experimental dataset + test_full_multi { includeConfig "conf/test_full_multi.config" } // Runs a full experimental dataset with extra fake replicates to enable full reporting functionality } // Load igenomes.config if required From 72d934d10694617b4bd662fb5bbbe2c5e9136657 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 16:21:26 +0100 Subject: [PATCH 597/675] Added peak repo code --- bin/peak_reproducability.py | 82 ++++++++----------- .../modules/calculate_peak_reprod/Dockerfile | 6 ++ .../calculate_peak_reprod/environment.yml | 13 +++ .../calculate_peak_reprod/functions.nf | 68 +++++++++++++++ .../modules/calculate_peak_reprod/main.nf | 32 ++++++++ 5 files changed, 154 insertions(+), 47 deletions(-) create mode 100644 modules/local/modules/calculate_peak_reprod/Dockerfile create mode 100644 modules/local/modules/calculate_peak_reprod/environment.yml create mode 100644 modules/local/modules/calculate_peak_reprod/functions.nf create mode 100644 modules/local/modules/calculate_peak_reprod/main.nf diff --git a/bin/peak_reproducability.py b/bin/peak_reproducability.py index 1734fbc0..68de71c8 100755 --- a/bin/peak_reproducability.py +++ b/bin/peak_reproducability.py @@ -2,25 +2,24 @@ import os import glob -import re -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt import argparse -import upsetplot + +import deeptools.countReadsPerBin as crpb +import pysam ############################################ ############################################ ## PARSE ARGUMENTS ############################################ ############################################ -Description = 'Upset ven diagram of consensus peaks.' -Epilog = """Example usage: python consensus_peaks.py """ +Description = 'Calclate FRIP scores (FRagment proportion in Peaks regions) using deeptools for each sample' -parser = argparse.ArgumentParser(description=Description, epilog=Epilog) +parser = argparse.ArgumentParser(description=Description) ## REQUIRED PARAMETERS -parser.add_argument('--peaks', help="Merged peaks interval file with replicate counts column.") +parser.add_argument('--bams', help="Bam file.") +parser.add_argument('--peaks', help="Peaks interval file.") +parser.add_argument('--threads', help="the number of threads for the task.") parser.add_argument('--outpath', help="Full path to output directory.") args = parser.parse_args() @@ -30,45 +29,34 @@ ############################################ ############################################ -# create list of data frames, one for each group consensus peaks file +# https://deeptools.readthedocs.io/en/develop/content/example_api_tutorial.html + +# Create file lists +bam_file_list = glob.glob(args.bams) peak_file_list = glob.glob(args.peaks) -peak_df_list = list() -for i in list(range(len(peak_file_list))): - peaks_i = pd.read_csv(peak_file_list[i], sep='\t', header=None, usecols=[0,1,2,8,9], names=['chrom','start','end','sample_reps','count']) - peaks_i['sample_reps'] = peaks_i['sample_reps'].replace(".peaks.bed.stringent.bed", "", regex=True) - peak_df_list.append(peaks_i) - reps2 = peaks_i[peaks_i["count"]>1] -# add sorted column to each dataframe, and make new condensed dataframe list -summary_peak_df_list = list() -for i in list(range(len(peak_df_list))): - peaks_i = peak_df_list[i] - peaks_i['sorted_samples'] = '' - rows_now = peaks_i.shape[0] - for j in list(range(rows_now)): - sample_list = peaks_i.at[j,'sample_reps'] - sample_array = np.unique(sample_list.split(',')) - sample_sorted = sorted(sample_array) - sample_str = ",".join(sample_sorted) - peaks_i.at[j,'sorted_samples'] = sample_str - summary_peaks_i = peaks_i[['sorted_samples', 'count']].groupby(['sorted_samples'], as_index = False).sum() - summary_peak_df_list.append(summary_peaks_i) +frips = [] +for idx, bam_file in enumerate(bam_file_list): + print("Calculating " + bam_file + " using " + peak_file_list[idx]) + cr = crpb.CountReadsPerBin([bam_file], bedFile=[peak_file_list[idx]], numberOfProcessors=int(args.threads)) + + # Calc the total number of reads in peaks per bam file + reads_at_peaks = cr.run() + total = reads_at_peaks.sum(axis=0) + + # Load up bam file and get the total number of mapped reads + bam = pysam.AlignmentFile(bam_file) + + # Calc frip + frip = float(total[0]) / bam.mapped + frips.append(str(frip)) -# construct data in appropriate format for upsetplot, and plot -for i in list(range(len(summary_peak_df_list))): - df_i = summary_peak_df_list[i] - # Get group name - basename = os.path.basename(peak_file_list[i]) - group_name = basename.rsplit(".", -1)[0] - file_name = group_name + ".consensus_peaks.pdf" - categories = df_i.shape[0] - cat_list = [] - for j in list(range(categories)): - summary_sample = df_i.at[j,'sorted_samples'].split(',') - cat_list.append(summary_sample) + # Log + print("Frip = " + str(frip)) - # Plot - peak_counts = upsetplot.from_memberships(cat_list, data = df_i['count']) - upsetplot.plot(peak_counts) - plt.show() - plt.savefig(os.path.join(args.outpath, file_name)) +# Create string and write to file +frip_string = ",".join(frips) +writer = open(os.path.join(args.outpath, "frips.csv"), "w") +writer.write("frip\n") +writer.write(frip_string) +writer.close() \ No newline at end of file diff --git a/modules/local/modules/calculate_peak_reprod/Dockerfile b/modules/local/modules/calculate_peak_reprod/Dockerfile new file mode 100644 index 00000000..4cdda00b --- /dev/null +++ b/modules/local/modules/calculate_peak_reprod/Dockerfile @@ -0,0 +1,6 @@ +FROM nfcore/base:2.1 + +# Install conda packages +COPY ./environment.yml / +RUN conda env create -f /environment.yml && conda clean -a +ENV PATH /opt/conda/envs/packages/bin:$PATH diff --git a/modules/local/modules/calculate_peak_reprod/environment.yml b/modules/local/modules/calculate_peak_reprod/environment.yml new file mode 100644 index 00000000..96df47cb --- /dev/null +++ b/modules/local/modules/calculate_peak_reprod/environment.yml @@ -0,0 +1,13 @@ +# conda env create -f environment.yml +name: packages +channels: + - conda-forge + - bioconda + - defaults +dependencies: + # python version + - python=3.8.3 + + # conda packages + - pandas + - dask \ No newline at end of file diff --git a/modules/local/modules/calculate_peak_reprod/functions.nf b/modules/local/modules/calculate_peak_reprod/functions.nf new file mode 100644 index 00000000..da9da093 --- /dev/null +++ b/modules/local/modules/calculate_peak_reprod/functions.nf @@ -0,0 +1,68 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + if (!args.filename.endsWith('.version.txt')) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } + } +} diff --git a/modules/local/modules/calculate_peak_reprod/main.nf b/modules/local/modules/calculate_peak_reprod/main.nf new file mode 100644 index 00000000..2846727c --- /dev/null +++ b/modules/local/modules/calculate_peak_reprod/main.nf @@ -0,0 +1,32 @@ +include { initOptions; saveFiles; getSoftwareName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process CALCULATE_PEAK_REPROD { + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } + + conda (params.enable_conda ? "conda-forge::python=3.8.3 bioconda::deeptools=3.5.* bioconda::pysam=0.17.*" : null) + container "luslab/cutandrun-dev-frip:latest" + + input: + tuple val(meta), path(bam), path(bai), path(bed) + + output: + tuple val(meta), path('peak_repro.csv'), emit: csv + path '*.version.txt' , emit: version + + script: + """ + frip.py \\ + --bams "*.bam" \\ + --peaks "*.bed" \\ + --threads ${task.cpus} \\ + --outpath . + + python --version | grep -E -o \"([0-9]{1,}\\.)+[0-9]{1,}\" > python.version.txt + """ +} From 1833c2c0aaa8a4abb81fe36d966e664cc851c1f2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 16:30:05 +0100 Subject: [PATCH 598/675] Removed vscode local settings --- .gitignore | 2 ++ .vscode/settings.json | 8 -------- 2 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 86425ed2..96d6eb7a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ dev/docker/static_reports/test_output/* !dev/docker/static_reports/test_output/_dummy.txt !tests/data/ + +.vscode/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 20018321..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "python.pythonPath": "/usr/local/Caskroom/miniconda/base/envs/cutrun/bin/python", - "editor.tabSize": 4, - "editor.insertSpaces": true, - "editor.detectIndentation": false, - "editor.renderWhitespace": "all", - "editor.renderFinalNewline": true -} From 33206eb6a943211a75e1d2500ea284a93ee3fb3f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 16:33:08 +0100 Subject: [PATCH 599/675] Moved awk files to bin --- {assets/awk => bin}/bt2_report_to_csv.awk | 0 {assets/awk => bin}/dt_frag_report_to_csv.awk | 0 workflows/cutandrun.nf | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename {assets/awk => bin}/bt2_report_to_csv.awk (100%) rename {assets/awk => bin}/dt_frag_report_to_csv.awk (100%) diff --git a/assets/awk/bt2_report_to_csv.awk b/bin/bt2_report_to_csv.awk similarity index 100% rename from assets/awk/bt2_report_to_csv.awk rename to bin/bt2_report_to_csv.awk diff --git a/assets/awk/dt_frag_report_to_csv.awk b/bin/dt_frag_report_to_csv.awk similarity index 100% rename from assets/awk/dt_frag_report_to_csv.awk rename to bin/dt_frag_report_to_csv.awk diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ad3473fd..ee3b9b3d 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -45,8 +45,8 @@ if (anno_readme && file(anno_readme).exists()) { ch_dummy_file = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) // Stage awk files for parsing log files -ch_bt2_to_csv_awk = file("$projectDir/assets/awk/bt2_report_to_csv.awk" , checkIfExists: true) -ch_dt_frag_to_csv_awk = file("$projectDir/assets/awk/dt_frag_report_to_csv.awk", checkIfExists: true) +ch_bt2_to_csv_awk = file("$projectDir/bin/awk/bt2_report_to_csv.awk" , checkIfExists: true) +ch_dt_frag_to_csv_awk = file("$projectDir/bin/awk/dt_frag_report_to_csv.awk", checkIfExists: true) /* ======================================================================================== From 9460743bf8a4b1e80e378aa6ecb6287589426fdd Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 16:33:53 +0100 Subject: [PATCH 600/675] Removed redundant blacklist file --- assets/blacklists/GRCh37-blacklist.bed | 411 ------------------------- 1 file changed, 411 deletions(-) delete mode 100644 assets/blacklists/GRCh37-blacklist.bed diff --git a/assets/blacklists/GRCh37-blacklist.bed b/assets/blacklists/GRCh37-blacklist.bed deleted file mode 100644 index b8706302..00000000 --- a/assets/blacklists/GRCh37-blacklist.bed +++ /dev/null @@ -1,411 +0,0 @@ -1 564449 570371 High_Mappability_island 1000 . -1 724136 727043 Satellite_repeat 1000 . -1 825006 825115 BSR/Beta 1000 . -1 2583334 2634374 Low_mappability_island 1000 . -1 4363064 4363242 (CATTC)n 1000 . -1 5725866 5736651 Low_mappability_island 1000 . -1 16839923 16841396 Low_mappability_island 1000 . -1 38077347 38077423 Low_mappability_island 1000 . -1 91852785 91853147 LSU-rRNA_Hsa 1000 . -1 104163724 104163860 Low_mappability_island 1000 . -1 108112972 108113707 LSU-rRNA_Hsa 1000 . -1 121351474 121487059 centromeric_repeat 1000 . -1 142535434 142543081 Satellite_repeat 1000 . -1 142723256 142723968 Low_mappability_island 1000 . -1 142792613 142793303 Low_mappability_island 1000 . -1 142835822 142837333 Low_mappability_island 1000 . -1 143274490 143284340 centromeric_repeat 1000 . -1 145277108 145277572 LSU-rRNA_Hsa 1000 . -1 149033183 149035829 Satellite_repeat 1000 . -1 156186169 156186712 High_Mappability_island 1000 . -1 224199390 224204260 Satellite_repeat 1000 . -1 233318467 233318516 (CATTC)n 1000 . -1 236260366 236260821 Low_mappability_island 1000 . -1 237766308 237766764 LSU-rRNA_Hsa 1000 . -1 238105345 238105511 Low_mappability_island 1000 . -1 238108025 238108378 Low_mappability_island 1000 . -1 238108645 238109697 Low_mappability_island 1000 . -10 18841533 18862467 (CATTC)n 1000 . -10 20035661 20037171 Low_mappability_island 1000 . -10 36722282 36723650 Low_mappability_island 1000 . -10 38772277 38819357 Satellite_repeat 1000 . -10 38868892 38889025 Satellite_repeat 1000 . -10 39076515 39155771 Satellite_repeat 1000 . -10 42354835 42548642 centromeric_repeat 1000 . -10 42596676 42602082 Satellite_repeat 1000 . -10 42596700 42602110 Satellite_repeat 1000 . -10 42661264 42667623 Satellite_repeat 1000 . -10 42790522 42818398 Satellite_repeat 1000 . -10 135498649 135502716 Satellite_repeat 1000 . -11 6831669 6831838 ALR/Alpha 1000 . -11 10529403 10531969 Low_mappability_island 1000 . -11 48671444 48902406 centromeric_repeat 1000 . -11 48931242 48964015 centromeric_repeat 1000 . -11 50318471 50784078 centromeric_repeat 1000 . -11 51090700 51374066 centromeric_repeat 1000 . -11 51567242 51594226 centromeric_repeat 1000 . -11 54694046 55027975 centromeric_repeat 1000 . -11 73221660 73221946 Low_mappability_island 1000 . -11 85194913 85195322 LSU-rRNA_Hsa 1000 . -11 87524468 87525005 Low_mappability_island 1000 . -11 103275584 103281729 Low_mappability_island 1000 . -11 122874287 122874443 Low_mappability_island 1000 . -12 20704285 20704583 SSU-rRNA_Hsa 1000 . -12 34372315 34372825 LSU-rRNA_Hsa 1000 . -12 34432130 34857010 centromeric_repeat 1000 . -12 37989447 38441828 centromeric_repeat 1000 . -12 38531376 38531930 LSU-rRNA_Hsa 1000 . -12 41757383 41757545 Low_mappability_island 1000 . -12 127650407 127651075 LSU-rRNA_Hsa 1000 . -12 132061320 132062046 Low_mappability_island 1000 . -13 56545728 56545925 Low_mappability_island 1000 . -13 110076444 110076782 Low_mappability_island 1000 . -14 18999935 19056900 centromeric_repeat 1000 . -14 32953263 32954381 Low_mappability_island 1000 . -14 84637832 84639038 Low_mappability_island 1000 . -14 90341302 90341516 SSU-rRNA_Hsa 1000 . -15 19999941 20044132 centromeric_repeat 1000 . -16 32493036 32570826 ALR/Alpha 1000 . -16 32590063 32598801 ALR/Alpha 1000 . -16 33237130 33241330 Low_mappability_island 1000 . -16 33864355 34023306 centromeric_repeat 1000 . -16 34180542 34197081 Satellite_repeat 1000 . -16 34530115 34542632 BSR/Beta 1000 . -16 35193580 35285885 centromeric_repeat 1000 . -16 46385718 46456668 Satellite_repeat 1000 . -16 46497639 46500515 Satellite_repeat 1000 . -16 47538629 47539297 LSU-rRNA_Hsa 1000 . -17 19355538 19356096 LSU-rRNA_Hsa 1000 . -17 19502495 19506773 Low_mappability_island 1000 . -17 21905167 21906712 centromeric_repeat 1000 . -17 22018524 22032049 Low_mappability_island 1000 . -17 22221073 22263006 centromeric_repeat 1000 . -17 25263010 25268059 Satellite_repeat 1000 . -17 25415551 25417559 telomeric_repeat 1000 . -17 31149365 31149981 High_Mappability_island 1000 . -17 33478114 33478372 LSU-rRNA_Hsa 1000 . -17 41381502 41382591 High_Mappability_island 1000 . -17 41463538 41464075 High_Mappability_island 1000 . -17 41464478 41465015 snRNA 1000 . -17 41465562 41467288 High_Mappability_island 1000 . -17 51183038 51183763 Low_mappability_island 1000 . -17 55868618 55868752 LSU-rRNA_Hsa 1000 . -17 75158031 75158430 LSU-rRNA_Hsa 1000 . -18 96416 97552 Satellite_repeat 1000 . -18 105658 112233 Satellite_repeat 1000 . -18 2842252 2842356 Low_mappability_island 1000 . -18 15393801 15393992 centromeric_repeat 1000 . -18 18510894 18520356 centromeric_repeat 1000 . -18 44126235 44126593 (CATTC)n 1000 . -18 45379603 45379864 Low_mappability_island 1000 . -18 50319086 50319301 Low_mappability_island 1000 . -18 77772846 77773065 LSU-rRNA_Hsa 1000 . -19 246006 247844 TAR1 1000 . -19 22877614 22877696 SSU-rRNA_Hsa 1000 . -19 23235030 23235504 BSR/Beta 1000 . -19 24182398 24186210 LSU-rRNA_Hsa 1000 . -19 24385474 24633168 centromeric_repeat 1000 . -19 27730611 28262682 centromeric_repeat 1000 . -19 36066445 36066810 LSU-rRNA_Hsa 1000 . -19 36756398 36800948 centromeric_repeat 1000 . -19 37759473 37797722 centromeric_repeat 1000 . -19 44914313 44916340 ACRO1 1000 . -19 44960681 44962681 ACRO1 1000 . -2 739925 740994 Low_mappability_island 1000 . -2 49456729 49457067 Low_mappability_island 1000 . -2 88124390 88124903 Low_mappability_island 1000 . -2 89830421 89880514 Satellite_repeat 1000 . -2 90371401 90394776 Satellite_repeat 1000 . -2 90443001 90545431 Low_mappability_island 1000 . -2 91595080 91616015 Satellite_repeat 1000 . -2 92267428 92326280 centromeric_repeat 1000 . -2 115695017 115695281 LSU-rRNA_Hsa 1000 . -2 117781085 117781300 Low_mappability_island 1000 . -2 132966248 132989300 centromeric_repeat 1000 . -2 132994855 133007983 ALR/Alpha 1000 . -2 133011824 133013298 SSU-rRNA_Hsa 1000 . -2 133036250 133040042 LSU-rRNA_Hsa 1000 . -2 133044095 133045945 ACRO1 1000 . -2 143848503 143848792 Low_mappability_island 1000 . -2 148022736 148022878 Low_mappability_island 1000 . -2 149639207 149639515 Low_mappability_island 1000 . -2 156120500 156120610 Low_mappability_island 1000 . -2 162135000 162139241 Low_mappability_island 1000 . -2 230045426 230045796 LSU-rRNA_Hsa 1000 . -20 26257032 26320267 centromeric_repeat 1000 . -20 29517710 29521147 centromeric_repeat 1000 . -20 29803876 29833334 centromeric_repeat 1000 . -20 55932703 55936114 chrM 1000 . -20 62916702 62918053 telomeric_repeat 1000 . -21 9647205 9648529 Low_mappability_island 1000 . -21 9694896 9704962 centromeric_repeat 1000 . -21 9825451 9827612 High_Mappability_island 1000 . -21 9827612 9845233 Low_mappability_island 1000 . -21 9881895 9882569 TAR1 1000 . -21 10084922 10088004 Satellite_repeat 1000 . -21 10492876 10493049 Low_mappability_island 1000 . -21 10599428 10599915 TAR1 1000 . -21 10697886 10860890 centromeric_repeat 1000 . -21 11186054 11188131 Satellite_repeat 1000 . -21 14338127 14369791 centromeric_repeat 1000 . -21 18800575 18800997 (GAGTG)n 1000 . -21 27228003 27228242 SSU-rRNA_Hsa 1000 . -21 46796081 46796336 Low_mappability_island 1000 . -22 16847814 16862659 Satellite_repeat 1000 . -22 18876789 18884510 Satellite_repeat 1000 . -3 25508897 25509131 Low_mappability_island 1000 . -3 73159606 73161131 snRNA 1000 . -3 75696297 75699304 BSR/Beta 1000 . -3 75717841 75720426 Satellite_repeat 1000 . -3 80995858 81014459 ALR/Alpha 1000 . -3 90311686 90507410 centromeric_repeat 1000 . -3 93504815 93519133 centromeric_repeat 1000 . -3 96335934 96337436 Low_mappability_island 1000 . -3 160665423 160665642 Low_mappability_island 1000 . -3 196625514 196625860 Satellite_repeat 1000 . -3 197825427 197834080 Low_mappability_island 1000 . -4 9987 12694 telomeric_repeat 1000 . -4 12276463 12292424 ALR/Alpha 1000 . -4 12641862 12642305 Low_mappability_island 1000 . -4 21583630 21583719 (GAATG)n 1000 . -4 27732004 27732240 Low_mappability_island 1000 . -4 47774268 47774416 Low_mappability_island 1000 . -4 49085372 49342114 centromeric_repeat 1000 . -4 49488472 49662085 centromeric_repeat 1000 . -4 52659961 52688986 centromeric_repeat 1000 . -4 56194229 56194584 Low_mappability_island 1000 . -4 65473858 65473941 Low_mappability_island 1000 . -4 68264186 68266830 centromeric_repeat 1000 . -4 70296565 70296841 LSU-rRNA_Hsa 1000 . -4 76807083 76807320 LSU-rRNA_Hsa 1000 . -4 78929660 78929920 Low_mappability_island 1000 . -4 156374749 156377226 chrM 1000 . -4 156384860 156387314 Low_mappability_island 1000 . -4 163342479 163342744 Low_mappability_island 1000 . -4 190190746 190203442 Low_mappability_island 1000 . -4 190801869 190802909 Low_mappability_island 1000 . -4 190943802 190943962 Satellite_repeat 1000 . -4 190987268 190990949 Satellite_repeat 1000 . -4 191026302 191044344 telomeric_repeat 1000 . -5 17517177 17600940 Low_mappability_island 1000 . -5 21477365 21497415 Low_mappability_island 1000 . -5 34177882 34197574 Low_mappability_island 1000 . -5 45908253 46411114 centromeric_repeat 1000 . -5 49405493 49554574 centromeric_repeat 1000 . -5 71146650 71146996 LSU-rRNA_Hsa 1000 . -5 79945807 79948223 Low_mappability_island 1000 . -5 93903068 93906726 Low_mappability_island 1000 . -5 97746525 97746679 Low_mappability_island 1000 . -5 99381556 99390873 Low_mappability_island 1000 . -5 105889063 105889263 chrM 1000 . -5 123095972 123097432 chrM 1000 . -5 134258949 134264271 Low_mappability_island 1000 . -5 174541634 174542177 SSU-rRNA_Hsa 1000 . -6 58735349 58739031 centromeric_repeat 1000 . -6 58745955 58780547 centromeric_repeat 1000 . -6 61880095 61944008 centromeric_repeat 1000 . -6 62189892 62206612 ALR/Alpha 1000 . -6 62207809 62230644 ALR/Alpha 1000 . -6 62283966 62284581 Low_mappability_island 1000 . -6 133593944 133594201 LSU-rRNA_Hsa 1000 . -6 137059142 137059326 SSU-rRNA_Hsa 1000 . -6 150665074 150665281 SSU-rRNA_Hsa 1000 . -6 157731310 157735525 Low_mappability_island 1000 . -7 43878355 43878530 TAR1 1000 . -7 45291517 45291740 Low_mappability_island 1000 . -7 56437808 56442977 Low_mappability_island 1000 . -7 57253980 57254183 Low_mappability_island 1000 . -7 57255310 57255444 Low_mappability_island 1000 . -7 57261829 57261998 Low_mappability_island 1000 . -7 57544726 57556913 Satellite_repeat 1000 . -7 57811488 57836990 centromeric_repeat 1000 . -7 57939184 58055539 centromeric_repeat 1000 . -7 61054285 62454680 centromeric_repeat 1000 . -7 64059157 64066183 BSR/Beta 1000 . -7 64951348 64956223 centromeric_repeat 1000 . -7 68201468 68201673 Low_mappability_island 1000 . -7 68527370 68527788 LSU-rRNA_Hsa 1000 . -7 80962907 80963147 SSU-rRNA_Hsa 1000 . -7 100550640 100551321 Low_mappability_island 1000 . -7 142372972 142375638 Low_mappability_island 1000 . -7 145694403 145694561 Low_mappability_island 1000 . -8 155512 157639 TAR1 1000 . -8 21455971 21456306 LSU-rRNA_Hsa 1000 . -8 32868966 32873279 Low_mappability_island 1000 . -8 43092737 43097573 Satellite_repeat 1000 . -8 43399486 43843604 centromeric_repeat 1000 . -8 46838215 47457541 centromeric_repeat 1000 . -8 47739043 47742797 Low_mappability_island 1000 . -8 47750844 47776101 BSR/Beta 1000 . -8 56754955 56755418 LSU-rRNA_Hsa 1000 . -8 69218401 69218922 LSU-rRNA_Hsa 1000 . -8 70602248 70602620 LSU-rRNA_Hsa 1000 . -8 77114154 77114389 Low_mappability_island 1000 . -8 100508010 100508287 Low_mappability_island 1000 . -9 10435 11574 TAR1 1000 . -9 4799734 4800000 SSU-rRNA_Hsa 1000 . -9 33656606 33659249 Low_mappability_island 1000 . -9 42819021 42832395 centromeric_repeat 1000 . -9 44070617 44070871 Low_mappability_island 1000 . -9 44873123 44902307 centromeric_repeat 1000 . -9 45355954 45357644 telomeric_repeat 1000 . -9 45435109 45443517 centromeric_repeat 1000 . -9 66494170 66494805 TAR1 1000 . -9 66767710 66864329 centromeric_repeat 1000 . -9 66970914 67005594 centromeric_repeat 1000 . -9 67315122 67321036 centromeric_repeat 1000 . -9 67789868 67792893 centromeric_repeat 1000 . -9 68410775 68435115 Low_mappability_island 1000 . -9 69677073 69687998 centromeric_repeat 1000 . -9 69689770 69711497 centromeric_repeat 1000 . -9 69947961 70011196 centromeric_repeat 1000 . -9 70076144 70076855 centromeric_repeat 1000 . -9 70318723 70327683 centromeric_repeat 1000 . -9 72653073 72653572 Satellite_repeat 1000 . -9 78790077 78790255 (GAATG)n 1000 . -9 79186574 79187026 LSU-rRNA_Hsa 1000 . -9 141019938 141021783 TAR1 1000 . -MT 1 16569 chrM 1000 . -X 55206111 55206740 Low_mappability_island 1000 . -X 55207753 55208152 Low_mappability_island 1000 . -X 55208300 55208643 Low_mappability_island 1000 . -X 55208980 55209208 Low_mappability_island 1000 . -X 55209655 55210006 Low_mappability_island 1000 . -X 58330488 58330843 centromeric_repeat 1000 . -X 58373806 58373962 centromeric_repeat 1000 . -X 58377680 58377864 centromeric_repeat 1000 . -X 58415350 58416387 centromeric_repeat 1000 . -X 58432411 58432680 centromeric_repeat 1000 . -X 58485887 58486241 centromeric_repeat 1000 . -X 58488898 58494528 centromeric_repeat 1000 . -X 58499466 58504235 centromeric_repeat 1000 . -X 58506076 58528214 centromeric_repeat 1000 . -X 58528184 58536883 centromeric_repeat 1000 . -X 58544061 58582415 centromeric_repeat 1000 . -X 61681834 61919683 centromeric_repeat 1000 . -X 62003205 62041580 centromeric_repeat 1000 . -X 83658929 83659019 Low_mappability_island 1000 . -X 108297348 108297886 LSU-rRNA_Hsa 1000 . -X 114959057 115006437 Low_mappability_island 1000 . -X 125605623 125607351 Low_mappability_island 1000 . -X 125714985 125715338 Low_mappability_island 1000 . -X 125864844 125864980 Low_mappability_island 1000 . -X 125865719 125865874 Low_mappability_island 1000 . -Y 313470 313613 ALR/Alpha 1000 . -Y 3004989 3005175 LSU-rRNA_Hsa 1000 . -Y 4212807 4212910 Low_mappability_island 1000 . -Y 7671817 7694928 BSR/Beta 1000 . -Y 7726064 7730229 BSR/Beta 1000 . -Y 7730734 7731598 BSR/Beta 1000 . -Y 7735811 7752887 BSR/Beta 1000 . -Y 7785067 7806311 BSR/Beta 1000 . -Y 7806856 7814704 BSR/Beta 1000 . -Y 7815230 7820478 BSR/Beta 1000 . -Y 7829937 7832032 BSR/Beta 1000 . -Y 7832744 7848695 BSR/Beta 1000 . -Y 7870343 7873582 BSR/Beta 1000 . -Y 7874115 7874584 BSR/Beta 1000 . -Y 7875409 7885257 BSR/Beta 1000 . -Y 7886545 7894591 BSR/Beta 1000 . -Y 7898927 7916812 BSR/Beta 1000 . -Y 7918790 7921352 BSR/Beta 1000 . -Y 7926344 7936705 BSR/Beta 1000 . -Y 7941130 7947438 BSR/Beta 1000 . -Y 7948790 7964448 BSR/Beta 1000 . -Y 8179010 8181143 BSR/Beta 1000 . -Y 8181757 8213330 BSR/Beta 1000 . -Y 8214629 8215637 BSR/Beta 1000 . -Y 8220421 8230061 BSR/Beta 1000 . -Y 8230686 8231546 BSR/Beta 1000 . -Y 8240772 8265916 BSR/Beta 1000 . -Y 8291535 8292942 BSR/Beta 1000 . -Y 8294002 8295175 BSR/Beta 1000 . -Y 8296944 8321375 BSR/Beta 1000 . -Y 8325813 8325929 BSR/Beta 1000 . -Y 8326678 8333466 BSR/Beta 1000 . -Y 8334027 8342387 BSR/Beta 1000 . -Y 8356544 8369346 BSR/Beta 1000 . -Y 8909560 8909925 TAR1 1000 . -Y 8979478 8979585 Low_mappability_island 1000 . -Y 9072781 9072993 TAR1 1000 . -Y 9908430 9925608 centromeric_repeat 1000 . -Y 9981952 9982126 BSR/Beta 1000 . -Y 10034864 10036712 SSU-rRNA_Hsa 1000 . -Y 10040627 10045657 ALR/Alpha 1000 . -Y 10047773 10052533 ALR/Alpha 1000 . -Y 10053695 10057722 ALR/Alpha 1000 . -Y 10059394 10073694 ALR/Alpha 1000 . -Y 10075082 10075781 ALR/Alpha 1000 . -Y 10080736 10104539 ALR/Alpha 1000 . -Y 13104530 13144368 centromeric_repeat 1000 . -Y 13193966 13196535 Low_mappability_island 1000 . -Y 13252193 13259484 centromeric_repeat 1000 . -Y 13290177 13290667 chrM 1000 . -Y 13445957 13490591 Satellite_repeat 1000 . -Y 13642186 13749784 Satellite_repeat 1000 . -Y 13798522 13870984 Satellite_repeat 1000 . -Y 19691913 19692524 LSU-rRNA_Hsa 1000 . -Y 19764063 19776198 ALR/Alpha 1000 . -Y 19780600 19781704 ALR/Alpha 1000 . -Y 19783669 19796396 ALR/Alpha 1000 . -Y 19800068 19801419 ALR/Alpha 1000 . -Y 19808085 19817100 ALR/Alpha 1000 . -Y 19944298 19944581 TAR1 1000 . -Y 20235195 20235478 TAR1 1000 . -Y 20362679 20371694 ALR/Alpha 1000 . -Y 20378360 20379711 ALR/Alpha 1000 . -Y 20383383 20396110 ALR/Alpha 1000 . -Y 20398075 20399179 ALR/Alpha 1000 . -Y 20403581 20415713 ALR/Alpha 1000 . -Y 20487248 20487859 LSU-rRNA_Hsa 1000 . -Y 23124788 23125577 BSR/Beta 1000 . -Y 23149027 23151205 BSR/Beta 1000 . -Y 23157969 23158245 BSR/Beta 1000 . -Y 23159001 23167737 BSR/Beta 1000 . -Y 23178886 23181770 BSR/Beta 1000 . -Y 23220740 23223625 BSR/Beta 1000 . -Y 23234125 23235822 BSR/Beta 1000 . -Y 23236898 23248080 BSR/Beta 1000 . -Y 23248729 23248851 BSR/Beta 1000 . -Y 23899295 23899388 TAR1 1000 . -Y 23956449 23956628 TAR1 1000 . -Y 24247659 24247700 TAR1 1000 . -Y 24630999 24631040 TAR1 1000 . -Y 24953159 24975657 BSR/Beta 1000 . -Y 24980997 24991235 BSR/Beta 1000 . -Y 25022753 25039185 BSR/Beta 1000 . -Y 25040153 25042421 BSR/Beta 1000 . -Y 25048332 25059258 BSR/Beta 1000 . -Y 25060235 25064798 BSR/Beta 1000 . -Y 25099139 25121882 BSR/Beta 1000 . -Y 25122419 25160800 BSR/Beta 1000 . -Y 25182404 25192372 BSR/Beta 1000 . -Y 25217722 25219409 BSR/Beta 1000 . -Y 25493588 25495275 BSR/Beta 1000 . -Y 26148315 26148450 TAR1 1000 . -Y 26586905 26609405 BSR/Beta 1000 . -Y 26614745 26624983 BSR/Beta 1000 . -Y 26656502 26672934 BSR/Beta 1000 . -Y 26673902 26676170 BSR/Beta 1000 . -Y 26682081 26693007 BSR/Beta 1000 . -Y 26693984 26698547 BSR/Beta 1000 . -Y 26732883 26755623 BSR/Beta 1000 . -Y 26756160 26794538 BSR/Beta 1000 . -Y 26816148 26826116 BSR/Beta 1000 . -Y 26851466 26853153 BSR/Beta 1000 . -Y 27109247 27110934 BSR/Beta 1000 . -Y 27136281 27146249 BSR/Beta 1000 . -Y 27167859 27206241 BSR/Beta 1000 . -Y 27206778 27229502 BSR/Beta 1000 . -Y 27263848 27268411 BSR/Beta 1000 . -Y 27269388 27280315 BSR/Beta 1000 . -Y 27286226 27288494 BSR/Beta 1000 . -Y 27289462 27305895 BSR/Beta 1000 . -Y 27337415 27347656 BSR/Beta 1000 . -Y 27352996 27375497 BSR/Beta 1000 . -Y 27813984 27814119 TAR1 1000 . -Y 28555026 28555353 TAR1 1000 . -Y 28784129 28819695 Satellite_repeat 1000 . -Y 58819367 58917648 (CATTC)n 1000 . -Y 58971913 58997782 (CATTC)n 1000 . -Y 59361267 59362785 TAR1 1000 . From 1fc2743be3bda2d5ccfa65a77950162d5f89f3b8 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 12 Oct 2021 16:37:41 +0100 Subject: [PATCH 601/675] Correct syntax in a workflow --- subworkflows/local/annotate_meta_awk.nf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/annotate_meta_awk.nf b/subworkflows/local/annotate_meta_awk.nf index 467bc248..5ff654d9 100644 --- a/subworkflows/local/annotate_meta_awk.nf +++ b/subworkflows/local/annotate_meta_awk.nf @@ -12,10 +12,10 @@ include { AWK_SCRIPT } from "../../modules/local/awk_script" addParams( options: include { AWK } from "../../modules/local/awk" addParams( options: params.options ) workflow ANNOTATE_META_AWK { - take: passthrough - take: report - take: script - main: + take: + passthrough + report + script main: // Strip out the sample id from the meta in the passthrough From 211081d9614770e5061a3fbd3c91d4b697ab7e24 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 13 Oct 2021 11:21:13 +0100 Subject: [PATCH 602/675] Added a peak repro calculation module --- bin/peak_reproducability.py | 72 ++++++++++++------- conf/modules.config | 8 +++ .../calculate_peak_reprod/environment.yml | 4 +- .../modules/calculate_peak_reprod/main.nf | 11 ++- workflows/cutandrun.nf | 22 ++++++ 5 files changed, 82 insertions(+), 35 deletions(-) diff --git a/bin/peak_reproducability.py b/bin/peak_reproducability.py index 68de71c8..69c235c4 100755 --- a/bin/peak_reproducability.py +++ b/bin/peak_reproducability.py @@ -4,21 +4,21 @@ import glob import argparse -import deeptools.countReadsPerBin as crpb -import pysam +import dask.dataframe as dd +import numpy as np +import pandas as pd ############################################ ############################################ ## PARSE ARGUMENTS ############################################ ############################################ -Description = 'Calclate FRIP scores (FRagment proportion in Peaks regions) using deeptools for each sample' +Description = 'Calclate peak reproducability percentage for each sample' parser = argparse.ArgumentParser(description=Description) ## REQUIRED PARAMETERS -parser.add_argument('--bams', help="Bam file.") -parser.add_argument('--peaks', help="Peaks interval file.") +parser.add_argument('--intersect', help="Peaks intersect file.") parser.add_argument('--threads', help="the number of threads for the task.") parser.add_argument('--outpath', help="Full path to output directory.") args = parser.parse_args() @@ -29,34 +29,52 @@ ############################################ ############################################ -# https://deeptools.readthedocs.io/en/develop/content/example_api_tutorial.html +# Init +peak_perc = 0 -# Create file lists -bam_file_list = glob.glob(args.bams) -peak_file_list = glob.glob(args.peaks) +print('Reading file') -frips = [] -for idx, bam_file in enumerate(bam_file_list): - print("Calculating " + bam_file + " using " + peak_file_list[idx]) - cr = crpb.CountReadsPerBin([bam_file], bedFile=[peak_file_list[idx]], numberOfProcessors=int(args.threads)) +# Read file in using dask +ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','key','a_name','b_name','count']) - # Calc the total number of reads in peaks per bam file - reads_at_peaks = cr.run() - total = reads_at_peaks.sum(axis=0) +# Find number of files +numfiles = ddf_inter['b_name'].max().compute() - # Load up bam file and get the total number of mapped reads - bam = pysam.AlignmentFile(bam_file) +# Check for table format +if isinstance(numfiles, str): + print('Detected single file, reloading table') + numfiles = 1 + ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','overlap_2','key','name','count']) + +print('Number of files: ' + str(numfiles)) - # Calc frip - frip = float(total[0]) / bam.mapped - frips.append(str(frip)) +# Check for empty file +if numfiles != 0: + # Find total number of peaks + ddf_inter_grouped = ddf_inter.groupby(by=["key"]).size() + df_inter_grouped = ddf_inter_grouped.compute() + total_peaks = len(df_inter_grouped.index) + print('Total peaks: ' + str(total_peaks)) - # Log - print("Frip = " + str(frip)) + if total_peaks > 0: + # Filter for files which had an overlap and group by peak + ddf_inter_filt = ddf_inter[ddf_inter["count"] > 0] + ddf_inter_grouped = ddf_inter_filt.groupby(by=["key"]).size() + df_inter_grouped = ddf_inter_grouped.compute() + df_inter_grouped = df_inter_grouped.reset_index() + df_inter_grouped = df_inter_grouped.rename({0: 'count'}, axis=1) + + # Filter for peaks which have full overlap + df_inter_grouped_filter = df_inter_grouped[df_inter_grouped["count"] == numfiles] + overlap_peaks = len(df_inter_grouped_filter.index) + print('Overlap peaks: ' + str(overlap_peaks)) + + # Calc peak percentage + peak_perc = (overlap_peaks / total_peaks) * 100 # Create string and write to file -frip_string = ",".join(frips) -writer = open(os.path.join(args.outpath, "frips.csv"), "w") -writer.write("frip\n") -writer.write(frip_string) +output_string = str(peak_perc) +writer = open(os.path.join(args.outpath, "peak_repro.csv"), "w") +writer.write("peak_repro\n") +writer.write(output_string) writer.close() \ No newline at end of file diff --git a/conf/modules.config b/conf/modules.config index 6207dc87..83946d06 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -251,6 +251,14 @@ params { publish_files = false } + "calc_peak_repro" { + publish_files = false + } + + "meta_csv_peak_repro_options" { + publish_files = false + } + "generate_reports" { publish_dir = "04_reporting/qc" } diff --git a/modules/local/modules/calculate_peak_reprod/environment.yml b/modules/local/modules/calculate_peak_reprod/environment.yml index 96df47cb..813e897e 100644 --- a/modules/local/modules/calculate_peak_reprod/environment.yml +++ b/modules/local/modules/calculate_peak_reprod/environment.yml @@ -9,5 +9,5 @@ dependencies: - python=3.8.3 # conda packages - - pandas - - dask \ No newline at end of file + - pandas=1.3.3 + - dask=2021.9.1 \ No newline at end of file diff --git a/modules/local/modules/calculate_peak_reprod/main.nf b/modules/local/modules/calculate_peak_reprod/main.nf index 2846727c..5cc96586 100644 --- a/modules/local/modules/calculate_peak_reprod/main.nf +++ b/modules/local/modules/calculate_peak_reprod/main.nf @@ -9,11 +9,11 @@ process CALCULATE_PEAK_REPROD { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } - conda (params.enable_conda ? "conda-forge::python=3.8.3 bioconda::deeptools=3.5.* bioconda::pysam=0.17.*" : null) - container "luslab/cutandrun-dev-frip:latest" + conda (params.enable_conda ? "conda-forge::python=3.8.3 conda-forge::dask=2021.9.1 conda-forge::pandas=1.3.3" : null) + container "luslab/cutandrun-dev-peakrepo:latest" input: - tuple val(meta), path(bam), path(bai), path(bed) + tuple val(meta), path(bed) output: tuple val(meta), path('peak_repro.csv'), emit: csv @@ -21,9 +21,8 @@ process CALCULATE_PEAK_REPROD { script: """ - frip.py \\ - --bams "*.bam" \\ - --peaks "*.bed" \\ + peak_reproducability.py \\ + --intersect $bed \\ --threads ${task.cpus} \\ --outpath . diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index bcea9f56..38595df4 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -302,6 +302,7 @@ include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) +include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) @@ -321,6 +322,7 @@ include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) include { FASTQC_TRIMGALORE } from "../subworkflows/local/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) include { ANNOTATE_META_CSV as ANNOTATE_FRIP_META } from "../subworkflows/local/annotate_meta_csv" addParams( options: modules["meta_csv_frip_options"] ) +include { ANNOTATE_META_CSV as ANNOTATE_PEAK_REPRO_META } from "../subworkflows/local/annotate_meta_csv" addParams( options: modules["meta_csv_peak_repro_options"] ) /* ======================================================================================== @@ -958,8 +960,28 @@ workflow CUTANDRUN { ch_beds_intersect, "bed" ) + //EXAMPLE CHANNEL STRUCT: [[META], BED] //BEDTOOLS_INTERSECT.out.intersect | view + /* + * MODULE: Use overlap to calculate a peak repro % + */ + CALCULATE_PEAK_REPROD ( + BEDTOOLS_INTERSECT.out.intersect + ) + //EXAMPLE CHANNEL STRUCT: [[META], CSV] + //CALCULATE_PEAK_REPROD.out.csv + + /* + * SUBWORKFLOW: Annotate meta-data with peak stats + */ + ANNOTATE_PEAK_REPRO_META ( + ch_samtools_bam, + CALCULATE_PEAK_REPROD.out.csv + ) + ch_samtools_bam = ANNOTATE_PEAK_REPRO_META.out.output + //ch_samtools_bam | view + /* * MODULE: Export meta-data to csv file */ From eb4e8476657dc119b32f4ec1d281ba153a8609a5 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 09:49:03 +0100 Subject: [PATCH 603/675] Updated reporting to not use bam files --- bin/lib/reports.py | 219 ++++++++++-------------------- bin/reporting.py | 4 +- modules/local/generate_reports.nf | 3 - workflows/cutandrun.nf | 17 --- 4 files changed, 71 insertions(+), 172 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 13aeed19..9af33680 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -20,13 +20,12 @@ class Reports: seacr_beds = None bams = None - def __init__(self, logger, meta, raw_frags, bin_frag, seacr_bed, bams): + def __init__(self, logger, meta, raw_frags, bin_frag, seacr_bed): self.logger = logger self.meta_path = meta self.raw_frag_path = raw_frags self.bin_frag_path = bin_frag self.seacr_bed_path = seacr_bed - self.bam_path = bams sns.set() sns.set_theme() @@ -208,103 +207,6 @@ def load_seacr_peaks(self): # Get peak stats by group and replicate self.seacr_beds_group_rep = self.seacr_beds[['group','replicate']].groupby(['group','replicate']).size().reset_index().rename(columns={0:'all_peaks'}) - def pe_bam_to_df(self, bam_path): - bamfile = pysam.AlignmentFile(bam_path, "rb") - # Iterate through reads. - read1 = None - read2 = None - k=0 #counter - - # get number of reads in bam - count = 0 - for _ in bamfile: - count += 1 - - bamfile.close() - bamfile = pysam.AlignmentFile(bam_path, "rb") - - # initialise arrays - frag_no = round(count/2) - start_arr = np.zeros(frag_no, dtype=np.int64) - end_arr = np.zeros(frag_no, dtype=np.int64) - chrom_arr = np.empty(frag_no, dtype=" Date: Tue, 19 Oct 2021 10:54:29 +0100 Subject: [PATCH 604/675] Added two mets data stream for control and no control data --- bin/lib/reports.py | 10 ++++--- bin/reporting.py | 4 ++- modules/local/export_meta.nf | 6 +++-- modules/local/generate_reports.nf | 2 ++ workflows/cutandrun.nf | 44 ++++++++++++++++++++----------- 5 files changed, 43 insertions(+), 23 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 9af33680..3cc5c347 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -20,9 +20,10 @@ class Reports: seacr_beds = None bams = None - def __init__(self, logger, meta, raw_frags, bin_frag, seacr_bed): + def __init__(self, logger, meta, meta_ctrl, raw_frags, bin_frag, seacr_bed): self.logger = logger self.meta_path = meta + self.meta_ctrl_path = meta_ctrl self.raw_frag_path = raw_frags self.bin_frag_path = bin_frag self.seacr_bed_path = seacr_bed @@ -98,7 +99,8 @@ def load_meta_data(self): # Spike-in Scale Factor # Normalised Fragment Count - self.metadata_table = pd.read_csv(self.meta_path, sep=',') + self.metadata_noctrl_table = pd.read_csv(self.meta_path, sep=',') + self.metadata_table = pd.read_csv(self.meta_ctrl_path, sep=',') self.duplicate_info = False if 'dedup_percent_duplication' in self.metadata_table.columns: self.duplicate_info = True @@ -579,7 +581,7 @@ def reproduced_peaks(self): fig, ax = plt.subplots() # Subset data - df_data = self.metadata_table.loc[:, ('id', 'group', 'peak_repro')] + df_data = self.metadata_noctrl_table.loc[:, ('id', 'group', 'peak_repro')] # plot ax = sns.boxplot(data=df_data, x="group", y="peak_repro", palette = "magma") @@ -595,7 +597,7 @@ def frags_in_peaks(self): fig, ax = plt.subplots() # Subset data - df_data = self.metadata_table.loc[:, ('id', 'group', 'frip')] + df_data = self.metadata_noctrl_table.loc[:, ('id', 'group', 'frip')] ax = sns.boxplot(data=df_data, x='group', y='frip', palette = "magma") ax.set_ylabel("Fragments within Peaks (%)") diff --git a/bin/reporting.py b/bin/reporting.py index e558cd31..afce480c 100755 --- a/bin/reporting.py +++ b/bin/reporting.py @@ -30,6 +30,7 @@ def init_logger(app_name, log_file = None): def gen_png(parsed_args): meta_path = parsed_args.meta + meta_ctrl_path = parsed_args.meta_ctrl frag_path = parsed_args.raw_frag output_path = parsed_args.output logger = init_logger('gen_img', parsed_args.log) @@ -37,7 +38,7 @@ def gen_png(parsed_args): seacr_bed_path = parsed_args.seacr_bed logger.info('Generating plots to output folder') - report_gen = Reports(logger, meta_path, frag_path, bin_frag_path, seacr_bed_path) + report_gen = Reports(logger, meta_path, meta_ctrl_path, frag_path, bin_frag_path, seacr_bed_path) report_gen.generate_cutandrun_reports(output_path) logger.info('Completed') @@ -52,6 +53,7 @@ def gen_png(parsed_args): parser_genimg.set_defaults(func=gen_png) parser_genimg.add_argument('--log', required=False) parser_genimg.add_argument('--meta', required=True) + parser_genimg.add_argument('--meta_ctrl', required=True) parser_genimg.add_argument('--raw_frag', required=True) parser_genimg.add_argument('--bin_frag', required=True) parser_genimg.add_argument('--seacr_bed', required=True) diff --git a/modules/local/export_meta.nf b/modules/local/export_meta.nf index bdc9977a..832ddb2e 100644 --- a/modules/local/export_meta.nf +++ b/modules/local/export_meta.nf @@ -18,9 +18,11 @@ process EXPORT_META { input: val meta + val table_name + output: - path "meta_table.csv", emit: csv + path "*.csv", emit: csv script: def header = [:] @@ -54,6 +56,6 @@ process EXPORT_META { } """ - echo "$arr_str" > meta_table.csv + echo "$arr_str" > ${table_name}.csv """ } diff --git a/modules/local/generate_reports.nf b/modules/local/generate_reports.nf index 28a8d34b..3b817132 100644 --- a/modules/local/generate_reports.nf +++ b/modules/local/generate_reports.nf @@ -13,6 +13,7 @@ process GENERATE_REPORTS { input: path meta_data + path meta_data_ctrl path raw_fragments path bed_fragments path seacr_beds @@ -29,6 +30,7 @@ process GENERATE_REPORTS { """ reporting.py gen_reports \\ --meta $meta_data \\ + --meta_ctrl $meta_data_ctrl \\ --raw_frag "*.frag_len.txt" \\ --bin_frag "*bin500.awk.bed" \\ --seacr_bed "*bed.*.bed" \\ diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 8f8ca9ab..f03d8270 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -292,21 +292,22 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title /* * MODULES */ -include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) -include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) -include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) -include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) -include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) -include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) -include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) -include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) -include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) -include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) -include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) -include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) +include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) +include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) +include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) +include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) +include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) +include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) +include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) +include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) +include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) +include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { EXPORT_META as EXPORT_META_CTRL } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) +include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -932,6 +933,7 @@ workflow CUTANDRUN { ch_samtools_bam, CALCULATE_FRIP.out.frips ) + ch_samtools_bam_ctrl = ch_samtools_bam ch_samtools_bam = ANNOTATE_FRIP_META.out.output //ch_samtools_bam | view @@ -986,7 +988,16 @@ workflow CUTANDRUN { * MODULE: Export meta-data to csv file */ EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]) + ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]), + "meta_table" + ) + + /* + * MODULE: Export meta-data to csv file + */ + EXPORT_META_CTRL ( + ch_samtools_bam_ctrl.collect{it[0]}.ifEmpty(["{NO-DATA}"]), + "meta_table_ctrl" ) /* @@ -994,6 +1005,7 @@ workflow CUTANDRUN { */ GENERATE_REPORTS( EXPORT_META.out.csv, // meta-data report stats + EXPORT_META_CTRL.out.csv, // meta-data report stats SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments ch_seacr_bed.collect{it[1]}, // peak beds From 7e8141b8ca7446d806afc36ed8ad9db4055c5242 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 11:09:51 +0100 Subject: [PATCH 605/675] Frip score changed to percentage --- bin/lib/reports.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 3cc5c347..36697e0c 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -109,6 +109,9 @@ def load_meta_data(self): self.metadata_table['target_alignment_rate'] = self.metadata_table.loc[:, ('bt2_total_aligned_target')] / self.metadata_table.loc[:, ('bt2_total_reads_target')] * 100 self.metadata_table['spikein_alignment_rate'] = self.metadata_table.loc[:, ('bt2_total_aligned_spikein')] / self.metadata_table.loc[:, ('bt2_total_reads_spikein')] * 100 + # Change to percentage + self.metadata_noctrl_table['frip'] = self.metadata_noctrl_table['frip'] * 100 + def load_raw_frag_histogram(self): # Plots supported @@ -431,7 +434,7 @@ def alignment_summary(self): ax = sns.boxplot(data=df_data, x='group', y='target_alignment_rate', palette = "magma") fig.suptitle("Alignment Rate (Target)") ax.set(ylabel="Percent of Fragments Aligned") - ax.set(ylim=(0, 100)) + #ax.set(ylim=(0, 100)) ax.xaxis.set_tick_params(labelrotation=45) figs.append(fig) @@ -440,7 +443,7 @@ def alignment_summary(self): ax = sns.boxplot(data=df_data, x='group', y='spikein_alignment_rate', palette = "magma") fig.suptitle("Alignment Rate (Spike-in)") ax.set(ylabel="Percent of Fragments Aligned") - ax.set(ylim=(0, 100)) + #ax.set(ylim=(0, 100)) ax.xaxis.set_tick_params(labelrotation=45) figs.append(fig) From 170634bb88488fec2a72f8456abc2a474459b225 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 12:48:41 +0100 Subject: [PATCH 606/675] Clean up --- bin/lib/reports.py | 67 ++---------------------------------------- conf/modules.config | 9 +++--- workflows/cutandrun.nf | 2 -- 3 files changed, 6 insertions(+), 72 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 36697e0c..ac45c1a3 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -9,8 +9,6 @@ from matplotlib.backends.backend_pdf import PdfPages from matplotlib.ticker import FuncFormatter import seaborn as sns -import pyranges as pr -import pysam class Reports: metadata_table = None @@ -180,8 +178,7 @@ def load_binned_frags(self): # Add log2 transformed count data column log2_counts = self.frag_bin500[self.frag_bin500.columns[-(len(dt_bin_frag_list)):]].transform(lambda x: np.log2(x)) - chrom_bin_cols = self.frag_bin500[['chrom','bin']] - self.frag_bin500 = pd.concat([chrom_bin_cols,log2_counts], axis=1) + self.frag_bin500 = pd.concat([self.frag_bin500[['chrom','bin']],log2_counts], axis=1) def load_seacr_peaks(self): # Plots supported @@ -225,66 +222,6 @@ def load_data(self): # ---------- Data - Peaks --------- # self.load_seacr_peaks() - # ---------- Data - Reproducibility of peaks between replicates --------- # - # Empty dataframe to fill in loop - self.reprod_peak_stats = self.seacr_beds_group_rep - self.reprod_peak_stats = self.reprod_peak_stats.reindex(columns=self.reprod_peak_stats.columns.tolist() + ['no_peaks_reproduced','peak_reproduced_rate']) - - # Create permutations list - def array_permutate(x): - arr_len=len(x) - loop_list = x - out_list = x - for i in range(arr_len-1): - i_list = np.roll(loop_list, -1) - out_list = np.vstack((out_list, i_list)) - loop_list = i_list - return out_list - - # Create pyranges objects and fill df - unique_groups = self.seacr_beds.group.unique() - unique_replicates = self.seacr_beds.replicate.unique() - self.replicate_number = 1 - self.multiple_reps = True - if (len(unique_groups) == self.seacr_beds_group_rep.shape[0]): - self.multiple_reps = False - - if self.multiple_reps: - idx_count=0 - for i in list(range(len(unique_groups))): - group_i = unique_groups[i] - group_reps = len(self.seacr_beds_group_rep[self.seacr_beds_group_rep['group'] == group_i]) - if group_reps < 2: - continue - rep_permutations = array_permutate(range(group_reps)) - for k in list(range(group_reps)): - pyr_query = pr.PyRanges() - rep_perm = rep_permutations[k] - for j in rep_perm: - rep_i = "R" + str(range(group_reps)[j]+1) - peaks_i = self.seacr_beds[(self.seacr_beds['group']==group_i) & (self.seacr_beds['replicate']==rep_i)] - pyr_subject = pr.PyRanges(chromosomes=peaks_i['chrom'], starts=peaks_i['start'], ends=peaks_i['end']) - if(len(pyr_query) > 0): - pyr_overlap = pyr_query.join(pyr_subject) - pyr_overlap = pyr_overlap.apply(lambda df: df.drop(['Start_b','End_b'], axis=1)) - pyr_query = pyr_overlap - - else: - pyr_query = pyr_subject - - if (pyr_query.empty): - self.reprod_peak_stats.at[idx_count, 'no_peaks_reproduced'] = 0 - - else : - pyr_starts = pyr_query.values()[0]['Start'] - unique_pyr_starts = pyr_starts.unique() - self.reprod_peak_stats.at[idx_count, 'no_peaks_reproduced'] = len(unique_pyr_starts) - - idx_count = idx_count + 1 - - fill_reprod_rate = (self.reprod_peak_stats['no_peaks_reproduced'] / self.reprod_peak_stats['all_peaks'])*100 - self.reprod_peak_stats['peak_reproduced_rate'] = fill_reprod_rate - #* #======================================================================================== # GEN REPORTS @@ -518,7 +455,7 @@ def replicate_heatmap(self): # plot_data = plot_data.fillna(0) corr_mat = plot_data.corr(method='pearson') ax = sns.heatmap(corr_mat, annot=True) - fig.suptitle("Replicate Reproducibility") + fig.suptitle("Replicate Reproducibility (read counts in 500bp bins)") return fig, self.frag_bin500 diff --git a/conf/modules.config b/conf/modules.config index 83946d06..9bec8fec 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -234,11 +234,6 @@ params { publish_dir = "04_reporting" } - "samtools_index" { - suffix = ".target.sorted" - publish_files = false - } - "calc_frip" { publish_files = false } @@ -279,20 +274,24 @@ params { suffix = ".mapped" publish_files = false } + "calc_frag_samtools" { suffix = ".mapped" publish_files = false } + "calc_frag_bamtobed" { args = "-bedpe" publish_files = false } + "calc_frag_awk" { suffix = ".clean" ext = "bed" command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" publish_files = false } + "calc_frag_cut" { args = "-f 1,2,6" suffix = ".frags" diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index f03d8270..6f24cc3d 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -341,8 +341,6 @@ include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../mo include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) -include { SAMTOOLS_SORT } from "../modules/nf-core/modules/samtools/sort/main.nf" addParams( options: modules["samtools_sort"] ) -include { SAMTOOLS_INDEX } from "../modules/nf-core/modules/samtools/index/main.nf" addParams( options: modules["samtools_index"] ) include { BEDTOOLS_INTERSECT } from "../modules/nf-core/modules/bedtools/intersect/main.nf" addParams( options: bedtools_intersect_options ) /* From 2b25debc1bbf43f8e2297958b310ed485d1116a2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 13:33:59 +0100 Subject: [PATCH 607/675] Added mate pair sorting to bam reads for conversion to bed --- bin/lib/reports.py | 7 ++-- conf/modules.config | 10 ++++- subworkflows/local/calculate_fragments.nf | 39 +++++++++++-------- subworkflows/nf-core/bam_sort_samtools.nf | 2 +- .../samtools_view_sort_stats.nf | 17 +++++--- workflows/cutandrun.nf | 8 ++-- 6 files changed, 50 insertions(+), 33 deletions(-) rename subworkflows/{local => nf-core}/samtools_view_sort_stats.nf (73%) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index ac45c1a3..f30f5924 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -287,10 +287,9 @@ def generate_reports(self): data["06_02_peak_widths"] = data7b # Plot 7c - if self.multiple_reps: - plot7c, data7c = self.reproduced_peaks() - plots["06_03_reproduced_peaks"] = plot7c - data["06_03_reproduced_peaks"] = data7c + plot7c, data7c = self.reproduced_peaks() + plots["06_03_reproduced_peaks"] = plot7c + data["06_03_reproduced_peaks"] = data7c # Plot 7d plot7d, data7d = self.frags_in_peaks() diff --git a/conf/modules.config b/conf/modules.config index 9bec8fec..050cf868 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -269,14 +269,20 @@ params { ======================================================================================== */ + "calc_frag_samtools" { + suffix = ".mapped" + publish_files = false + } + "calc_frag_samtools_view" { args = "-F 0x04 -b" suffix = ".mapped" publish_files = false } - "calc_frag_samtools" { - suffix = ".mapped" + "calc_frag_samtools_sort" { + args = "-n" + suffix = ".sorted" publish_files = false } diff --git a/subworkflows/local/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf index a49845b8..9468ee96 100644 --- a/subworkflows/local/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -4,14 +4,16 @@ params.samtools_options = [:] params.samtools_view_options = [:] +params.samtools_sort_options = [:] params.bamtobed_options = [:] params.awk_options = [:] params.cut_options = [:] -include { SAMTOOLS_VIEW_SORT_STATS } from "./samtools_view_sort_stats" addParams( samtools_options: params.samtools_options, samtools_view_options: params.samtools_view_options ) -include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/modules/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) -include { AWK } from "../../modules/local/awk" addParams( options: params.awk_options ) -include { CUT } from "../../modules/local/cut" addParams( options: params.cut_options ) +include { SAMTOOLS_VIEW } from "../../modules/nf-core/modules/samtools/view/main" addParams( options: params.samtools_view_options ) +include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams( options: params.samtools_sort_options ) +include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/modules/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) +include { AWK } from "../../modules/local/awk" addParams( options: params.awk_options ) +include { CUT } from "../../modules/local/cut" addParams( options: params.cut_options ) workflow CALCULATE_FRAGMENTS { take: @@ -19,11 +21,18 @@ workflow CALCULATE_FRAGMENTS { main: - // Filter for mapped reads only - SAMTOOLS_VIEW_SORT_STATS( bam ) + /* + * Filter BAM file + */ + SAMTOOLS_VIEW ( bam ) + + /* + * Sort BAM file + */ + SAMTOOLS_SORT ( SAMTOOLS_VIEW.out.bam ) // Convert to bed file - BEDTOOLS_BAMTOBED ( SAMTOOLS_VIEW_SORT_STATS.out.bam ) + BEDTOOLS_BAMTOBED ( SAMTOOLS_SORT.out.bam ) // Keep the read pairs that are on the same chromosome and fragment length less than 1000bp. AWK ( BEDTOOLS_BAMTOBED.out.bed ) @@ -32,14 +41,10 @@ workflow CALCULATE_FRAGMENTS { CUT ( AWK.out.file ) emit: - bed = CUT.out.file - mapped_bam = SAMTOOLS_VIEW_SORT_STATS.out.bam // channel: [ val(meta), [ bam ] ] - bai = SAMTOOLS_VIEW_SORT_STATS.out.bai // channel: [ val(meta), [ bai ] ] - stats = SAMTOOLS_VIEW_SORT_STATS.out.stats // channel: [ val(meta), [ stats ] ] - flagstat = SAMTOOLS_VIEW_SORT_STATS.out.flagstat // channel: [ val(meta), [ flagstat ] ] - idxstats = SAMTOOLS_VIEW_SORT_STATS.out.idxstats // channel: [ val(meta), [ idxstats ] ] - - samtools_version = SAMTOOLS_VIEW_SORT_STATS.out.samtools_version // path: *.version.txt - bedtools_version = BEDTOOLS_BAMTOBED.out.version // path: *.version.txt - awk_version = AWK.out.version // path: *.version.txt + bed = CUT.out.file // channel: [ val(meta), [ bed ] ] + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] + + samtools_version = SAMTOOLS_SORT.out.version // path: *.version.txt + bedtools_version = BEDTOOLS_BAMTOBED.out.version // path: *.version.txt + awk_version = AWK.out.version // path: *.version.txt } diff --git a/subworkflows/nf-core/bam_sort_samtools.nf b/subworkflows/nf-core/bam_sort_samtools.nf index 80f1ca87..93619ba7 100644 --- a/subworkflows/nf-core/bam_sort_samtools.nf +++ b/subworkflows/nf-core/bam_sort_samtools.nf @@ -7,7 +7,7 @@ params.samtools_sort_options = [:] include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams( options: params.samtools_sort_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.options ) -include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.options ) workflow BAM_SORT_SAMTOOLS { take: diff --git a/subworkflows/local/samtools_view_sort_stats.nf b/subworkflows/nf-core/samtools_view_sort_stats.nf similarity index 73% rename from subworkflows/local/samtools_view_sort_stats.nf rename to subworkflows/nf-core/samtools_view_sort_stats.nf index 5c356a36..074d95e6 100644 --- a/subworkflows/local/samtools_view_sort_stats.nf +++ b/subworkflows/nf-core/samtools_view_sort_stats.nf @@ -3,11 +3,13 @@ */ params.samtools_view_options = [:] +params.samtools_sort_options = [:] params.samtools_options = [:] include { SAMTOOLS_VIEW } from "../../modules/nf-core/modules/samtools/view/main" addParams( options: params.samtools_view_options ) +include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams( options: params.samtools_sort_options ) include { SAMTOOLS_INDEX } from "../../modules/nf-core/modules/samtools/index/main" addParams( options: params.samtools_options ) -include { BAM_STATS_SAMTOOLS } from "../nf-core/bam_stats_samtools" addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from "../nf-core/bam_stats_samtools" addParams( options: params.samtools_options ) workflow SAMTOOLS_VIEW_SORT_STATS { take: @@ -15,24 +17,29 @@ workflow SAMTOOLS_VIEW_SORT_STATS { main: /* - * Filter using samtools view + * Filter BAM file */ SAMTOOLS_VIEW ( bam ) + /* + * Sort BAM file + */ + SAMTOOLS_SORT ( SAMTOOLS_VIEW.out.bam ) + /* * Index BAM file and run samtools stats, flagstat and idxstats */ - SAMTOOLS_INDEX ( SAMTOOLS_VIEW.out.bam ) + SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) // Join bam/bai - ch_bam_sample_id = SAMTOOLS_VIEW.out.bam.map { row -> [row[0].id, row] } + ch_bam_sample_id = SAMTOOLS_SORT.out.bam.map { row -> [row[0].id, row] } ch_bai_sample_id = SAMTOOLS_INDEX.out.bai.map { row -> [row[0].id, row] } ch_bam_bai = ch_bam_sample_id.join(ch_bai_sample_id, by: [0]).map {row -> [row[1][0], row[1][1], row[2][1]]} BAM_STATS_SAMTOOLS ( ch_bam_bai ) emit: - bam = SAMTOOLS_VIEW.out.bam // channel: [ val(meta), [ bam ] ] + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] bai = SAMTOOLS_INDEX.out.bai // channel: [ val(meta), [ bai ] ] stats = BAM_STATS_SAMTOOLS.out.stats // channel: [ val(meta), [ stats ] ] flagstat = BAM_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), [ flagstat ] ] diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 6f24cc3d..8e875937 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -314,13 +314,12 @@ include { MULTIQC } from "../modules/local/multiqc" */ include { PREPARE_GENOME } from "../subworkflows/local/prepare_genome" addParams( genome_options: genome_options, spikein_genome_options: spikein_genome_options, bt2_index_options: bowtie2_index_options, bt2_spikein_index_options: bowtie2_spikein_index_options ) include { ALIGN_BOWTIE2 } from "../subworkflows/local/align_bowtie2" addParams( align_options: bowtie2_align_options, spikein_align_options: bowtie2_spikein_align_options, samtools_spikein_options: samtools_spikein_sort_options, samtools_options: samtools_sort_options ) -include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/local/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options ) include { ANNOTATE_META_AWK as ANNOTATE_BT2_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_options, meta_suffix: "_target", script_mode: true ) include { ANNOTATE_META_AWK as ANNOTATE_BT2_SPIKEIN_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_bt2_spikein_options, meta_suffix: "_spikein", script_mode: true ) include { CONSENSUS_PEAKS } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) include { CONSENSUS_PEAKS as CONSENSUS_PEAKS_ALL } from "../subworkflows/local/consensus_peaks" addParams( bedtools_merge_options: modules["bedtools_merge_groups"], sort_options: modules["sort_group_peaks"], awk_threshold_options: awk_all_threshold, plot_peak_options: modules["plot_peaks"], run_peak_plotting: run_peak_plotting) include { ANNOTATE_META_AWK as ANNOTATE_DEDUP_META } from "../subworkflows/local/annotate_meta_awk" addParams( options: awk_dedup_options, meta_suffix: "", meta_prefix: "dedup_", script_mode: false ) -include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) +include { CALCULATE_FRAGMENTS } from "../subworkflows/local/calculate_fragments" addParams( samtools_options: modules["calc_frag_samtools"], samtools_view_options: modules["calc_frag_samtools_view"], samtools_sort_options: modules["calc_frag_samtools_sort"], bamtobed_options: modules["calc_frag_bamtobed"], awk_options: modules["calc_frag_awk"], cut_options: modules["calc_frag_cut"] ) include { FASTQC_TRIMGALORE } from "../subworkflows/local/fastqc_trimgalore" addParams( fastqc_options: modules["fastqc"], trimgalore_options: trimgalore_options ) include { ANNOTATE_META_CSV as ANNOTATE_FRIP_META } from "../subworkflows/local/annotate_meta_csv" addParams( options: modules["meta_csv_frip_options"] ) include { ANNOTATE_META_CSV as ANNOTATE_PEAK_REPRO_META } from "../subworkflows/local/annotate_meta_csv" addParams( options: modules["meta_csv_peak_repro_options"] ) @@ -346,8 +345,9 @@ include { BEDTOOLS_INTERSECT } from "../mo /* * SUBWORKFLOW: Consisting entirely of nf-core/modules */ -include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) -include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) +include { MARK_DUPLICATES_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_markduplicates_options, samtools_options: picard_markduplicates_samtools_options, control_only: false ) +include { MARK_DUPLICATES_PICARD as DEDUP_PICARD } from "../subworkflows/nf-core/mark_duplicates_picard" addParams( markduplicates_options: picard_deduplicates_options, samtools_options: picard_deduplicates_samtools_options, control_only: dedup_control_only ) +include { SAMTOOLS_VIEW_SORT_STATS } from "../subworkflows/nf-core/samtools_view_sort_stats" addParams( samtools_options: samtools_qfilter_options, samtools_view_options: samtools_view_options, samtools_sort_options: modules["samtools_sort"] ) /* ======================================================================================== From 9ffccb5085e07684633e7a2846d3e2a4db6be83f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 14:33:24 +0100 Subject: [PATCH 608/675] Added limit to upset plots --- bin/consensus_peaks.py | 6 +++++- subworkflows/local/consensus_peaks.nf | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/consensus_peaks.py b/bin/consensus_peaks.py index 1734fbc0..8aa943e2 100755 --- a/bin/consensus_peaks.py +++ b/bin/consensus_peaks.py @@ -2,7 +2,6 @@ import os import glob -import re import numpy as np import pandas as pd import matplotlib.pyplot as plt @@ -32,6 +31,11 @@ # create list of data frames, one for each group consensus peaks file peak_file_list = glob.glob(args.peaks) + +if len(peak_file_list) > 10: + print('WARN: There are too many files to generate an upset plot, cancelling figure generation') + exit(0) + peak_df_list = list() for i in list(range(len(peak_file_list))): peaks_i = pd.read_csv(peak_file_list[i], sep='\t', header=None, usecols=[0,1,2,8,9], names=['chrom','start','end','sample_reps','count']) diff --git a/subworkflows/local/consensus_peaks.nf b/subworkflows/local/consensus_peaks.nf index 484099a7..0a5e6c29 100644 --- a/subworkflows/local/consensus_peaks.nf +++ b/subworkflows/local/consensus_peaks.nf @@ -8,10 +8,10 @@ params.plot_peak_options = [:] params.awk_threshold_options = [:] params.run_peak_plotting = true -include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options ) +include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options ) include { BEDTOOLS_MERGE } from "../../modules/nf-core/modules/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) -include { AWK } from "../../modules/local/awk" addParams( options: params.awk_threshold_options ) -include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" addParams( options: params.plot_peak_options ) +include { AWK } from "../../modules/local/awk" addParams( options: params.awk_threshold_options ) +include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" addParams( options: params.plot_peak_options ) workflow CONSENSUS_PEAKS { From 68e825f055e6a17dde7c3bef89cd2de416ef2527 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 16:51:01 +0100 Subject: [PATCH 609/675] Fix for correlation plot --- bin/lib/reports.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index f30f5924..9225991d 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -164,6 +164,8 @@ def load_binned_frags(self): # Start by creating list of bin500 files dt_bin_frag_list = glob.glob(self.bin_frag_path) + dt_bin_frag_list.sort() + for i in list(range(len(dt_bin_frag_list))): dt_bin_frag_i_read = pd.read_csv(dt_bin_frag_list[i], sep='\t', header=None, names=['chrom','bin','count','sample']) sample_name = dt_bin_frag_i_read['sample'].iloc[0].split(".")[0] @@ -177,8 +179,10 @@ def load_binned_frags(self): self.frag_bin500 = pd.merge(self.frag_bin500, dt_bin_frag_i, on=['chrom','bin'], how='outer') # Add log2 transformed count data column - log2_counts = self.frag_bin500[self.frag_bin500.columns[-(len(dt_bin_frag_list)):]].transform(lambda x: np.log2(x)) - self.frag_bin500 = pd.concat([self.frag_bin500[['chrom','bin']],log2_counts], axis=1) + # log2_counts = self.frag_bin500[self.frag_bin500.columns[-(len(dt_bin_frag_list)):]].transform(lambda x: np.log2(x)) + # self.frag_bin500 = pd.concat([self.frag_bin500[['chrom','bin']],log2_counts], axis=1) + + self.frag_bin500 = self.frag_bin500.fillna(0) def load_seacr_peaks(self): # Plots supported From 3fac00ca3c8627b88b4a0dfe2ccf64e18f671ca4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:05:52 +0100 Subject: [PATCH 610/675] Changed awk path --- workflows/cutandrun.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 315a901e..ff989b28 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -45,8 +45,8 @@ if (anno_readme && file(anno_readme).exists()) { ch_dummy_file = file("$projectDir/assets/dummy_file.txt", checkIfExists: true) // Stage awk files for parsing log files -ch_bt2_to_csv_awk = file("$projectDir/bin/awk/bt2_report_to_csv.awk" , checkIfExists: true) -ch_dt_frag_to_csv_awk = file("$projectDir/bin/awk/dt_frag_report_to_csv.awk", checkIfExists: true) +ch_bt2_to_csv_awk = file("$projectDir/bin/bt2_report_to_csv.awk" , checkIfExists: true) +ch_dt_frag_to_csv_awk = file("$projectDir/bin/dt_frag_report_to_csv.awk", checkIfExists: true) /* ======================================================================================== From 17186d72248cd98112dee04cce2cee28054678b3 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:12:16 +0100 Subject: [PATCH 611/675] Changed local config to laptop --- conf/{local.config => laptop.config} | 0 nextflow.config | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename conf/{local.config => laptop.config} (100%) diff --git a/conf/local.config b/conf/laptop.config similarity index 100% rename from conf/local.config rename to conf/laptop.config diff --git a/nextflow.config b/nextflow.config index 8257a0ac..f6b99c61 100644 --- a/nextflow.config +++ b/nextflow.config @@ -173,7 +173,7 @@ profiles { shifter.enabled = false } - local { includeConfig "conf/local.config" } // Sets up compute resources for local computing run + laptop { includeConfig "conf/laptop.config" } // Sets up compute resources for local computing run test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control test_fasta_only { includeConfig "conf/test_fasta_only.config" } // Runs a single sample with an IgG control but with no extra genome files just as bed files and black lists test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control From 043541e2414fbd1d2b5ef96aecb645ec92451272 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:14:53 +0100 Subject: [PATCH 612/675] Update subworkflows/local/consensus_peaks.nf Co-authored-by: Maxime U. Garcia --- subworkflows/local/consensus_peaks.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/consensus_peaks.nf b/subworkflows/local/consensus_peaks.nf index 484099a7..15414213 100644 --- a/subworkflows/local/consensus_peaks.nf +++ b/subworkflows/local/consensus_peaks.nf @@ -9,7 +9,7 @@ params.awk_threshold_options = [:] params.run_peak_plotting = true include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options ) -include { BEDTOOLS_MERGE } from "../../modules/nf-core/modules/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) +include { BEDTOOLS_MERGE } from "../../modules/nf-core/modules/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) include { AWK } from "../../modules/local/awk" addParams( options: params.awk_threshold_options ) include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" addParams( options: params.plot_peak_options ) From bef69751fda30b3b7becaf0dfc9dd3063e6f3152 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:15:06 +0100 Subject: [PATCH 613/675] Update subworkflows/nf-core/mark_duplicates_picard.nf Co-authored-by: Maxime U. Garcia --- subworkflows/nf-core/mark_duplicates_picard.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/nf-core/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf index 79dd91b8..7b3668ca 100644 --- a/subworkflows/nf-core/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -8,7 +8,7 @@ params.control_only = false include { PICARD_MARKDUPLICATES } from '../../modules/nf-core/modules/picard/markduplicates/main' addParams( options: params.markduplicates_options ) include { SAMTOOLS_INDEX } from '../../modules/nf-core/modules/samtools/index/main' addParams( options: params.samtools_options ) -include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_options ) +include { BAM_STATS_SAMTOOLS } from './bam_stats_samtools' addParams( options: params.samtools_options ) workflow MARK_DUPLICATES_PICARD { take: From 6d922466c9fa6d247e54ef5516bffe71cbac4f4b Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:20:08 +0100 Subject: [PATCH 614/675] Reordered params --- workflows/cutandrun.nf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ff989b28..c320e943 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -12,13 +12,13 @@ WorkflowCutandrun.initialise(params, log) // Check input path parameters to see if the files exist if they have been specified checkPathParamList = [ - params.input, - params.fasta, - params.gtf, params.blacklist, params.bowtie2, - params.spikein_fasta, - params.spikein_bowtie2 + params.fasta, + params.gtf, + params.input, + params.spikein_bowtie2, + params.spikein_fasta ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } From f2b114641687d795a5bc4c47a7bd389d62a74b16 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:23:20 +0100 Subject: [PATCH 615/675] Add comments --- workflows/cutandrun.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index c320e943..b9ad1a00 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -672,6 +672,7 @@ workflow CUTANDRUN { /* * CHANNEL: Create target/control pairings */ + // Create pairs of controls (IgG) with target samples if they are supplied ch_bg_control_ctrlgrp.cross(ch_bg_target_ctrlgrp) .map { row -> [row[1][1][0], row[1][1][1], row[0][1][1]] From 87aa39092a8d9213971a4dc9d5487768380e5877 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:25:33 +0100 Subject: [PATCH 616/675] Removed report contact header --- assets/multiqc_config.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index d0119917..3a4412fb 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -11,7 +11,6 @@ report_section_order: export_plots: true report_header_info: - - Contact E-mail: "chris.cheshire@crick.ac.uk" - Application Type: "CUT&RUN" # Run only these modules From 84dbb11aaa1ccac8d13bc9b151defe84fc4f61e6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:27:08 +0100 Subject: [PATCH 617/675] Update workflows/cutandrun.nf Co-authored-by: James A. Fellows Yates --- workflows/cutandrun.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index ad3473fd..22161552 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -238,7 +238,7 @@ else if(params.save_align_intermed) { picard_markduplicates_samtools_options.publish_files = ["bai":"","stats":"samtools_stats", "flagstat":"samtools_stats", "idxstats":"samtools_stats"] } -// Removed duplicates options +// Remove duplicates options def dedup_control_only = true if(params.dedup_target_reads) { dedup_control_only = false } From b93ccfc2b020380241243322fb0ee88868af2993 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:27:54 +0100 Subject: [PATCH 618/675] Update assets/samplesheet.csv Co-authored-by: James A. Fellows Yates --- assets/samplesheet.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index 513d91d1..869556e8 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,5 +1,5 @@ group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,READ1_FASTQ,READ2_FASTQC +h3k27me3,1,1,READ1_FASTQ,READ2_FASTQ h3k27me3,2,1,READ1_FASTQ,READ2_FASTQC h3k4me3,1,2,READ1_FASTQ,READ2_FASTQC h3k4me3,2,2,READ1_FASTQ,READ2_FASTQC From 6a6d4393b55e47b436957b97d9a441f3791201ef Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 20:36:02 +0100 Subject: [PATCH 619/675] Whitespace fixes --- bin/frip.py | 2 +- bin/peak_reproducability.py | 4 ++-- conf/modules.config | 2 +- modules/local/modules/calculate_frip/environment.yml | 1 + modules/local/modules/calculate_peak_reprod/environment.yml | 3 ++- subworkflows/local/annotate_meta_awk.nf | 2 +- subworkflows/local/annotate_meta_csv.nf | 6 +++--- workflows/cutandrun.nf | 4 ++-- 8 files changed, 13 insertions(+), 11 deletions(-) diff --git a/bin/frip.py b/bin/frip.py index 68de71c8..0faf1808 100755 --- a/bin/frip.py +++ b/bin/frip.py @@ -59,4 +59,4 @@ writer = open(os.path.join(args.outpath, "frips.csv"), "w") writer.write("frip\n") writer.write(frip_string) -writer.close() \ No newline at end of file +writer.close() diff --git a/bin/peak_reproducability.py b/bin/peak_reproducability.py index 69c235c4..003bde10 100755 --- a/bin/peak_reproducability.py +++ b/bin/peak_reproducability.py @@ -45,7 +45,7 @@ print('Detected single file, reloading table') numfiles = 1 ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','overlap_2','key','name','count']) - + print('Number of files: ' + str(numfiles)) # Check for empty file @@ -77,4 +77,4 @@ writer = open(os.path.join(args.outpath, "peak_repro.csv"), "w") writer.write("peak_repro\n") writer.write(output_string) -writer.close() \ No newline at end of file +writer.close() diff --git a/conf/modules.config b/conf/modules.config index 050cf868..e75b3033 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -297,7 +297,7 @@ params { command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" publish_files = false } - + "calc_frag_cut" { args = "-f 1,2,6" suffix = ".frags" diff --git a/modules/local/modules/calculate_frip/environment.yml b/modules/local/modules/calculate_frip/environment.yml index 7810d49d..0b98ef9b 100644 --- a/modules/local/modules/calculate_frip/environment.yml +++ b/modules/local/modules/calculate_frip/environment.yml @@ -11,3 +11,4 @@ dependencies: # conda packages - deeptools=3.5.* - pysam=0.17.* + \ No newline at end of file diff --git a/modules/local/modules/calculate_peak_reprod/environment.yml b/modules/local/modules/calculate_peak_reprod/environment.yml index 813e897e..4324bb13 100644 --- a/modules/local/modules/calculate_peak_reprod/environment.yml +++ b/modules/local/modules/calculate_peak_reprod/environment.yml @@ -10,4 +10,5 @@ dependencies: # conda packages - pandas=1.3.3 - - dask=2021.9.1 \ No newline at end of file + - dask=2021.9.1 + \ No newline at end of file diff --git a/subworkflows/local/annotate_meta_awk.nf b/subworkflows/local/annotate_meta_awk.nf index 5ff654d9..ad82357d 100644 --- a/subworkflows/local/annotate_meta_awk.nf +++ b/subworkflows/local/annotate_meta_awk.nf @@ -12,7 +12,7 @@ include { AWK_SCRIPT } from "../../modules/local/awk_script" addParams( options: include { AWK } from "../../modules/local/awk" addParams( options: params.options ) workflow ANNOTATE_META_AWK { - take: + take: passthrough report script diff --git a/subworkflows/local/annotate_meta_csv.nf b/subworkflows/local/annotate_meta_csv.nf index 41df5543..f33de8e4 100644 --- a/subworkflows/local/annotate_meta_csv.nf +++ b/subworkflows/local/annotate_meta_csv.nf @@ -1,5 +1,5 @@ /* - * Annotate the pipeline meta data with a csv file + * Annotate the pipeline meta data with a csv file */ params.options = [:] @@ -16,13 +16,13 @@ workflow ANNOTATE_META_CSV { ch_paths = passthrough.map { row -> [row[0].id, row[0], row[1..-1]].flatten() } reports.splitCsv(header:true) - .map { row -> + .map { row -> new_meta = [:] row[1].each{ k, v -> new_meta.put(params.meta_prefix + k + params.meta_suffix, v) } [row[0].id, new_meta] } .join ( ch_paths ) - .map { row -> [ row[2] << row[1], row[3..-1] ] } + .map { row -> [ row[2] << row[1], row[3..-1] ] } .set { ch_annotated_meta } emit: diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index b9ad1a00..6010fa44 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -823,7 +823,7 @@ workflow CUTANDRUN { UCSC_BEDGRAPHTOBIGWIG.out.bigwig .filter { it[0].group != "igg" } .set { ch_bigwig_no_igg } - //ch_bigwig_no_igg | view + //ch_bigwig_no_igg | view /* * MODULE: Create igv session @@ -943,7 +943,7 @@ workflow CUTANDRUN { .flatMap{ row -> new_output = [] - row[1].each{ file -> + row[1].each{ file -> files_copy = row[1].collect() files_copy.remove(files_copy.indexOf(file)) new_output.add([[id: file.name.split("\\.")[0]], file, files_copy]) From e0c26778a81ef1c23b394192ea67a625bf1eb3de Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 21:32:56 +0100 Subject: [PATCH 620/675] Fix eclint errors --- conf/modules.config | 2 +- modules/local/modules/calculate_frip/environment.yml | 1 - modules/local/modules/calculate_peak_reprod/environment.yml | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index e75b3033..d081bf41 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -297,7 +297,7 @@ params { command = "'\$1==\$4 && \$6-\$2 < 1000 {print \$0}'" publish_files = false } - + "calc_frag_cut" { args = "-f 1,2,6" suffix = ".frags" diff --git a/modules/local/modules/calculate_frip/environment.yml b/modules/local/modules/calculate_frip/environment.yml index 0b98ef9b..7810d49d 100644 --- a/modules/local/modules/calculate_frip/environment.yml +++ b/modules/local/modules/calculate_frip/environment.yml @@ -11,4 +11,3 @@ dependencies: # conda packages - deeptools=3.5.* - pysam=0.17.* - \ No newline at end of file diff --git a/modules/local/modules/calculate_peak_reprod/environment.yml b/modules/local/modules/calculate_peak_reprod/environment.yml index 4324bb13..0f88907d 100644 --- a/modules/local/modules/calculate_peak_reprod/environment.yml +++ b/modules/local/modules/calculate_peak_reprod/environment.yml @@ -11,4 +11,3 @@ dependencies: # conda packages - pandas=1.3.3 - dask=2021.9.1 - \ No newline at end of file From 57bc0d34b084387ae2d6494c292e8bd34dbb8302 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 19 Oct 2021 21:42:58 +0100 Subject: [PATCH 621/675] Cleanup --- bin/lib/reports.py | 1 + modules/local/export_meta.nf | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 9225991d..07ea2410 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -118,6 +118,7 @@ def load_raw_frag_histogram(self): # Create list of deeptools raw fragment files dt_frag_list = glob.glob(self.raw_frag_path) + dt_frag_list.sort() for i in list(range(len(dt_frag_list))): # Create dataframe from csv file for each file and save to a list diff --git a/modules/local/export_meta.nf b/modules/local/export_meta.nf index 832ddb2e..ad0e193c 100644 --- a/modules/local/export_meta.nf +++ b/modules/local/export_meta.nf @@ -20,7 +20,6 @@ process EXPORT_META { val meta val table_name - output: path "*.csv", emit: csv From 5d1573bcc677d65af569742e9b4ef7c873de1800 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 09:25:56 +0100 Subject: [PATCH 622/675] Fixed reporting error when only one group --- bin/lib/reports.py | 17 ++++++++++------- modules/local/generate_reports.nf | 6 ++++-- workflows/cutandrun.nf | 8 ++++---- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index 07ea2410..cb8b658e 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -108,7 +108,8 @@ def load_meta_data(self): self.metadata_table['spikein_alignment_rate'] = self.metadata_table.loc[:, ('bt2_total_aligned_spikein')] / self.metadata_table.loc[:, ('bt2_total_reads_spikein')] * 100 # Change to percentage - self.metadata_noctrl_table['frip'] = self.metadata_noctrl_table['frip'] * 100 + if 'frip' in self.metadata_noctrl_table.columns: + self.metadata_noctrl_table['frip'] = self.metadata_noctrl_table['frip'] * 100 def load_raw_frag_histogram(self): # Plots supported @@ -292,14 +293,16 @@ def generate_reports(self): data["06_02_peak_widths"] = data7b # Plot 7c - plot7c, data7c = self.reproduced_peaks() - plots["06_03_reproduced_peaks"] = plot7c - data["06_03_reproduced_peaks"] = data7c + if 'peak_repro' in self.metadata_noctrl_table.columns: + plot7c, data7c = self.reproduced_peaks() + plots["06_03_reproduced_peaks"] = plot7c + data["06_03_reproduced_peaks"] = data7c # Plot 7d - plot7d, data7d = self.frags_in_peaks() - plots["06_04_frags_in_peaks"] = plot7d - data["06_04_frags_in_peaks"] = data7d + if 'frip' in self.metadata_noctrl_table.columns: + plot7d, data7d = self.frags_in_peaks() + plots["06_04_frags_in_peaks"] = plot7d + data["06_04_frags_in_peaks"] = data7d # Fragment Length Histogram data in MultiQC yaml format mqc_frag_hist = self.frag_len_hist_mqc() diff --git a/modules/local/generate_reports.nf b/modules/local/generate_reports.nf index 3b817132..568813e6 100644 --- a/modules/local/generate_reports.nf +++ b/modules/local/generate_reports.nf @@ -26,10 +26,12 @@ process GENERATE_REPORTS { path '*frag_len_mqc.yaml', emit: frag_len_multiqc path '*.version.txt', emit: version - script: // This script is bundled with the pipeline, in nf-core/cutandrun/bin/ + script: + def meta_data_resolved = meta_data ? meta_data : meta_data_ctrl + """ reporting.py gen_reports \\ - --meta $meta_data \\ + --meta $meta_data_resolved \\ --meta_ctrl $meta_data_ctrl \\ --raw_frag "*.frag_len.txt" \\ --bin_frag "*bin500.awk.bed" \\ diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 6010fa44..04bea390 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -974,7 +974,7 @@ workflow CUTANDRUN { //CALCULATE_PEAK_REPROD.out.csv /* - * SUBWORKFLOW: Annotate meta-data with peak stats + * SUBWORKFLOW: Annotate meta-data with peak stats */ ANNOTATE_PEAK_REPRO_META ( ch_samtools_bam, @@ -987,7 +987,7 @@ workflow CUTANDRUN { * MODULE: Export meta-data to csv file */ EXPORT_META ( - ch_samtools_bam.collect{it[0]}.ifEmpty(["{NO-DATA}"]), + ch_samtools_bam.collect{it[0]}, "meta_table" ) @@ -995,7 +995,7 @@ workflow CUTANDRUN { * MODULE: Export meta-data to csv file */ EXPORT_META_CTRL ( - ch_samtools_bam_ctrl.collect{it[0]}.ifEmpty(["{NO-DATA}"]), + ch_samtools_bam_ctrl.collect{it[0]}, "meta_table_ctrl" ) @@ -1003,7 +1003,7 @@ workflow CUTANDRUN { * MODULE: Generate python reporting using mixture of meta-data and direct file processing */ GENERATE_REPORTS( - EXPORT_META.out.csv, // meta-data report stats + EXPORT_META.out.csv.collect().ifEmpty([]), // meta-data report stats EXPORT_META_CTRL.out.csv, // meta-data report stats SAMTOOLS_CUSTOMVIEW.out.tsv.collect{it[1]}, // raw fragments AWK_FRAG_BIN.out.file.collect{it[1]}, // binned fragments From d0c44b62ec311f393ceee976f62957f96f495780 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 09:34:37 +0100 Subject: [PATCH 623/675] Added usage comments --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 96c42228..81a88bad 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -2,7 +2,7 @@ ## :warning: Please read this documentation on the nf-core website: [https://nf-co.re/cutandrun/usage](https://nf-co.re/cutandrun/usage) -> _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ +nf-core/cutandrun is a best-practice bioinformatic analysis pipeline for CUT&Run and CUT&Tag experimental protocols that where developed to study protein-DNA interactions and epigenomic profiling. ## Samplesheet input From 97e88dffd63c5b85dbb3e8dd5052cf07ed32f5a6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 09:36:52 +0100 Subject: [PATCH 624/675] Updated samplesheet usage --- assets/samplesheet.csv | 12 ++++++------ docs/usage.md | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/assets/samplesheet.csv b/assets/samplesheet.csv index 513d91d1..44d3c4ed 100644 --- a/assets/samplesheet.csv +++ b/assets/samplesheet.csv @@ -1,7 +1,7 @@ group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,READ1_FASTQ,READ2_FASTQC -h3k27me3,2,1,READ1_FASTQ,READ2_FASTQC -h3k4me3,1,2,READ1_FASTQ,READ2_FASTQC -h3k4me3,2,2,READ1_FASTQ,READ2_FASTQC -igg,1,1,READ1_FASTQ,READ2_FASTQC -igg,2,2,READ1_FASTQ,READ2_FASTQC +h3k27me3,1,1,READ1_FASTQ.gz,READ2_FASTQ.gz +h3k27me3,2,1,READ1_FASTQ.gz,READ2_FASTQ.gz +h3k4me3,1,2,READ1_FASTQ.gz,READ2_FASTQ.gz +h3k4me3,2,2,READ1_FASTQ.gz,READ2_FASTQ.gz +igg,1,1,READ1_FASTQ.gz,READ2_FASTQ.gz +igg,2,2,READ1_FASTQ.gz,READ2_FASTQ.gz diff --git a/docs/usage.md b/docs/usage.md index 81a88bad..0c7b82fb 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -16,12 +16,12 @@ An example sample sheet structure is shown below. This defines two target experi ```bash group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,H3K27ME3_S1_L001_R1.fastq.gz,H3K27ME3_S1_L001_R2.fastq.gz -h3k27me3,2,1,H3K27ME3_S2_L001_R1.fastq.gz,H3K27ME3_S2_L001_R2.fastq.gz -h3k4me3,1,2,H3K4ME3_S1_L001_R1.fastq.gz,H3K4ME3_S1_L001_R2.fastq.gz -h3k4me3,2,2,H3K4ME3_S2_L001_R1.fastq.gz,H3K4MES_S2_L001_R2.fastq.gz -igg,1,1,IGG_S1_L001_R1.fastq.gz,IGG_S1_L001_R2.fastq.gz -igg,2,2,IGG_S2_L001_R1.fastq.gz,IGG_S2_L001_R2.fastq.gz +h3k27me3,1,1,READ1_FASTQ.gz,READ2_FASTQ.gz +h3k27me3,2,1,READ1_FASTQ.gz,READ2_FASTQ.gz +h3k4me3,1,2,READ1_FASTQ.gz,READ2_FASTQ.gz +h3k4me3,2,2,READ1_FASTQ.gz,READ2_FASTQ.gz +igg,1,1,READ1_FASTQ.gz,READ2_FASTQ.gz +igg,2,2,READ1_FASTQ.gz,READ2_FASTQ.gz ``` | Column | Description | From 11dad3a210840e3799eeee1778b5341ef3b235e6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 10:23:19 +0100 Subject: [PATCH 625/675] Moved unit test sample sheets to testdatasets and fixed some test errors --- .../multiple_sample_multiple_igg.csv | 8 -------- .../multiple_sample_single_igg.csv | 6 ------ tests/data/samplesheets/no_igg.csv | 2 -- tests/data/samplesheets/rep_id_start_1.csv | 3 --- .../samplesheets/single_sample_single_igg.csv | 3 --- .../single_sample_single_igg_neg.csv | 3 --- ...e_sample_single_igg_non_matching_groups.csv | 4 ---- ...single_igg_non_matching_groups_tech_rep.csv | 5 ----- tests/test_samplesheet_check.yml | 18 +++++++++--------- tests/test_verify_output_only_q_filter.yml | 8 ++++---- 10 files changed, 13 insertions(+), 47 deletions(-) delete mode 100644 tests/data/samplesheets/multiple_sample_multiple_igg.csv delete mode 100644 tests/data/samplesheets/multiple_sample_single_igg.csv delete mode 100644 tests/data/samplesheets/no_igg.csv delete mode 100644 tests/data/samplesheets/rep_id_start_1.csv delete mode 100644 tests/data/samplesheets/single_sample_single_igg.csv delete mode 100644 tests/data/samplesheets/single_sample_single_igg_neg.csv delete mode 100644 tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv delete mode 100644 tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv diff --git a/tests/data/samplesheets/multiple_sample_multiple_igg.csv b/tests/data/samplesheets/multiple_sample_multiple_igg.csv deleted file mode 100644 index 05450d3d..00000000 --- a/tests/data/samplesheets/multiple_sample_multiple_igg.csv +++ /dev/null @@ -1,8 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -h3k27me3,2,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -h3k27me3_2,1,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -h3k27me3_2,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz -igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz -igg,3,3,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/multiple_sample_single_igg.csv b/tests/data/samplesheets/multiple_sample_single_igg.csv deleted file mode 100644 index 95112ed4..00000000 --- a/tests/data/samplesheets/multiple_sample_single_igg.csv +++ /dev/null @@ -1,6 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -h3k27me3,2,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -h3k27me3_2,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -h3k27me3_2,2,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/no_igg.csv b/tests/data/samplesheets/no_igg.csv deleted file mode 100644 index 53ba532e..00000000 --- a/tests/data/samplesheets/no_igg.csv +++ /dev/null @@ -1,2 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/rep_id_start_1.csv b/tests/data/samplesheets/rep_id_start_1.csv deleted file mode 100644 index f4b80aa0..00000000 --- a/tests/data/samplesheets/rep_id_start_1.csv +++ /dev/null @@ -1,3 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg.csv b/tests/data/samplesheets/single_sample_single_igg.csv deleted file mode 100644 index 20107bd9..00000000 --- a/tests/data/samplesheets/single_sample_single_igg.csv +++ /dev/null @@ -1,3 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg_neg.csv b/tests/data/samplesheets/single_sample_single_igg_neg.csv deleted file mode 100644 index 94816697..00000000 --- a/tests/data/samplesheets/single_sample_single_igg_neg.csv +++ /dev/null @@ -1,3 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -igg,1,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv b/tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv deleted file mode 100644 index f30222fe..00000000 --- a/tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv +++ /dev/null @@ -1,4 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,3,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz -igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv b/tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv deleted file mode 100644 index a717e709..00000000 --- a/tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv +++ /dev/null @@ -1,5 +0,0 @@ -group,replicate,control_group,fastq_1,fastq_2 -h3k27me3,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r2.fastq.gz -h3k27me3,1,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/h3k27me3_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/test_rep1_r2.fastq.gz -igg,1,1,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz -igg,2,2,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r1.fastq.gz,https://raw.githubusercontent.com/luslab/test-datasets/cutandrun/testdata/GSE145187_10000/igg_rep1_r2.fastq.gz \ No newline at end of file diff --git a/tests/test_samplesheet_check.yml b/tests/test_samplesheet_check.yml index 9ba9e11d..55f6b7a6 100644 --- a/tests/test_samplesheet_check.yml +++ b/tests/test_samplesheet_check.yml @@ -1,12 +1,12 @@ - name: test_samplesheet_check_test_id_1 - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/rep_id_start_1.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/rep_id_start_1.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_start_1 exit_code: 1 - name: test_samplesheet_check_noigg_pos - command: nextflow run main.nf -profile docker,test --only_input true --igg_control false --input tests/data/samplesheets/no_igg.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --igg_control false --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/no_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_no_igg @@ -15,7 +15,7 @@ - path: results/pipeline_info/samplesheet.valid.csv - name: test_samplesheet_check_noigg_neg - command: nextflow run main.nf -profile docker,test --only_input true --igg_control true --input tests/data/samplesheets/no_igg.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --igg_control true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/no_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_no_igg @@ -23,7 +23,7 @@ exit_code: 1 - name: test_samplesheet_check_1_1_pos - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/single_sample_single_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_1_1 @@ -32,7 +32,7 @@ - path: results/pipeline_info/samplesheet.valid.csv - name: test_samplesheet_check_1_1_neg - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_neg.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/single_sample_single_igg_neg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_1_1 @@ -40,7 +40,7 @@ exit_code: 1 - name: test_samplesheet_check_1_2_group_match - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/single_sample_single_igg_non_matching_groups.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_1_2 @@ -48,7 +48,7 @@ exit_code: 1 - name: test_samplesheet_check_2_2_group_match_tech_rep - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/single_sample_single_igg_non_matching_groups_tech_rep.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/single_sample_single_igg_non_matching_groups_tech_rep.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_2_2 @@ -56,7 +56,7 @@ exit_code: 1 - name: test_samplesheet_check_multiple_sample_single_igg - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_single_igg.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/multiple_sample_single_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_M_1 @@ -64,7 +64,7 @@ - path: results/pipeline_info/samplesheet.valid.csv - name: test_samplesheet_check_multiple_sample_multiple_igg - command: nextflow run main.nf -profile docker,test --only_input true --input tests/data/samplesheets/multiple_sample_multiple_igg.csv -c tests/config/nextflow.config + command: nextflow run main.nf -profile docker,test --only_input true --input https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/unit_tests/multiple_sample_multiple_igg.csv -c tests/config/nextflow.config tags: - samplesheet - samplesheet_M_M diff --git a/tests/test_verify_output_only_q_filter.yml b/tests/test_verify_output_only_q_filter.yml index 65044aad..cf8eb73e 100644 --- a/tests/test_verify_output_only_q_filter.yml +++ b/tests/test_verify_output_only_q_filter.yml @@ -8,7 +8,7 @@ files: - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam - - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.filtered.bam.bai - - path: results/02_alignment/bowtie2/target/igg_R1.target.filtered.bam.bai - - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.filtered.bam.flagstat - - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.filtered.bam.flagstat \ No newline at end of file + - path: results/02_alignment/bowtie2/target/h3k27me3_R1.target.sorted.bam.bai + - path: results/02_alignment/bowtie2/target/igg_R1.target.sorted.bam.bai + - path: results/02_alignment/bowtie2/target/samtools_stats/h3k27me3_R1.target.sorted.bam.flagstat + - path: results/02_alignment/bowtie2/target/samtools_stats/igg_R1.target.sorted.bam.flagstat \ No newline at end of file From 85c9fb7793c91ac2961a225f95b2ca2d862e3d79 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 11:39:25 +0100 Subject: [PATCH 626/675] Added m1 platform config --- nextflow.config | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/nextflow.config b/nextflow.config index f6b99c61..a7a4c606 100644 --- a/nextflow.config +++ b/nextflow.config @@ -173,6 +173,22 @@ profiles { shifter.enabled = false } + /* + * Platform specific profiles + */ + docker_m1 { + docker.enabled = true + docker.runOptions = "-u \$(id -u):\$(id -g) --platform linux/arm64/v8" + singularity.enabled = false + podman.enabled = false + shifter.enabled = false + charliecloud.enabled = false + } + + /* + * Test profiles + */ + laptop { includeConfig "conf/laptop.config" } // Sets up compute resources for local computing run test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control test_fasta_only { includeConfig "conf/test_fasta_only.config" } // Runs a single sample with an IgG control but with no extra genome files just as bed files and black lists From df81721e70b0d91d302ec211318f2ec2a2dd16a4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 11:48:29 +0100 Subject: [PATCH 627/675] Whitespace issues --- nextflow.config | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nextflow.config b/nextflow.config index a7a4c606..98d71f23 100644 --- a/nextflow.config +++ b/nextflow.config @@ -173,7 +173,7 @@ profiles { shifter.enabled = false } - /* + /* * Platform specific profiles */ docker_m1 { @@ -185,7 +185,7 @@ profiles { charliecloud.enabled = false } - /* + /* * Test profiles */ From c9e2b44e2ce9eaa235691492fc30bea4dda387e2 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 12:02:02 +0100 Subject: [PATCH 628/675] profile fix --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 98d71f23..8179651e 100644 --- a/nextflow.config +++ b/nextflow.config @@ -178,7 +178,7 @@ profiles { */ docker_m1 { docker.enabled = true - docker.runOptions = "-u \$(id -u):\$(id -g) --platform linux/arm64/v8" + docker.runOptions = "-u \$(id -u):\$(id -g) --platform linux/arm64" singularity.enabled = false podman.enabled = false shifter.enabled = false From 1bc2bf77fa76a447cff670fb44fa897d29f04ea6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 12:03:51 +0100 Subject: [PATCH 629/675] profile change --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 8179651e..7aaa74f6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -178,7 +178,7 @@ profiles { */ docker_m1 { docker.enabled = true - docker.runOptions = "-u \$(id -u):\$(id -g) --platform linux/arm64" + docker.runOptions = "-u \$(id -u):\$(id -g) --platform linux/amd64" singularity.enabled = false podman.enabled = false shifter.enabled = false From 5bb43bf8fa5a99c4305433f5909ad589529a781f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 12:59:43 +0100 Subject: [PATCH 630/675] Remove extra profiles --- nextflow.config | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/nextflow.config b/nextflow.config index 7aaa74f6..f6b99c61 100644 --- a/nextflow.config +++ b/nextflow.config @@ -173,22 +173,6 @@ profiles { shifter.enabled = false } - /* - * Platform specific profiles - */ - docker_m1 { - docker.enabled = true - docker.runOptions = "-u \$(id -u):\$(id -g) --platform linux/amd64" - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - } - - /* - * Test profiles - */ - laptop { includeConfig "conf/laptop.config" } // Sets up compute resources for local computing run test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control test_fasta_only { includeConfig "conf/test_fasta_only.config" } // Runs a single sample with an IgG control but with no extra genome files just as bed files and black lists From 01c6b90f78e65087703270b0ad2ea4a6fbb5cb7e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 20 Oct 2021 13:12:23 +0100 Subject: [PATCH 631/675] Changed frip to process high --- modules/local/modules/calculate_frip/main.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/modules/calculate_frip/main.nf b/modules/local/modules/calculate_frip/main.nf index 90473dfd..92ccc7d6 100644 --- a/modules/local/modules/calculate_frip/main.nf +++ b/modules/local/modules/calculate_frip/main.nf @@ -4,7 +4,7 @@ params.options = [:] options = initOptions(params.options) process CALCULATE_FRIP { - label 'process_medium' + label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:'') } From 70bbd64095d7fcfc565094e246b1b6be6f7959d6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 09:43:09 +0100 Subject: [PATCH 632/675] Added table sort to second meta data table --- bin/lib/reports.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bin/lib/reports.py b/bin/lib/reports.py index cb8b658e..060a2837 100644 --- a/bin/lib/reports.py +++ b/bin/lib/reports.py @@ -111,6 +111,10 @@ def load_meta_data(self): if 'frip' in self.metadata_noctrl_table.columns: self.metadata_noctrl_table['frip'] = self.metadata_noctrl_table['frip'] * 100 + # Sort tables + self.metadata_table = self.metadata_table.sort_values('group') + self.metadata_noctrl_table = self.metadata_noctrl_table.sort_values('group') + def load_raw_frag_histogram(self): # Plots supported @@ -242,9 +246,6 @@ def generate_reports(self): # Get Data self.load_data() - # Sort tables - self.metadata_table = self.metadata_table.sort_values('group') - # Plot section 1 multi_plot, data1 = self.alignment_summary() plots["01_01_seq_depth"] = multi_plot[0] From 6f71348ca88f937ebee2445cbe73a610d958f6a7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 09:55:01 +0100 Subject: [PATCH 633/675] tidy --- subworkflows/local/calculate_fragments.nf | 6 +++--- workflows/cutandrun.nf | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/subworkflows/local/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf index 9468ee96..e3ddb7f8 100644 --- a/subworkflows/local/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -10,7 +10,7 @@ params.awk_options = [:] params.cut_options = [:] include { SAMTOOLS_VIEW } from "../../modules/nf-core/modules/samtools/view/main" addParams( options: params.samtools_view_options ) -include { SAMTOOLS_SORT } from '../../modules/nf-core/modules/samtools/sort/main' addParams( options: params.samtools_sort_options ) +include { SAMTOOLS_SORT } from "../../modules/nf-core/modules/samtools/sort/main" addParams( options: params.samtools_sort_options ) include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/modules/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) include { AWK } from "../../modules/local/awk" addParams( options: params.awk_options ) include { CUT } from "../../modules/local/cut" addParams( options: params.cut_options ) @@ -41,8 +41,8 @@ workflow CALCULATE_FRAGMENTS { CUT ( AWK.out.file ) emit: - bed = CUT.out.file // channel: [ val(meta), [ bed ] ] - bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] + bed = CUT.out.file // channel: [ val(meta), [ bed ] ] + bam = SAMTOOLS_SORT.out.bam // channel: [ val(meta), [ bam ] ] samtools_version = SAMTOOLS_SORT.out.version // path: *.version.txt bedtools_version = BEDTOOLS_BAMTOBED.out.version // path: *.version.txt diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 092cdd60..0e8a5c37 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -605,8 +605,7 @@ workflow CUTANDRUN { */ ch_samtools_bam_scale .map { row -> [ row[0], row[1] ] } - .set { ch_samtools_bam_sf } - ch_samtools_bam = ch_samtools_bam_sf + .set { ch_samtools_bam } //EXAMPLE CHANNEL STRUCT: [[META], BAM] //ch_samtools_bam | view From 36b820f6dea7668b41a0937bf12301a60a55d92f Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 11:40:04 +0100 Subject: [PATCH 634/675] Fixed samtools custom view context errors --- .../local/modules/samtools/custom_view/main.nf | 3 +-- workflows/cutandrun.nf | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/local/modules/samtools/custom_view/main.nf b/modules/local/modules/samtools/custom_view/main.nf index 27fdf6f1..1bfd08cf 100644 --- a/modules/local/modules/samtools/custom_view/main.nf +++ b/modules/local/modules/samtools/custom_view/main.nf @@ -19,8 +19,7 @@ process SAMTOOLS_CUSTOMVIEW { } input: - tuple val(meta), path(bam) - tuple val(meta), path(bai) + tuple val(meta), path(bam), path(bai) output: tuple val(meta), path("*.txt") , emit: tsv diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 0e8a5c37..11d0be23 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -804,12 +804,23 @@ workflow CUTANDRUN { ) //AWK_FRAG_BIN.out.file | view + + /* + * CHANNEL: Combine bam and bai files on id + */ + ch_samtools_bam + .map { row -> [row[0].id, row ].flatten()} + .join ( ch_samtools_bai.map { row -> [row[0].id, row ].flatten()} ) + .map { row -> [row[1], row[2], row[4]] } + .set { ch_bam_bai } + // EXAMPLE CHANNEL STRUCT: [[META], BAM, BAI] + //ch_bam_bai | view + /* * MODULE: Calculate fragment lengths */ SAMTOOLS_CUSTOMVIEW ( - ch_samtools_bam, - ch_samtools_bai + ch_bam_bai ) //SAMTOOLS_CUSTOMVIEW.out.tsv | view } @@ -914,7 +925,7 @@ workflow CUTANDRUN { .join ( ch_seacr_bed.map { row -> [row[0].id, row ].flatten()} ) .map { row -> [row[1], row[2], row[4], row[6]] } .set { ch_bam_bai_bed } - // EXAMPLE CHANNEL STRUCT: [[META], BAM, BED] + // EXAMPLE CHANNEL STRUCT: [[META], BAM, BAI, BED] //ch_bam_bai_bed | view /* From e45d9a54e98b239f0bdf6717b827230f0b90d3f4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 11:48:37 +0100 Subject: [PATCH 635/675] Simplified bam_bai joining --- subworkflows/nf-core/mark_duplicates_picard.nf | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/subworkflows/nf-core/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf index 7b3668ca..8ba513b8 100644 --- a/subworkflows/nf-core/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -46,12 +46,15 @@ workflow MARK_DUPLICATES_PICARD { /* * Index BAM file */ - SAMTOOLS_INDEX ( out_bam ) + SAMTOOLS_INDEX ( out_bam ) // Join bam/bai - ch_bam_sample_id = out_bam.map { row -> [row[0].id, row] } - ch_bai_sample_id = SAMTOOLS_INDEX.out.bai.map { row -> [row[0].id, row] } - ch_bam_bai = ch_bam_sample_id.join(ch_bai_sample_id, by: [0]).map {row -> [row[1][0], row[1][1], row[2][1]]} + out_bam + .map { row -> [row[0].id, row ].flatten()} + .join ( SAMTOOLS_INDEX.out.bai.map { row -> [row[0].id, row ].flatten()} ) + .map { row -> [row[1], row[2], row[4]] } + .set { ch_bam_bai } + //ch_bam_bai | view /* * Run samtools stats, flagstat and idxstats From debb9a240e77ac733f97f707d7e80b42a0a4c683 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 11:55:13 +0100 Subject: [PATCH 636/675] Added tag ids --- modules/local/modules/calculate_frip/main.nf | 1 + modules/local/modules/calculate_peak_reprod/main.nf | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/local/modules/calculate_frip/main.nf b/modules/local/modules/calculate_frip/main.nf index 92ccc7d6..65045f27 100644 --- a/modules/local/modules/calculate_frip/main.nf +++ b/modules/local/modules/calculate_frip/main.nf @@ -4,6 +4,7 @@ params.options = [:] options = initOptions(params.options) process CALCULATE_FRIP { + tag "$meta.id" label 'process_high' publishDir "${params.outdir}", mode: params.publish_dir_mode, diff --git a/modules/local/modules/calculate_peak_reprod/main.nf b/modules/local/modules/calculate_peak_reprod/main.nf index 5cc96586..43807528 100644 --- a/modules/local/modules/calculate_peak_reprod/main.nf +++ b/modules/local/modules/calculate_peak_reprod/main.nf @@ -4,6 +4,7 @@ params.options = [:] options = initOptions(params.options) process CALCULATE_PEAK_REPROD { + tag "$meta.id" label 'process_medium' publishDir "${params.outdir}", mode: params.publish_dir_mode, From 140db94ac41f30d41d018da12e76478f0bd31f1d Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 12:01:57 +0100 Subject: [PATCH 637/675] Fixed another context issue --- subworkflows/nf-core/mark_duplicates_picard.nf | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/subworkflows/nf-core/mark_duplicates_picard.nf b/subworkflows/nf-core/mark_duplicates_picard.nf index 8ba513b8..e8a3eabb 100644 --- a/subworkflows/nf-core/mark_duplicates_picard.nf +++ b/subworkflows/nf-core/mark_duplicates_picard.nf @@ -18,12 +18,12 @@ workflow MARK_DUPLICATES_PICARD { /* * Picard MarkDuplicates */ - out_bam = Channel.empty() + ch_bam = Channel.empty() metrics = Channel.empty() version = Channel.empty() if( !params.control_only ) { PICARD_MARKDUPLICATES ( bam ) - out_bam = PICARD_MARKDUPLICATES.out.bam + ch_bam = PICARD_MARKDUPLICATES.out.bam metrics = PICARD_MARKDUPLICATES.out.metrics version = PICARD_MARKDUPLICATES.out.version } @@ -35,21 +35,19 @@ workflow MARK_DUPLICATES_PICARD { .set { ch_split } PICARD_MARKDUPLICATES ( ch_split.control ) - out_bam = PICARD_MARKDUPLICATES.out.bam metrics = PICARD_MARKDUPLICATES.out.metrics version = PICARD_MARKDUPLICATES.out.version - - out_bam = out_bam.mix ( ch_split.target ) + ch_bam = PICARD_MARKDUPLICATES.out.bam.mix ( ch_split.target ) } //out_bam | view /* * Index BAM file */ - SAMTOOLS_INDEX ( out_bam ) + SAMTOOLS_INDEX ( ch_bam ) // Join bam/bai - out_bam + ch_bam .map { row -> [row[0].id, row ].flatten()} .join ( SAMTOOLS_INDEX.out.bai.map { row -> [row[0].id, row ].flatten()} ) .map { row -> [row[1], row[2], row[4]] } @@ -62,7 +60,7 @@ workflow MARK_DUPLICATES_PICARD { BAM_STATS_SAMTOOLS ( ch_bam_bai ) emit: - bam = out_bam // channel: [ val(meta), [ bam ] ] + bam = ch_bam // channel: [ val(meta), [ bam ] ] metrics // channel: [ val(meta), [ metrics ] ] picard_version = version // path: *.version.txt From 18f497dc67bd7f720d376aec62020c03b11c07be Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 12:05:08 +0100 Subject: [PATCH 638/675] Removed cache false on software versions --- modules/local/get_software_versions.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf index 40363c42..c3302618 100644 --- a/modules/local/get_software_versions.nf +++ b/modules/local/get_software_versions.nf @@ -16,8 +16,6 @@ process GET_SOFTWARE_VERSIONS { container "quay.io/biocontainers/python:3.8.3" } - cache false - input: path versions From 542f814c4c49aec3e446680321074a6b38fdee25 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 12:27:21 +0100 Subject: [PATCH 639/675] Updated nextflow versions --- .github/workflows/ci.yml | 4 ++-- README.md | 6 +++--- nextflow.config | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf5b2a6a..e7b4ebde 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['21.04.0', ''] + nxf_ver: ['21.04.3', ''] steps: - name: Check out pipeline code uses: actions/checkout@v2 @@ -149,4 +149,4 @@ jobs: /tmp/pytest_workflow_*/*/.nextflow.log /tmp/pytest_workflow_*/*/log.out /tmp/pytest_workflow_*/*/log.err - /tmp/pytest_workflow_*/*/work + /tmp/pytest_workflow_*/*/work \ No newline at end of file diff --git a/README.md b/README.md index ca9aad6b..881645e0 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/cutandrun/results) [![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.04.0-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.04.3-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -43,7 +43,7 @@ The pipeline has been developed with continuous integration (CI) in mind. nf-cor ## Quick Start -1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) +1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.3`) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/), [`Podman`](https://podman.io/), [`Shifter`](https://nersc.gitlab.io/development/shifter/how-to-use/) or [`Charliecloud`](https://hpc.github.io/charliecloud/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ @@ -101,4 +101,4 @@ You can cite the `nf-core` publication as follows: > > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > -> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). +> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index f6b99c61..01686206 100644 --- a/nextflow.config +++ b/nextflow.config @@ -223,7 +223,7 @@ manifest { homePage = "https://github.com/nf-core/cutandrun" description = "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis." mainScript = "main.nf" - nextflowVersion = "!>=21.04.0" + nextflowVersion = '!>=21.04.3' version = '1.0.0dev' } @@ -258,4 +258,4 @@ def check_max(obj, type) { return obj } } -} +} \ No newline at end of file From ae2eb1e8ebd22bfbdbc996d2d25547e279b54c90 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 12:30:51 +0100 Subject: [PATCH 640/675] Updated the seacr module --- modules.json | 2 +- .../modules/seacr/callpeak/functions.nf | 54 +++++++++++-------- .../nf-core/modules/seacr/callpeak/main.nf | 25 +++++---- .../nf-core/modules/seacr/callpeak/meta.yml | 11 ++-- 4 files changed, 56 insertions(+), 36 deletions(-) diff --git a/modules.json b/modules.json index 61b30e34..8c7f2a5b 100644 --- a/modules.json +++ b/modules.json @@ -55,7 +55,7 @@ "git_sha": "c5235a983d454787fa0c3247b02086969217163b" }, "seacr/callpeak": { - "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" + "git_sha": "4d89d6b2f0c478ac7ef80ece5cad44fdf7ffd614" }, "ucsc/bedclip": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" diff --git a/modules/nf-core/modules/seacr/callpeak/functions.nf b/modules/nf-core/modules/seacr/callpeak/functions.nf index da9da093..85628ee0 100644 --- a/modules/nf-core/modules/seacr/callpeak/functions.nf +++ b/modules/nf-core/modules/seacr/callpeak/functions.nf @@ -9,6 +9,13 @@ def getSoftwareName(task_process) { return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() } +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + // // Function to initialise default values and to generate a Groovy Map of available options for nf-core modules // @@ -37,32 +44,35 @@ def getPathFromList(path_list) { // Function to save/publish module results // def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_meta) { - def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta - for (key in key_list) { - if (args.meta && key instanceof String) { - def path = key - if (args.meta.containsKey(key)) { - path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] - } - path = path instanceof String ? path : '' - path_list.add(path) + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] } + path = path instanceof String ? path : '' + path_list.add(path) } } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" } } diff --git a/modules/nf-core/modules/seacr/callpeak/main.nf b/modules/nf-core/modules/seacr/callpeak/main.nf index 429c45cf..97bf1c0b 100644 --- a/modules/nf-core/modules/seacr/callpeak/main.nf +++ b/modules/nf-core/modules/seacr/callpeak/main.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' params.options = [:] options = initOptions(params.options) @@ -13,30 +13,35 @@ process SEACR_CALLPEAK { mode: params.publish_dir_mode, saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.29.2" : null) + conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.30.0" : null) if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0" + container "https://depot.galaxyproject.org/singularity/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:f4bb19b68e66de27e4c64306f951d5ff11919931-0" } else { - container 'quay.io/biocontainers/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0' + container 'quay.io/biocontainers/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:f4bb19b68e66de27e4c64306f951d5ff11919931-0' } input: tuple val(meta), path(bedgraph), path(ctrlbedgraph) + val (threshold) output: tuple val(meta), path("*.bed"), emit: bed - path "*.version.txt" , emit: version + path "versions.yml" , emit: versions script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def function_switch = ctrlbedgraph ? "$ctrlbedgraph" : "$threshold" """ SEACR_1.3.sh \\ $bedgraph \\ - $ctrlbedgraph \\ + $function_switch \\ $options.args \\ $prefix - - echo $VERSION > ${software}.version.txt + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(echo $VERSION) + bedtools: \$(bedtools --version | sed -e "s/bedtools v//g") + r-base: \$(echo \$(R --version 2>&1) | sed 's/^.*R version //; s/ .*\$//') + END_VERSIONS """ } diff --git a/modules/nf-core/modules/seacr/callpeak/meta.yml b/modules/nf-core/modules/seacr/callpeak/meta.yml index 579961e2..22db567d 100644 --- a/modules/nf-core/modules/seacr/callpeak/meta.yml +++ b/modules/nf-core/modules/seacr/callpeak/meta.yml @@ -1,3 +1,4 @@ + name: seacr_callpeak description: Call peaks using SEACR on sequenced reads in bedgraph format keywords: @@ -30,6 +31,10 @@ input: type: file description: | Control (IgG) data bedgraph file to generate an empirical threshold for peak calling. + - threshold: + type: value + description: | + Threshold value used to call peaks if the ctrlbedgraph input is set to []. Set to 1 if using a control bedgraph output: - meta: type: map @@ -40,9 +45,9 @@ output: type: file description: Bed file containing the calculated peaks. pattern: "*.bed" - - version: + - versions: type: file - description: File containing software version - pattern: "*.{version.txt}" + description: File containing software versions + pattern: "versions.yml" authors: - "@chris-cheshire" From b70cb3d4889985fd3574762b780ba51fd60af474 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 12:43:30 +0100 Subject: [PATCH 641/675] Fixed line endings --- .github/workflows/ci.yml | 6 +++--- nextflow.config | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7b4ebde..c6c5cc46 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: strategy: matrix: # We only run this on the specified nextflow version for the pipeline - nxf_ver: ['21.04.0'] + nxf_ver: ['21.04.3'] steps: - name: Check out pipeline code uses: actions/checkout@v2 @@ -100,7 +100,7 @@ jobs: strategy: fail-fast: false matrix: - nxf_version: ["21.04.0"] + nxf_version: ["21.04.3"] tags: ["samplesheet", "verify_output_input", "verify_output_align_short", "verify_output_align_long", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] steps: - uses: actions/checkout@v2 @@ -149,4 +149,4 @@ jobs: /tmp/pytest_workflow_*/*/.nextflow.log /tmp/pytest_workflow_*/*/log.out /tmp/pytest_workflow_*/*/log.err - /tmp/pytest_workflow_*/*/work \ No newline at end of file + /tmp/pytest_workflow_*/*/work diff --git a/nextflow.config b/nextflow.config index 01686206..dd9767f4 100644 --- a/nextflow.config +++ b/nextflow.config @@ -258,4 +258,4 @@ def check_max(obj, type) { return obj } } -} \ No newline at end of file +} From cea050cc91a0d4b8f12c420ee9c84f730ab09165 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 12:49:27 +0100 Subject: [PATCH 642/675] Removed custom seacr module --- modules/local/seacr_no_igg.nf | 42 ----------------------------------- workflows/cutandrun.nf | 27 +++++++++++++--------- 2 files changed, 16 insertions(+), 53 deletions(-) delete mode 100644 modules/local/seacr_no_igg.nf diff --git a/modules/local/seacr_no_igg.nf b/modules/local/seacr_no_igg.nf deleted file mode 100644 index 743c7a29..00000000 --- a/modules/local/seacr_no_igg.nf +++ /dev/null @@ -1,42 +0,0 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' - -params.options = [:] -options = initOptions(params.options) - -def VERSION = '1.3' - -process SEACR_CALLPEAK { - tag "$meta.id" - label 'process_medium' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } - - conda (params.enable_conda ? "bioconda::seacr=1.3 conda-forge::r-base=4.0.2 bioconda::bedtools=2.30.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0" - } else { - container 'quay.io/biocontainers/mulled-v2-03bfeb32fe80910c231f630d4262b83677c8c0f4:5bb5ed4307a8187a7f34730b00431de93688fa59-0' - } - - input: - tuple val(meta), path(bedgraph) - val (threshold) - - output: - tuple val(meta), path("*.bed"), emit: bed - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - """ - SEACR_1.3.sh \\ - $bedgraph \\ - $threshold \\ - $options.args \\ - $prefix - - echo $VERSION > ${software}.version.txt - """ -} diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 11d0be23..026eb05d 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -295,7 +295,6 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) -include { SEACR_CALLPEAK as SEACR_NO_IGG } from "../modules/local/seacr_no_igg" addParams( options: modules["seacr"] ) include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) @@ -336,6 +335,7 @@ include { ANNOTATE_META_CSV as ANNOTATE_PEAK_REPRO_META } from "../subworkflows include { UCSC_BEDCLIP } from "../modules/nf-core/modules/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/modules/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) include { SEACR_CALLPEAK } from "../modules/nf-core/modules/seacr/callpeak/main" addParams( options: modules["seacr"] ) +include { SEACR_CALLPEAK as SEACR_CALLPEAK_NOIGG } from "../modules/nf-core/modules/seacr/callpeak/main" addParams( options: modules["seacr"] ) include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) @@ -684,28 +684,33 @@ workflow CUTANDRUN { * MODULE: Call peaks with IgG control */ SEACR_CALLPEAK ( - ch_bedgraph_paired + ch_bedgraph_paired, + params.peak_threshold ) ch_seacr_bed = SEACR_CALLPEAK.out.bed - ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) + //ch_software_versions = ch_software_versions.mix(SEACR_CALLPEAK.out.version.first().ifEmpty(null)) // EXAMPLE CHANNEL STRUCT: [[META], BED] //SEACR_CALLPEAK.out.bed | view } else { /* - * CHANNEL: Load peak threshold into channel - */ - ch_peak_threshold = Channel.value(params.peak_threshold) + * CHANNEL: Add fake control channel + */ + ch_bedgraph_split.target + .map{ row-> [ row[0], row[1], [] ] } + .set { ch_bedgraph_target_fctrl } + // EXAMPLE CHANNEL STRUCT: [[META], BED, FAKE_CTRL] + // ch_bedgraph_target_fctrl | view /* * MODULE: Call peaks without IgG Control */ - SEACR_NO_IGG ( - ch_bedgraph_split.target, - ch_peak_threshold + SEACR_CALLPEAK_NOIGG ( + ch_bedgraph_target_fctrl, + params.peak_threshold ) - ch_seacr_bed = SEACR_NO_IGG.out.bed - ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) + ch_seacr_bed = SEACR_CALLPEAK_NOIGG.out.bed + //ch_software_versions = ch_software_versions.mix(SEACR_NO_IGG.out.version.first().ifEmpty(null)) // EXAMPLE CHANNEL STRUCT: [[META], BED] //SEACR_NO_IGG.out.bed | view } From 7c49965a5650d3aea244ae94880047870aa18e8e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 12:50:45 +0100 Subject: [PATCH 643/675] Whitspace --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 881645e0..2c119100 100644 --- a/README.md +++ b/README.md @@ -101,4 +101,4 @@ You can cite the `nf-core` publication as follows: > > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > -> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). \ No newline at end of file +> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). From 5dd2e166210da60b6f85f6bc55f5983c48f0e71a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 21 Oct 2021 13:53:24 +0100 Subject: [PATCH 644/675] Work around for streaming of tar file to github actions failing. --- conf/test.config | 2 +- conf/test_full_small.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index 01775813..db350111 100644 --- a/conf/test.config +++ b/conf/test.config @@ -29,7 +29,7 @@ params { gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + //spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 } \ No newline at end of file diff --git a/conf/test_full_small.config b/conf/test_full_small.config index 7867bb4a..4a276c87 100644 --- a/conf/test_full_small.config +++ b/conf/test_full_small.config @@ -17,7 +17,7 @@ params { gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + //spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 } From 51eab1ebfe6a01d63b66692457de25a67297cbde Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 26 Oct 2021 09:43:11 +0100 Subject: [PATCH 645/675] Reorganised local modules folder --- modules/local/bedtools_genomecov_scale.nf | 2 +- modules/local/{ => common}/functions.nf | 0 modules/local/export_meta.nf | 2 +- modules/local/get_chrom_sizes.nf | 2 +- modules/local/{ => linux}/awk.nf | 2 +- modules/local/{ => linux}/awk_script.nf | 2 +- modules/local/{ => linux}/cut.nf | 2 +- modules/local/{ => linux}/sort.nf | 2 +- .../modules/samtools/custom_view/functions.nf | 59 ------------------- modules/local/modules/trimgalore/main.nf | 6 +- modules/local/multiqc.nf | 2 +- .../local/{ => python}/generate_reports.nf | 2 +- .../{ => python}/get_software_versions.nf | 2 +- modules/local/{ => python}/igv_session.nf | 2 +- .../{ => python}/plot_consensus_peaks.nf | 2 +- .../local/{ => python}/samplesheet_check.nf | 2 +- .../main.nf => samtools_custom_view.nf} | 2 +- subworkflows/local/annotate_meta_awk.nf | 4 +- subworkflows/local/calculate_fragments.nf | 4 +- subworkflows/local/consensus_peaks.nf | 6 +- subworkflows/local/input_check.nf | 2 +- workflows/cutandrun.nf | 18 +++--- 22 files changed, 34 insertions(+), 93 deletions(-) rename modules/local/{ => common}/functions.nf (100%) rename modules/local/{ => linux}/awk.nf (94%) rename modules/local/{ => linux}/awk_script.nf (93%) rename modules/local/{ => linux}/cut.nf (93%) rename modules/local/{ => linux}/sort.nf (94%) delete mode 100644 modules/local/modules/samtools/custom_view/functions.nf rename modules/local/{ => python}/generate_reports.nf (94%) rename modules/local/{ => python}/get_software_versions.nf (94%) rename modules/local/{ => python}/igv_session.nf (95%) rename modules/local/{ => python}/plot_consensus_peaks.nf (91%) rename modules/local/{ => python}/samplesheet_check.nf (96%) rename modules/local/{modules/samtools/custom_view/main.nf => samtools_custom_view.nf} (94%) diff --git a/modules/local/bedtools_genomecov_scale.nf b/modules/local/bedtools_genomecov_scale.nf index 8e8da70b..43bec544 100644 --- a/modules/local/bedtools_genomecov_scale.nf +++ b/modules/local/bedtools_genomecov_scale.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/functions.nf b/modules/local/common/functions.nf similarity index 100% rename from modules/local/functions.nf rename to modules/local/common/functions.nf diff --git a/modules/local/export_meta.nf b/modules/local/export_meta.nf index ad0e193c..69423bca 100644 --- a/modules/local/export_meta.nf +++ b/modules/local/export_meta.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index 3b386d5f..4d5c01cf 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles } from './functions' +include { initOptions; saveFiles } from './common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/awk.nf b/modules/local/linux/awk.nf similarity index 94% rename from modules/local/awk.nf rename to modules/local/linux/awk.nf index 23737a0f..5fa68e94 100644 --- a/modules/local/awk.nf +++ b/modules/local/linux/awk.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/awk_script.nf b/modules/local/linux/awk_script.nf similarity index 93% rename from modules/local/awk_script.nf rename to modules/local/linux/awk_script.nf index 74f77c2a..a1de0c19 100644 --- a/modules/local/awk_script.nf +++ b/modules/local/linux/awk_script.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/cut.nf b/modules/local/linux/cut.nf similarity index 93% rename from modules/local/cut.nf rename to modules/local/linux/cut.nf index c6c774a0..f80be393 100644 --- a/modules/local/cut.nf +++ b/modules/local/linux/cut.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/sort.nf b/modules/local/linux/sort.nf similarity index 94% rename from modules/local/sort.nf rename to modules/local/linux/sort.nf index 78b2593e..1a559b70 100644 --- a/modules/local/sort.nf +++ b/modules/local/linux/sort.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/modules/samtools/custom_view/functions.nf b/modules/local/modules/samtools/custom_view/functions.nf deleted file mode 100644 index d25eea86..00000000 --- a/modules/local/modules/samtools/custom_view/functions.nf +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ----------------------------------------------------- - * Utility functions used in nf-core DSL2 module files - * ----------------------------------------------------- - */ - -/* - * Extract name of software tool from process name using $task.process - */ -def getSoftwareName(task_process) { - return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() -} - -/* - * Function to initialise default values and to generate a Groovy Map of available options for nf-core modules - */ -def initOptions(Map args) { - def Map options = [:] - options.args = args.args ?: '' - options.args2 = args.args2 ?: '' - options.publish_by_id = args.publish_by_id ?: false - options.publish_dir = args.publish_dir ?: '' - options.publish_files = args.publish_files - options.suffix = args.suffix ?: '' - return options -} - -/* - * Tidy up and join elements of a list to return a path string - */ -def getPathFromList(path_list) { - def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries - paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes - return paths.join('/') -} - -/* - * Function to save/publish module results - */ -def saveFiles(Map args) { - if (!args.filename.endsWith('.version.txt')) { - def ioptions = initOptions(args.options) - def path_list = [ ioptions.publish_dir ?: args.publish_dir ] - if (ioptions.publish_by_id) { - path_list.add(args.publish_id) - } - if (ioptions.publish_files instanceof Map) { - for (ext in ioptions.publish_files) { - if (args.filename.endsWith(ext.key)) { - def ext_list = path_list.collect() - ext_list.add(ext.value) - return "${getPathFromList(ext_list)}/$args.filename" - } - } - } else if (ioptions.publish_files == null) { - return "${getPathFromList(path_list)}/$args.filename" - } - } -} diff --git a/modules/local/modules/trimgalore/main.nf b/modules/local/modules/trimgalore/main.nf index 5d0a27d1..9b7181e8 100644 --- a/modules/local/modules/trimgalore/main.nf +++ b/modules/local/modules/trimgalore/main.nf @@ -22,9 +22,9 @@ process TRIMGALORE { tuple val(meta), path(reads) output: - tuple val(meta), path("*trimmed.fastq.gz") , emit: reads - tuple val(meta), path("*report.txt") , emit: log - path "*.version.txt" , emit: version + tuple val(meta), path("*trimmed.fastq.gz"), emit: reads + tuple val(meta), path("*report.txt") , emit: log + path "*.version.txt" , emit: version tuple val(meta), path("*.html"), emit: html optional true tuple val(meta), path("*.zip") , emit: zip optional true diff --git a/modules/local/multiqc.nf b/modules/local/multiqc.nf index 32284384..1867e3a9 100644 --- a/modules/local/multiqc.nf +++ b/modules/local/multiqc.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/generate_reports.nf b/modules/local/python/generate_reports.nf similarity index 94% rename from modules/local/generate_reports.nf rename to modules/local/python/generate_reports.nf index 568813e6..321b878c 100644 --- a/modules/local/generate_reports.nf +++ b/modules/local/python/generate_reports.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/get_software_versions.nf b/modules/local/python/get_software_versions.nf similarity index 94% rename from modules/local/get_software_versions.nf rename to modules/local/python/get_software_versions.nf index c3302618..e41087f2 100644 --- a/modules/local/get_software_versions.nf +++ b/modules/local/python/get_software_versions.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles } from './functions' +include { initOptions; saveFiles } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/igv_session.nf b/modules/local/python/igv_session.nf similarity index 95% rename from modules/local/igv_session.nf rename to modules/local/python/igv_session.nf index 199f1ef8..ddb4e1de 100644 --- a/modules/local/igv_session.nf +++ b/modules/local/python/igv_session.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/plot_consensus_peaks.nf b/modules/local/python/plot_consensus_peaks.nf similarity index 91% rename from modules/local/plot_consensus_peaks.nf rename to modules/local/python/plot_consensus_peaks.nf index fbe5ae75..7bbc26d9 100644 --- a/modules/local/plot_consensus_peaks.nf +++ b/modules/local/python/plot_consensus_peaks.nf @@ -1,4 +1,4 @@ -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/samplesheet_check.nf b/modules/local/python/samplesheet_check.nf similarity index 96% rename from modules/local/samplesheet_check.nf rename to modules/local/python/samplesheet_check.nf index f8264b70..89547616 100644 --- a/modules/local/samplesheet_check.nf +++ b/modules/local/python/samplesheet_check.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles } from './functions' +include { initOptions; saveFiles } from '../common/functions' params.options = [:] options = initOptions(params.options) diff --git a/modules/local/modules/samtools/custom_view/main.nf b/modules/local/samtools_custom_view.nf similarity index 94% rename from modules/local/modules/samtools/custom_view/main.nf rename to modules/local/samtools_custom_view.nf index 1bfd08cf..1ddc58f5 100644 --- a/modules/local/modules/samtools/custom_view/main.nf +++ b/modules/local/samtools_custom_view.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './functions' +include { initOptions; saveFiles; getSoftwareName } from './common/functions' params.options = [:] def options = initOptions(params.options) diff --git a/subworkflows/local/annotate_meta_awk.nf b/subworkflows/local/annotate_meta_awk.nf index ad82357d..0e855ff3 100644 --- a/subworkflows/local/annotate_meta_awk.nf +++ b/subworkflows/local/annotate_meta_awk.nf @@ -8,8 +8,8 @@ params.meta_suffix = "" params.meta_prefix = "" params.script_mode = false -include { AWK_SCRIPT } from "../../modules/local/awk_script" addParams( options: params.options ) -include { AWK } from "../../modules/local/awk" addParams( options: params.options ) +include { AWK_SCRIPT } from "../../modules/local/linux/awk_script" addParams( options: params.options ) +include { AWK } from "../../modules/local/linux/awk" addParams( options: params.options ) workflow ANNOTATE_META_AWK { take: diff --git a/subworkflows/local/calculate_fragments.nf b/subworkflows/local/calculate_fragments.nf index e3ddb7f8..6aeb4a0c 100644 --- a/subworkflows/local/calculate_fragments.nf +++ b/subworkflows/local/calculate_fragments.nf @@ -12,8 +12,8 @@ params.cut_options = [:] include { SAMTOOLS_VIEW } from "../../modules/nf-core/modules/samtools/view/main" addParams( options: params.samtools_view_options ) include { SAMTOOLS_SORT } from "../../modules/nf-core/modules/samtools/sort/main" addParams( options: params.samtools_sort_options ) include { BEDTOOLS_BAMTOBED } from "../../modules/nf-core/modules/bedtools/bamtobed/main" addParams( options: params.bamtobed_options ) -include { AWK } from "../../modules/local/awk" addParams( options: params.awk_options ) -include { CUT } from "../../modules/local/cut" addParams( options: params.cut_options ) +include { AWK } from "../../modules/local/linux/awk" addParams( options: params.awk_options ) +include { CUT } from "../../modules/local/linux/cut" addParams( options: params.cut_options ) workflow CALCULATE_FRAGMENTS { take: diff --git a/subworkflows/local/consensus_peaks.nf b/subworkflows/local/consensus_peaks.nf index 0a5e6c29..26515393 100644 --- a/subworkflows/local/consensus_peaks.nf +++ b/subworkflows/local/consensus_peaks.nf @@ -8,10 +8,10 @@ params.plot_peak_options = [:] params.awk_threshold_options = [:] params.run_peak_plotting = true -include { SORT } from "../../modules/local/sort" addParams( options: params.sort_options ) +include { SORT } from "../../modules/local/linux/sort" addParams( options: params.sort_options ) include { BEDTOOLS_MERGE } from "../../modules/nf-core/modules/bedtools/merge/main" addParams( options: params.bedtools_merge_options ) -include { AWK } from "../../modules/local/awk" addParams( options: params.awk_threshold_options ) -include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/plot_consensus_peaks" addParams( options: params.plot_peak_options ) +include { AWK } from "../../modules/local/linux/awk" addParams( options: params.awk_threshold_options ) +include { PLOT_CONSENSUS_PEAKS } from "../../modules/local/python/plot_consensus_peaks" addParams( options: params.plot_peak_options ) workflow CONSENSUS_PEAKS { diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 5b57d0be..a098b405 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -6,7 +6,7 @@ params.options = [:] include { SAMPLESHEET_CHECK; - get_samplesheet_paths } from "../../modules/local/samplesheet_check" addParams( options: params.options ) + get_samplesheet_paths } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) workflow INPUT_CHECK { take: diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 026eb05d..1500b1db 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -295,17 +295,17 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) -include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_name_peak_bed"] ) -include { IGV_SESSION } from "../modules/local/igv_session" addParams( options: modules["igv"] ) -include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/awk" addParams( options: modules["awk_edit_peak_bed"] ) -include { AWK as AWK_FRAG_BIN } from "../modules/local/awk" addParams( options: modules["awk_frag_bin"] ) -include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/modules/samtools/custom_view/main" addParams( options: modules["samtools_frag_len"] ) -include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) -include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) +include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_name_peak_bed"] ) +include { IGV_SESSION } from "../modules/local/python/igv_session" addParams( options: modules["igv"] ) +include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_edit_peak_bed"] ) +include { AWK as AWK_FRAG_BIN } from "../modules/local/linux/awk" addParams( options: modules["awk_frag_bin"] ) +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/samtools_custom_view" addParams( options: modules["samtools_frag_len"] ) +include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) +include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) include { EXPORT_META as EXPORT_META_CTRL } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -include { GENERATE_REPORTS } from "../modules/local/generate_reports" addParams( options: modules["generate_reports"] ) -include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +include { GENERATE_REPORTS } from "../modules/local/python/generate_reports" addParams( options: modules["generate_reports"] ) +include { GET_SOFTWARE_VERSIONS } from "../modules/local/python/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) /* From 8bc1bca2f692250440d600a53a4c4e418fdf49e6 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 26 Oct 2021 10:32:29 +0100 Subject: [PATCH 646/675] Added ci for local zipped files --- .github/workflows/ci.yml | 14 ++++++++++- conf/test.config | 2 +- conf/test_full_small.config | 2 +- conf/test_full_small_local_zip.config | 0 conf/test_local_zip.config | 35 +++++++++++++++++++++++++++ nextflow.config | 1 + 6 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 conf/test_full_small_local_zip.config create mode 100644 conf/test_local_zip.config diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6c5cc46..ad975030 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,9 +33,21 @@ jobs: wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ + # Work around for the unexpected end of file error that github actions seems to get when downloading compressed files during pipelie + # execution + - name: Download data + run: | + wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz + wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz + wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz + wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz + wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz + wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz + - name: Run pipeline with test data run: | - nextflow run ${GITHUB_WORKSPACE} -profile docker,test + nextflow run ${GITHUB_WORKSPACE} -profile docker,test_local_zip + ############################## ### LARGE INTEGRATION TEST ### ############################## diff --git a/conf/test.config b/conf/test.config index db350111..01775813 100644 --- a/conf/test.config +++ b/conf/test.config @@ -29,7 +29,7 @@ params { gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - //spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 } \ No newline at end of file diff --git a/conf/test_full_small.config b/conf/test_full_small.config index 4a276c87..7867bb4a 100644 --- a/conf/test_full_small.config +++ b/conf/test_full_small.config @@ -17,7 +17,7 @@ params { gene_bed = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" spikein_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz' - //spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' + spikein_bowtie2 = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 } diff --git a/conf/test_full_small_local_zip.config b/conf/test_full_small_local_zip.config new file mode 100644 index 00000000..e69de29b diff --git a/conf/test_local_zip.config b/conf/test_local_zip.config new file mode 100644 index 00000000..8fc308bf --- /dev/null +++ b/conf/test_local_zip.config @@ -0,0 +1,35 @@ +/* +======================================================================================== + Nextflow config file for running minimal tests +======================================================================================== + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/cutandrun -profile test, + +---------------------------------------------------------------------------------------- +*/ + +params { + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Limit resources so that this can run CI + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h + + // Input data + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-small.csv' + + // Genome references + fasta = 'hg38-chr20.fa.gz' + bowtie2 = 'hg38-chr20-bowtie2.tar.gz' + gtf = 'hg38-chr20-genes.gtf.gz' + gene_bed = 'hg38-chr20-genes.bed.gz' + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + spikein_fasta = 'e_coli_U00096_3.fa.gz' + spikein_bowtie2 = 'e_coli_U00096_3.tar.gz' + + minimum_alignment_q_score = 10 +} \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index dd9767f4..4ec284b0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -181,6 +181,7 @@ profiles { test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control test_full { includeConfig "conf/test_full.config" } // Runs a full experimental dataset test_full_multi { includeConfig "conf/test_full_multi.config" } // Runs a full experimental dataset with extra fake replicates to enable full reporting functionality + test_local_zip { includeConfig "conf/test_local_zip.config" } // Runs a single sample with an IgG control but that targets local already downloaded compressed input files } // Load igenomes.config if required From fa8ae7c9630d5adeb4ef13f954f46b0680904f3a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 26 Oct 2021 10:35:24 +0100 Subject: [PATCH 647/675] ci updates --- .github/workflows/ci.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ad975030..0084cfd2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,18 +33,18 @@ jobs: wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ - # Work around for the unexpected end of file error that github actions seems to get when downloading compressed files during pipelie - # execution + # Work around for the unexpected end of file error that github actions seems to get when downloading compressed + # files during pipelie execution - name: Download data run: | - wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz - wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz - wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz - wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz - wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz - wget -qO- https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz - - name: Run pipeline with test data + - name: Run pipeline run: | nextflow run ${GITHUB_WORKSPACE} -profile docker,test_local_zip From e43911dbad517e80d4a24500182da1e19ab67256 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 26 Oct 2021 10:37:37 +0100 Subject: [PATCH 648/675] ci updates --- conf/test_local_zip.config | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/test_local_zip.config b/conf/test_local_zip.config index 8fc308bf..aa5ea731 100644 --- a/conf/test_local_zip.config +++ b/conf/test_local_zip.config @@ -23,13 +23,13 @@ params { input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-small.csv' // Genome references - fasta = 'hg38-chr20.fa.gz' - bowtie2 = 'hg38-chr20-bowtie2.tar.gz' - gtf = 'hg38-chr20-genes.gtf.gz' - gene_bed = 'hg38-chr20-genes.bed.gz' + fasta = '/home/runner/work/cutandrun/cutandrun/hg38-chr20.fa.gz' + bowtie2 = '/home/runner/work/cutandrun/cutandrun/hg38-chr20-bowtie2.tar.gz' + gtf = '/home/runner/work/cutandrun/cutandrun/hg38-chr20-genes.gtf.gz' + gene_bed = '/home/runner/work/cutandrun/cutandrun/hg38-chr20-genes.bed.gz' blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" - spikein_fasta = 'e_coli_U00096_3.fa.gz' - spikein_bowtie2 = 'e_coli_U00096_3.tar.gz' + spikein_fasta = '/home/runner/work/cutandrun/cutandrun/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = '/home/runner/work/cutandrun/cutandrun/e_coli_U00096_3.tar.gz' minimum_alignment_q_score = 10 } \ No newline at end of file From da203048bdfec16e31781cbadf0f7666c177f71c Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 26 Oct 2021 10:43:35 +0100 Subject: [PATCH 649/675] Updated local zip to extended test --- .github/workflows/ci.yml | 28 +++++++++++++++++++++++++-- conf/test_full_small_local_zip.config | 23 ++++++++++++++++++++++ nextflow.config | 19 +++++++++--------- 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0084cfd2..ff94e036 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,9 +72,21 @@ jobs: wget -qO- get.nextflow.io | bash sudo mv nextflow /usr/local/bin/ + # Work around for the unexpected end of file error that github actions seems to get when downloading compressed + # files during pipelie execution + - name: Download data + run: | + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz + - name: Run pipeline with test data run: | - nextflow run ${GITHUB_WORKSPACE} -profile docker,test_full_small + nextflow run ${GITHUB_WORKSPACE} -profile docker,test_full_small_local_zip + ##################################### ### EDGE VERSION INTEGRATION TEST ### ##################################### @@ -97,9 +109,21 @@ jobs: sudo mv nextflow /usr/local/bin/ nextflow self-update + # Work around for the unexpected end of file error that github actions seems to get when downloading compressed + # files during pipelie execution + - name: Download data + run: | + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20.fa.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-bowtie2.tar.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.gtf.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/hg38-chr20-genes.bed.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.fa.gz + wget -q https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/reference/genomes/e_coli_U00096_3.tar.gz + - name: Run pipeline with test data run: | - nextflow run ${GITHUB_WORKSPACE} -profile docker,test + nextflow run ${GITHUB_WORKSPACE} -profile docker,test_local_zip + ############################## ### UNIT TESTS ### ############################## diff --git a/conf/test_full_small_local_zip.config b/conf/test_full_small_local_zip.config index e69de29b..31753e47 100644 --- a/conf/test_full_small_local_zip.config +++ b/conf/test_full_small_local_zip.config @@ -0,0 +1,23 @@ +params { + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Limit resources so that this can run CI + max_cpus = 2 + max_memory = 6.GB + max_time = 6.h + + // Input data + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/cutandrun/samplesheet/test-GSE145187-all-small.csv' + + // Genome references + fasta = '/home/runner/work/cutandrun/cutandrun/hg38-chr20.fa.gz' + bowtie2 = '/home/runner/work/cutandrun/cutandrun/hg38-chr20-bowtie2.tar.gz' + gtf = '/home/runner/work/cutandrun/cutandrun/hg38-chr20-genes.gtf.gz' + gene_bed = '/home/runner/work/cutandrun/cutandrun/hg38-chr20-genes.bed.gz' + blacklist = "${projectDir}/assets/blacklists/hg38-blacklist.bed" + spikein_fasta = '/home/runner/work/cutandrun/cutandrun/e_coli_U00096_3.fa.gz' + spikein_bowtie2 = '/home/runner/work/cutandrun/cutandrun/e_coli_U00096_3.tar.gz' + + minimum_alignment_q_score = 10 +} diff --git a/nextflow.config b/nextflow.config index 4ec284b0..ac339478 100644 --- a/nextflow.config +++ b/nextflow.config @@ -173,15 +173,16 @@ profiles { shifter.enabled = false } - laptop { includeConfig "conf/laptop.config" } // Sets up compute resources for local computing run - test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control - test_fasta_only { includeConfig "conf/test_fasta_only.config" } // Runs a single sample with an IgG control but with no extra genome files just as bed files and black lists - test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control - test_full_small { includeConfig "conf/test_full_small.config" } // Runs a full experimental configuration but with a small dataset - test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control - test_full { includeConfig "conf/test_full.config" } // Runs a full experimental dataset - test_full_multi { includeConfig "conf/test_full_multi.config" } // Runs a full experimental dataset with extra fake replicates to enable full reporting functionality - test_local_zip { includeConfig "conf/test_local_zip.config" } // Runs a single sample with an IgG control but that targets local already downloaded compressed input files + laptop { includeConfig "conf/laptop.config" } // Sets up compute resources for local computing run + test { includeConfig "conf/test.config" } // Runs a single sample with an IgG control + test_fasta_only { includeConfig "conf/test_fasta_only.config" } // Runs a single sample with an IgG control but with no extra genome files just as bed files and black lists + test_tech_reps { includeConfig "conf/test_tech_reps.config" } // Runs a single sample with two technical replicates and an IgG control + test_full_small { includeConfig "conf/test_full_small.config" } // Runs a full experimental configuration but with a small dataset + test_no_igg { includeConfig "conf/test_no_igg.config" } // Runs a single sample with NO IgG control + test_full { includeConfig "conf/test_full.config" } // Runs a full experimental dataset + test_full_multi { includeConfig "conf/test_full_multi.config" } // Runs a full experimental dataset with extra fake replicates to enable full reporting functionality + test_local_zip { includeConfig "conf/test_local_zip.config" } // Runs a single sample with an IgG control but that targets local, already downloaded compressed input files + test_full_small_local_zip { includeConfig "conf/test_full_small_local_zip.config" } // Runs a full experimental configuration but with a small dataset but that targets local, already downloaded compressed input files } // Load igenomes.config if required From 5ca88e8c4831385c509311d9766298f986802e29 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 26 Oct 2021 10:50:30 +0100 Subject: [PATCH 650/675] Moved get software versions back to pass linting --- .../{python => }/get_software_versions.nf | 2 +- workflows/cutandrun.nf | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) rename modules/local/{python => }/get_software_versions.nf (94%) diff --git a/modules/local/python/get_software_versions.nf b/modules/local/get_software_versions.nf similarity index 94% rename from modules/local/python/get_software_versions.nf rename to modules/local/get_software_versions.nf index e41087f2..824cab98 100644 --- a/modules/local/python/get_software_versions.nf +++ b/modules/local/get_software_versions.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles } from '../common/functions' +include { initOptions; saveFiles } from 'common/functions' params.options = [:] options = initOptions(params.options) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 1500b1db..b0a82a89 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -292,21 +292,21 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title /* * MODULES */ -include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) -include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_name_peak_bed"] ) -include { IGV_SESSION } from "../modules/local/python/igv_session" addParams( options: modules["igv"] ) -include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_edit_peak_bed"] ) -include { AWK as AWK_FRAG_BIN } from "../modules/local/linux/awk" addParams( options: modules["awk_frag_bin"] ) -include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/samtools_custom_view" addParams( options: modules["samtools_frag_len"] ) +include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) +include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) +include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_name_peak_bed"] ) +include { IGV_SESSION } from "../modules/local/python/igv_session" addParams( options: modules["igv"] ) +include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_edit_peak_bed"] ) +include { AWK as AWK_FRAG_BIN } from "../modules/local/linux/awk" addParams( options: modules["awk_frag_bin"] ) +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/samtools_custom_view" addParams( options: modules["samtools_frag_len"] ) include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) -include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -include { EXPORT_META as EXPORT_META_CTRL } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -include { GENERATE_REPORTS } from "../modules/local/python/generate_reports" addParams( options: modules["generate_reports"] ) -include { GET_SOFTWARE_VERSIONS } from "../modules/local/python/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) -include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) +include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { EXPORT_META as EXPORT_META_CTRL } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { GENERATE_REPORTS } from "../modules/local/python/generate_reports" addParams( options: modules["generate_reports"] ) +include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules From 1f643373e9a905228d7deec2bf052871e8174c11 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 26 Oct 2021 10:59:33 +0100 Subject: [PATCH 651/675] fixed functions path --- modules/local/get_software_versions.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/get_software_versions.nf b/modules/local/get_software_versions.nf index 824cab98..aab21fa7 100644 --- a/modules/local/get_software_versions.nf +++ b/modules/local/get_software_versions.nf @@ -1,5 +1,5 @@ // Import generic module functions -include { initOptions; saveFiles } from 'common/functions' +include { initOptions; saveFiles } from './common/functions' params.options = [:] options = initOptions(params.options) From 7213517b016dc91d7398da5aa17f5acaa8f9018e Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 27 Oct 2021 14:44:06 +0100 Subject: [PATCH 652/675] Fixed multiqc issue --- conf/modules.config | 2 +- modules/local/modules/trimgalore/main.nf | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index d081bf41..44349822 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -259,7 +259,7 @@ params { } "multiqc" { - args = "" + args = "-v" publish_dir = "04_reporting/multiqc" } diff --git a/modules/local/modules/trimgalore/main.nf b/modules/local/modules/trimgalore/main.nf index 9b7181e8..65a55afa 100644 --- a/modules/local/modules/trimgalore/main.nf +++ b/modules/local/modules/trimgalore/main.nf @@ -86,11 +86,11 @@ process TRIMGALORE { mv ${meta.id}_1_val_1.fq.gz ${prefix_1}.fastq.gz mv ${meta.id}_2_val_2.fq.gz ${prefix_2}.fastq.gz - [ ! -f ${meta.id}_1_val_1_fastqc.html ] || mv ${meta.id}_1_val_1_fastqc.html ${meta.id}_1_fastqc${suffix}.html - [ ! -f ${meta.id}_2_val_2_fastqc.html ] || mv ${meta.id}_2_val_2_fastqc.html ${meta.id}_2_fastqc${suffix}.html + [ ! -f ${meta.id}_1_val_1_fastqc.html ] || mv ${meta.id}_1_val_1_fastqc.html ${meta.id}_1${suffix}_fastqc.html + [ ! -f ${meta.id}_2_val_2_fastqc.html ] || mv ${meta.id}_2_val_2_fastqc.html ${meta.id}_2${suffix}_fastqc.html - [ ! -f ${meta.id}_1_val_1_fastqc.zip ] || mv ${meta.id}_1_val_1_fastqc.zip ${meta.id}_1_fastqc${suffix}.zip - [ ! -f ${meta.id}_2_val_2_fastqc.zip ] || mv ${meta.id}_2_val_2_fastqc.zip ${meta.id}_2_fastqc${suffix}.zip + [ ! -f ${meta.id}_1_val_1_fastqc.zip ] || mv ${meta.id}_1_val_1_fastqc.zip ${meta.id}_1${suffix}_fastqc.zip + [ ! -f ${meta.id}_2_val_2_fastqc.zip ] || mv ${meta.id}_2_val_2_fastqc.zip ${meta.id}_2${suffix}_fastqc.zip """ } } From 7f29258abd9c4975f05e3d370bccc2cb4dc9dbab Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Wed, 27 Oct 2021 18:14:17 +0100 Subject: [PATCH 653/675] Version revise --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index ac339478..6bb5ee3a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -225,7 +225,7 @@ manifest { homePage = "https://github.com/nf-core/cutandrun" description = "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis." mainScript = "main.nf" - nextflowVersion = '!>=21.04.3' + nextflowVersion = '!>=21.04.0' version = '1.0.0dev' } From 6d24e05fcbdeaa3282d26fc51c0ce3d0487c0a95 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 28 Oct 2021 08:44:44 +0100 Subject: [PATCH 654/675] Downgraded nextflow --- .github/workflows/ci.yml | 6 +++--- README.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff94e036..ec62a99c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: strategy: matrix: # Nextflow versions: check pipeline minimum and current latest - nxf_ver: ['21.04.3', ''] + nxf_ver: ['21.04.0', ''] steps: - name: Check out pipeline code uses: actions/checkout@v2 @@ -62,7 +62,7 @@ jobs: strategy: matrix: # We only run this on the specified nextflow version for the pipeline - nxf_ver: ['21.04.3'] + nxf_ver: ['21.04.0'] steps: - name: Check out pipeline code uses: actions/checkout@v2 @@ -136,7 +136,7 @@ jobs: strategy: fail-fast: false matrix: - nxf_version: ["21.04.3"] + nxf_version: ["21.04.0"] tags: ["samplesheet", "verify_output_input", "verify_output_align_short", "verify_output_align_long", "verify_output_peak_calling", "verify_output_reporting", "verify_output_save", "verify_output_skip"] steps: - uses: actions/checkout@v2 diff --git a/README.md b/README.md index 2c119100..ca9aad6b 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/cutandrun/results) [![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.04.3-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A521.04.0-23aa62.svg?labelColor=000000)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -43,7 +43,7 @@ The pipeline has been developed with continuous integration (CI) in mind. nf-cor ## Quick Start -1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.3`) +1. Install [`Nextflow`](https://www.nextflow.io/docs/latest/getstarted.html#installation) (`>=21.04.0`) 2. Install any of [`Docker`](https://docs.docker.com/engine/installation/), [`Singularity`](https://www.sylabs.io/guides/3.0/user-guide/), [`Podman`](https://podman.io/), [`Shifter`](https://nersc.gitlab.io/development/shifter/how-to-use/) or [`Charliecloud`](https://hpc.github.io/charliecloud/) for full pipeline reproducibility _(please only use [`Conda`](https://conda.io/miniconda.html) as a last resort; see [docs](https://nf-co.re/usage/configuration#basic-configuration-profiles))_ From 007503b569cf004aaa5f715dad85f39b88a08a16 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 28 Oct 2021 11:24:16 +0100 Subject: [PATCH 655/675] Test schema change --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 93eb050c..fee8f209 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -346,7 +346,7 @@ "fa_icon": "fas fa-users-cog" }, "hostnames": { - "type": "string", + "type": "object", "description": "Institutional configs hostname.", "hidden": true, "fa_icon": "fas fa-users-cog" From 8c9ac3e4bb334f2499e5e9dc06363076798100a9 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 28 Oct 2021 11:24:16 +0100 Subject: [PATCH 656/675] Revert "Test schema change" This reverts commit 007503b569cf004aaa5f715dad85f39b88a08a16. --- nextflow_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index fee8f209..93eb050c 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -346,7 +346,7 @@ "fa_icon": "fas fa-users-cog" }, "hostnames": { - "type": "object", + "type": "string", "description": "Institutional configs hostname.", "hidden": true, "fa_icon": "fas fa-users-cog" From 3d2a67345f5c0663f71a22af6fc9ac3221d64d9a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 28 Oct 2021 19:01:14 +0100 Subject: [PATCH 657/675] Switched to nf-core bedtools genome cov scale --- modules.json | 3 + modules/local/bedtools_genomecov_scale.nf | 38 --------- .../modules/bedtools/genomecov/functions.nf | 78 +++++++++++++++++++ .../modules/bedtools/genomecov/main.nf | 68 ++++++++++++++++ .../modules/bedtools/genomecov/meta.yml | 51 ++++++++++++ 5 files changed, 200 insertions(+), 38 deletions(-) delete mode 100644 modules/local/bedtools_genomecov_scale.nf create mode 100644 modules/nf-core/modules/bedtools/genomecov/functions.nf create mode 100644 modules/nf-core/modules/bedtools/genomecov/main.nf create mode 100644 modules/nf-core/modules/bedtools/genomecov/meta.yml diff --git a/modules.json b/modules.json index 8c7f2a5b..94bbb3a0 100644 --- a/modules.json +++ b/modules.json @@ -6,6 +6,9 @@ "bedtools/bamtobed": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "bedtools/genomecov": { + "git_sha": "e8b33e6eb1be2a03abdd2c06068f9a5cebc02bb4" + }, "bedtools/intersect": { "git_sha": "49da8642876ae4d91128168cd0db4f1c858d7792" }, diff --git a/modules/local/bedtools_genomecov_scale.nf b/modules/local/bedtools_genomecov_scale.nf deleted file mode 100644 index 43bec544..00000000 --- a/modules/local/bedtools_genomecov_scale.nf +++ /dev/null @@ -1,38 +0,0 @@ -// Import generic module functions -include { initOptions; saveFiles; getSoftwareName } from './common/functions' - -params.options = [:] -options = initOptions(params.options) - -process BEDTOOLS_GENOMECOV_SCALE { - tag "$meta.id" - label 'process_high' - publishDir "${params.outdir}", - mode: params.publish_dir_mode, - saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), publish_id:meta.id) } - - conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) - if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { - container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" - } else { - container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" - } - - input: - tuple val(meta), path(bam), val(scale) - - output: - tuple val(meta), path("*.bedGraph"), emit: bedgraph - path "*.version.txt" , emit: version - - script: - def software = getSoftwareName(task.process) - def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" - - """ - bedtools genomecov -ibam $bam $options.args -bg -scale $scale \\ - | bedtools sort > ${prefix}.bedGraph - - bedtools --version | sed -e "s/bedtools v//g" > ${software}.version.txt - """ -} diff --git a/modules/nf-core/modules/bedtools/genomecov/functions.nf b/modules/nf-core/modules/bedtools/genomecov/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/bedtools/genomecov/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/bedtools/genomecov/main.nf b/modules/nf-core/modules/bedtools/genomecov/main.nf new file mode 100644 index 00000000..52f37f23 --- /dev/null +++ b/modules/nf-core/modules/bedtools/genomecov/main.nf @@ -0,0 +1,68 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BEDTOOLS_GENOMECOV { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" + } + + input: + tuple val(meta), path(intervals), val(scale) + path sizes + val extension + + output: + tuple val(meta), path("*.${extension}"), emit: genomecov + path "versions.yml" , emit: versions + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + def args_token = options.args.tokenize() + def args = options.args + args += (scale > 0 && scale != 1) ? " -scale $scale" : "" + + if (!args_token.contains('-bg') && (scale > 0 && scale != 1)) { + args += " -bg" + } + + if (intervals.name =~ /\.bam/) { + """ + bedtools \\ + genomecov \\ + -ibam $intervals \\ + $args \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(bedtools --version | sed -e "s/bedtools v//g") + END_VERSIONS + """ + } else { + """ + bedtools \\ + genomecov \\ + -i $intervals \\ + -g $sizes \\ + $args \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(bedtools --version | sed -e "s/bedtools v//g") + END_VERSIONS + """ + } +} diff --git a/modules/nf-core/modules/bedtools/genomecov/meta.yml b/modules/nf-core/modules/bedtools/genomecov/meta.yml new file mode 100644 index 00000000..0713e95b --- /dev/null +++ b/modules/nf-core/modules/bedtools/genomecov/meta.yml @@ -0,0 +1,51 @@ +name: bedtools_genomecov +description: Computes histograms (default), per-base reports (-d) and BEDGRAPH (-bg) summaries of feature coverage (e.g., aligned sequences) for a given genome. +keywords: + - bed + - bam + - genomecov +tools: + - bedtools: + description: | + A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. + documentation: https://bedtools.readthedocs.io/en/latest/content/tools/genomecov.html + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file + description: BAM/BED/GFF/VCF + pattern: "*.{bam|bed|gff|vcf}" + - scale: + type: value + description: Number containing the scale factor for the output. Set to 1 to disable. Setting to a value other than 1 will also get the -bg bedgraph output format as this is required for this command switch + - sizes: + type: file + description: Tab-delimited table of chromosome names in the first column and chromosome sizes in the second column + - extension: + type: string + description: Extension of the output file (e. g., ".bg", ".bedgraph", ".txt", ".tab", etc.) It is set arbitrarily by the user and corresponds to the file format which depends on arguments. +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - genomecov: + type: file + description: Computed genome coverage file + pattern: "*.${extension}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@Emiller88" + - "@sruthipsuresh" + - "@drpatelh" + - "@sidorov-si" + - "@chris-cheshire" From 4a3c148db4d0a07174907321e7ced09660a8d2dc Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 29 Oct 2021 08:33:59 +0100 Subject: [PATCH 658/675] Added bedtools sort --- .../modules/bedtools/sort/functions.nf | 78 +++++++++++++++++++ modules/nf-core/modules/bedtools/sort/main.nf | 43 ++++++++++ .../nf-core/modules/bedtools/sort/meta.yml | 39 ++++++++++ 3 files changed, 160 insertions(+) create mode 100644 modules/nf-core/modules/bedtools/sort/functions.nf create mode 100644 modules/nf-core/modules/bedtools/sort/main.nf create mode 100644 modules/nf-core/modules/bedtools/sort/meta.yml diff --git a/modules/nf-core/modules/bedtools/sort/functions.nf b/modules/nf-core/modules/bedtools/sort/functions.nf new file mode 100644 index 00000000..85628ee0 --- /dev/null +++ b/modules/nf-core/modules/bedtools/sort/functions.nf @@ -0,0 +1,78 @@ +// +// Utility functions used in nf-core DSL2 module files +// + +// +// Extract name of software tool from process name using $task.process +// +def getSoftwareName(task_process) { + return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase() +} + +// +// Extract name of module from process name using $task.process +// +def getProcessName(task_process) { + return task_process.tokenize(':')[-1] +} + +// +// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules +// +def initOptions(Map args) { + def Map options = [:] + options.args = args.args ?: '' + options.args2 = args.args2 ?: '' + options.args3 = args.args3 ?: '' + options.publish_by_meta = args.publish_by_meta ?: [] + options.publish_dir = args.publish_dir ?: '' + options.publish_files = args.publish_files + options.suffix = args.suffix ?: '' + return options +} + +// +// Tidy up and join elements of a list to return a path string +// +def getPathFromList(path_list) { + def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries + paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes + return paths.join('/') +} + +// +// Function to save/publish module results +// +def saveFiles(Map args) { + def ioptions = initOptions(args.options) + def path_list = [ ioptions.publish_dir ?: args.publish_dir ] + + // Do not publish versions.yml unless running from pytest workflow + if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) { + return null + } + if (ioptions.publish_by_meta) { + def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta + for (key in key_list) { + if (args.meta && key instanceof String) { + def path = key + if (args.meta.containsKey(key)) { + path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key] + } + path = path instanceof String ? path : '' + path_list.add(path) + } + } + } + if (ioptions.publish_files instanceof Map) { + for (ext in ioptions.publish_files) { + if (args.filename.endsWith(ext.key)) { + def ext_list = path_list.collect() + ext_list.add(ext.value) + return "${getPathFromList(ext_list)}/$args.filename" + } + } + } else if (ioptions.publish_files == null) { + return "${getPathFromList(path_list)}/$args.filename" + } +} diff --git a/modules/nf-core/modules/bedtools/sort/main.nf b/modules/nf-core/modules/bedtools/sort/main.nf new file mode 100644 index 00000000..b66d592e --- /dev/null +++ b/modules/nf-core/modules/bedtools/sort/main.nf @@ -0,0 +1,43 @@ +// Import generic module functions +include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions' + +params.options = [:] +options = initOptions(params.options) + +process BEDTOOLS_SORT { + tag "$meta.id" + label 'process_medium' + publishDir "${params.outdir}", + mode: params.publish_dir_mode, + saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) } + + conda (params.enable_conda ? "bioconda::bedtools=2.30.0" : null) + if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) { + container "https://depot.galaxyproject.org/singularity/bedtools:2.30.0--hc088bd4_0" + } else { + container "quay.io/biocontainers/bedtools:2.30.0--hc088bd4_0" + } + + input: + tuple val(meta), path(bed) + val extension + + output: + tuple val(meta), path("*.${extension}"), emit: sort + path "versions.yml" , emit: versions + + script: + def prefix = options.suffix ? "${meta.id}${options.suffix}" : "${meta.id}" + """ + bedtools \\ + sort \\ + -i $bed \\ + $options.args \\ + > ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + ${getProcessName(task.process)}: + ${getSoftwareName(task.process)}: \$(bedtools --version | sed -e "s/bedtools v//g") + END_VERSIONS + """ +} diff --git a/modules/nf-core/modules/bedtools/sort/meta.yml b/modules/nf-core/modules/bedtools/sort/meta.yml new file mode 100644 index 00000000..5b8b41d7 --- /dev/null +++ b/modules/nf-core/modules/bedtools/sort/meta.yml @@ -0,0 +1,39 @@ +name: bedtools_sort +description: Sorts a feature file by chromosome and other criteria. +keywords: + - bed + - sort +tools: + - bedtools: + description: | + A set of tools for genomic analysis tasks, specifically enabling genome arithmetic (merge, count, complement) on various file types. + documentation: https://bedtools.readthedocs.io/en/latest/content/tools/sort.html + licence: ['MIT'] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: Input BED file + pattern: "*.{bed}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bed: + type: file + description: Sorted BED file + pattern: "*.{bed}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@Emiller88" + - "@sruthipsuresh" + - "@drpatelh" From 30d479643f8420790f9693d01a8b30c49f119b15 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 29 Oct 2021 08:34:11 +0100 Subject: [PATCH 659/675] Switching to nf-core bedtools genomecov --- conf/modules.config | 6 ++++ modules.json | 3 ++ workflows/cutandrun.nf | 69 ++++++++++++++++++++++++------------------ 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 44349822..4c37eb19 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -141,7 +141,13 @@ params { */ "bedtools_genomecov_bedgraph" { + //publish_dir = "03_peak_calling/01_bam_to_bedgraph" + publish_files = false + } + + "sort_bedgraph" { publish_dir = "03_peak_calling/01_bam_to_bedgraph" + suffix = ".sorted" } "ucsc_bedclip" { diff --git a/modules.json b/modules.json index 94bbb3a0..d1bbd9af 100644 --- a/modules.json +++ b/modules.json @@ -15,6 +15,9 @@ "bedtools/merge": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, + "bedtools/sort": { + "git_sha": "3aacd46da2b221ed47aaa05c413a828538d2c2ae" + }, "bowtie2/align": { "git_sha": "e937c7950af70930d1f34bb961403d9d2aa81c7d" }, diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index b0a82a89..56ee48c5 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -292,21 +292,19 @@ multiqc_options.args += params.multiqc_title ? " --title \"$params.multiqc_title /* * MODULES */ -include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) -include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) -include { BEDTOOLS_GENOMECOV_SCALE } from "../modules/local/bedtools_genomecov_scale" addParams( options: modules["bedtools_genomecov_bedgraph"] ) -include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_name_peak_bed"] ) -include { IGV_SESSION } from "../modules/local/python/igv_session" addParams( options: modules["igv"] ) -include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_edit_peak_bed"] ) -include { AWK as AWK_FRAG_BIN } from "../modules/local/linux/awk" addParams( options: modules["awk_frag_bin"] ) -include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/samtools_custom_view" addParams( options: modules["samtools_frag_len"] ) -include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) -include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) -include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -include { EXPORT_META as EXPORT_META_CTRL } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) -include { GENERATE_REPORTS } from "../modules/local/python/generate_reports" addParams( options: modules["generate_reports"] ) -include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) -include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) +include { INPUT_CHECK } from "../subworkflows/local/input_check" addParams( options: [:] ) +include { AWK as AWK_NAME_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_name_peak_bed"] ) +include { IGV_SESSION } from "../modules/local/python/igv_session" addParams( options: modules["igv"] ) +include { AWK as AWK_EDIT_PEAK_BED } from "../modules/local/linux/awk" addParams( options: modules["awk_edit_peak_bed"] ) +include { AWK as AWK_FRAG_BIN } from "../modules/local/linux/awk" addParams( options: modules["awk_frag_bin"] ) +include { SAMTOOLS_CUSTOMVIEW } from "../modules/local/samtools_custom_view" addParams( options: modules["samtools_frag_len"] ) +include { CALCULATE_FRIP } from "../modules/local/modules/calculate_frip/main" addParams( options: modules["calc_frip"] ) +include { CALCULATE_PEAK_REPROD } from "../modules/local/modules/calculate_peak_reprod/main" addParams( options: modules["calc_peak_repro"] ) +include { EXPORT_META } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { EXPORT_META as EXPORT_META_CTRL } from "../modules/local/export_meta" addParams( options: modules["export_meta"] ) +include { GENERATE_REPORTS } from "../modules/local/python/generate_reports" addParams( options: modules["generate_reports"] ) +include { GET_SOFTWARE_VERSIONS } from "../modules/local/get_software_versions" addParams( options: [publish_files : ["csv":""]] ) +include { MULTIQC } from "../modules/local/multiqc" addParams( options: multiqc_options ) /* * SUBWORKFLOW: Consisting of a mix of local and nf-core/modules @@ -332,15 +330,18 @@ include { ANNOTATE_META_CSV as ANNOTATE_PEAK_REPRO_META } from "../subworkflows /* * MODULES */ -include { UCSC_BEDCLIP } from "../modules/nf-core/modules/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) -include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/modules/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) -include { SEACR_CALLPEAK } from "../modules/nf-core/modules/seacr/callpeak/main" addParams( options: modules["seacr"] ) -include { SEACR_CALLPEAK as SEACR_CALLPEAK_NOIGG } from "../modules/nf-core/modules/seacr/callpeak/main" addParams( options: modules["seacr"] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) -include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) -include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) -include { BEDTOOLS_INTERSECT } from "../modules/nf-core/modules/bedtools/intersect/main.nf" addParams( options: bedtools_intersect_options ) +include { CAT_FASTQ } from "../modules/nf-core/modules/cat/fastq/main" addParams( options: cat_fastq_options ) +include { BEDTOOLS_GENOMECOV } from "../modules/nf-core/modules/bedtools/genomecov/main" addParams( options: modules["bedtools_genomecov_bedgraph"] ) +include { BEDTOOLS_SORT } from "../modules/nf-core/modules/bedtools/sort/main" addParams( options: modules["sort_bedgraph"] ) +include { UCSC_BEDCLIP } from "../modules/nf-core/modules/ucsc/bedclip/main" addParams( options: modules["ucsc_bedclip"] ) +include { UCSC_BEDGRAPHTOBIGWIG } from "../modules/nf-core/modules/ucsc/bedgraphtobigwig/main" addParams( options: modules["ucsc_bedgraphtobigwig"] ) +include { SEACR_CALLPEAK } from "../modules/nf-core/modules/seacr/callpeak/main" addParams( options: modules["seacr"] ) +include { SEACR_CALLPEAK as SEACR_CALLPEAK_NOIGG } from "../modules/nf-core/modules/seacr/callpeak/main" addParams( options: modules["seacr"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_GENE } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_gene"] ) +include { DEEPTOOLS_COMPUTEMATRIX as DEEPTOOLS_COMPUTEMATRIX_PEAKS } from "../modules/nf-core/modules/deeptools/computematrix/main" addParams( options: modules["dt_compute_mat_peaks"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_GENE } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_gene"] ) +include { DEEPTOOLS_PLOTHEATMAP as DEEPTOOLS_PLOTHEATMAP_PEAKS } from "../modules/nf-core/modules/deeptools/plotheatmap/main" addParams( options: modules["dt_plotheatmap_peaks"] ) +include { BEDTOOLS_INTERSECT } from "../modules/nf-core/modules/bedtools/intersect/main.nf" addParams( options: bedtools_intersect_options ) /* * SUBWORKFLOW: Consisting entirely of nf-core/modules @@ -613,17 +614,27 @@ workflow CUTANDRUN { /* * MODULE: Convert bam files to bedgraph */ - BEDTOOLS_GENOMECOV_SCALE ( - ch_samtools_bam_scale + BEDTOOLS_GENOMECOV ( + ch_samtools_bam_scale, + ch_dummy_file, + "bedgraph" ) //EXAMPLE CHANNEL STRUCT: [META], BEDGRAPH] - //BEDTOOLS_GENOMECOV_SCALE.out.bedgraph | view + //BEDTOOLS_GENOMECOV.out.genomecov | view + + /* + * MODULE: Sort bedgraph + */ + BEDTOOLS_SORT ( + BEDTOOLS_GENOMECOV.out.genomecov, + "bedgraph" + ) /* * MODULE: Clip off bedgraphs so none overlap beyond chromosome edge */ UCSC_BEDCLIP ( - BEDTOOLS_GENOMECOV_SCALE.out.bedgraph, + BEDTOOLS_SORT.out.sort, PREPARE_GENOME.out.chrom_sizes ) //EXAMPLE CHANNEL STRUCT: [META], BEDGRAPH] @@ -643,7 +654,7 @@ workflow CUTANDRUN { /* * CHANNEL: Separate bedgraphs into target/control */ - BEDTOOLS_GENOMECOV_SCALE.out.bedgraph.branch { it -> + BEDTOOLS_SORT.out.sort.branch { it -> target: it[0].group != "igg" control: it[0].group == "igg" } From 523b941bd1b1ab5ad7090c51a8d7e7f44c023cf1 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 29 Oct 2021 10:23:47 +0100 Subject: [PATCH 660/675] Added explicit dask data type resolution --- bin/peak_reproducability.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/peak_reproducability.py b/bin/peak_reproducability.py index 003bde10..64f03dd9 100755 --- a/bin/peak_reproducability.py +++ b/bin/peak_reproducability.py @@ -35,7 +35,7 @@ print('Reading file') # Read file in using dask -ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','key','a_name','b_name','count']) +ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','key','a_name','b_name','count'], dtype={'overlap_1': 'float64'}) # Find number of files numfiles = ddf_inter['b_name'].max().compute() @@ -44,7 +44,7 @@ if isinstance(numfiles, str): print('Detected single file, reloading table') numfiles = 1 - ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','overlap_2','key','name','count']) + ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','overlap_2','key','name','count'], dtype={'overlap_1': 'float64', 'overlap_2': 'float64'}) print('Number of files: ' + str(numfiles)) From d1a7360a8b4d11a00d1e6b4f98f1db7725d952d0 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 29 Oct 2021 10:50:26 +0100 Subject: [PATCH 661/675] Updated tests --- tests/test_verify_output_only_peak_calling.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_verify_output_only_peak_calling.yml b/tests/test_verify_output_only_peak_calling.yml index ad1d27a3..8fef6368 100644 --- a/tests/test_verify_output_only_peak_calling.yml +++ b/tests/test_verify_output_only_peak_calling.yml @@ -5,8 +5,8 @@ - verify_output_peak_calling - verify_output_peak_calling_only_peak_calling files: - - path: results/03_peak_calling/01_bam_to_bedgraph/h3k27me3_R1.bedGraph - - path: results/03_peak_calling/01_bam_to_bedgraph/igg_R1.bedGraph + - path: results/03_peak_calling/01_bam_to_bedgraph/h3k27me3_R1.sorted.bedGraph + - path: results/03_peak_calling/01_bam_to_bedgraph/igg_R1.sorted.bedGraph - path: results/03_peak_calling/02_clip_bed/h3k27me3_R1.clipped.bedGraph - path: results/03_peak_calling/02_clip_bed/igg_R1.clipped.bedGraph - path: results/03_peak_calling/03_bed_to_bigwig/h3k27me3_R1.bigWig From 8c0d75cfa946bd7b0b17b64456c7beb7f5bd33c4 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 29 Oct 2021 11:14:40 +0100 Subject: [PATCH 662/675] fixed tests --- workflows/cutandrun.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/cutandrun.nf b/workflows/cutandrun.nf index 56ee48c5..b3767ae8 100644 --- a/workflows/cutandrun.nf +++ b/workflows/cutandrun.nf @@ -617,7 +617,7 @@ workflow CUTANDRUN { BEDTOOLS_GENOMECOV ( ch_samtools_bam_scale, ch_dummy_file, - "bedgraph" + "bedGraph" ) //EXAMPLE CHANNEL STRUCT: [META], BEDGRAPH] //BEDTOOLS_GENOMECOV.out.genomecov | view @@ -627,7 +627,7 @@ workflow CUTANDRUN { */ BEDTOOLS_SORT ( BEDTOOLS_GENOMECOV.out.genomecov, - "bedgraph" + "bedGraph" ) /* From 2a554dd903f82bdcd27aa7670e406a163da43b9a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Tue, 2 Nov 2021 11:34:22 +0000 Subject: [PATCH 663/675] Fixed all dtypes for peak_repo script --- bin/peak_reproducability.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bin/peak_reproducability.py b/bin/peak_reproducability.py index 64f03dd9..f6e52900 100755 --- a/bin/peak_reproducability.py +++ b/bin/peak_reproducability.py @@ -35,7 +35,8 @@ print('Reading file') # Read file in using dask -ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','key','a_name','b_name','count'], dtype={'overlap_1': 'float64'}) +ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','key','a_name','b_name','count'], + dtype={'chrom':str,'start':np.int64,'end':np.int64,'overlap_1':np.float64,'key':np.float64,'a_name':str,'b_name':str,'count':np.int64}) # Find number of files numfiles = ddf_inter['b_name'].max().compute() @@ -44,7 +45,8 @@ if isinstance(numfiles, str): print('Detected single file, reloading table') numfiles = 1 - ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','overlap_2','key','name','count'], dtype={'overlap_1': 'float64', 'overlap_2': 'float64'}) + ddf_inter = dd.read_csv(args.intersect, sep='\t', header=None, names=['chrom','start','end','overlap_1','overlap_2','key','name','count'], + dtype={'chrom':str,'start':np.int64,'end':np.int64,'overlap_1':np.float64,'overlap_2':np.float64,'key':str,'name':str,'count':np.int64}) print('Number of files: ' + str(numfiles)) From 4a10025ce528796fe7c44214672b9ec18620e59a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 08:58:04 +0000 Subject: [PATCH 664/675] Added crick logo --- README.md | 2 ++ assets/crick_logo.png | Bin 0 -> 237846 bytes 2 files changed, 2 insertions(+) create mode 100644 assets/crick_logo.png diff --git a/README.md b/README.md index ca9aad6b..823943de 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,8 @@ The nf-core/cutandrun pipeline comes with documentation about the pipeline [usag ## Credits +![The Francis Crick Institute](crick_logo.png) + nf-core/cutandrun was originally written by Chris Cheshire ([@chris-cheshire](https://github.com/chris-cheshire)) and Charlotte West ([@charlotte-west](https://github.com/charlotte-west)) from [Luscombe Lab](https://www.crick.ac.uk/research/labs/nicholas-luscombe) at [The Francis Crick Institute](https://www.crick.ac.uk/), London, UK. The pipeline structure and parts of the downstream analysis were adapted from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). diff --git a/assets/crick_logo.png b/assets/crick_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6759e8e8cffa88d624e57847f3c8831492b60889 GIT binary patch literal 237846 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%0A1gN9 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 literal 0 HcmV?d00001 From 866e361f9205a037f30e4f4afa89f1ecf42bde18 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 09:04:05 +0000 Subject: [PATCH 665/675] Logo fixes --- README.md | 4 ++-- {assets => docs/images}/crick_logo.png | Bin 2 files changed, 2 insertions(+), 2 deletions(-) rename {assets => docs/images}/crick_logo.png (100%) diff --git a/README.md b/README.md index 823943de..4a924d1b 100644 --- a/README.md +++ b/README.md @@ -76,14 +76,14 @@ The nf-core/cutandrun pipeline comes with documentation about the pipeline [usag ## Credits -![The Francis Crick Institute](crick_logo.png) - nf-core/cutandrun was originally written by Chris Cheshire ([@chris-cheshire](https://github.com/chris-cheshire)) and Charlotte West ([@charlotte-west](https://github.com/charlotte-west)) from [Luscombe Lab](https://www.crick.ac.uk/research/labs/nicholas-luscombe) at [The Francis Crick Institute](https://www.crick.ac.uk/), London, UK. The pipeline structure and parts of the downstream analysis were adapted from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). We thank Harshil Patel ([@drpatelh](https://github.com/drpatelh)) and everyone in the Luscombe Lab ([@luslab](https://github.com/luslab)) for their extensive assistance in the development of this pipeline. +The Francis Crick Institute + ## Contributions and Support If you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md). diff --git a/assets/crick_logo.png b/docs/images/crick_logo.png similarity index 100% rename from assets/crick_logo.png rename to docs/images/crick_logo.png From f545b00392741ec7c074ad0a0cc17715f3d95db7 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 09:10:18 +0000 Subject: [PATCH 666/675] Logo fixes --- README.md | 2 +- docs/images/crick_logo.png | Bin 237846 -> 83024 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a924d1b..287fc3f0 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ The pipeline structure and parts of the downstream analysis were adapted from th We thank Harshil Patel ([@drpatelh](https://github.com/drpatelh)) and everyone in the Luscombe Lab ([@luslab](https://github.com/luslab)) for their extensive assistance in the development of this pipeline. -The Francis Crick Institute +![[The Francis Crick Institute](https://www.crick.ac.uk/)](docs/images/crick_logo.png) ## Contributions and Support diff --git a/docs/images/crick_logo.png b/docs/images/crick_logo.png index 6759e8e8cffa88d624e57847f3c8831492b60889..22b27bf584d03933d08119ef024e89254730c818 100644 GIT binary patch delta 49953 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�)1&^dDI+A{YFz2CX~y;U4;z2v^azQu2m@&AZqU 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 mZlG_vt#gYZP`i<^*?!wV<{=-=y1AeQ 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 literal 237846 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%0A1gN9 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 From d197e3d321b4bb5eed5f959def42218dd0ed77ae Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 09:22:12 +0000 Subject: [PATCH 667/675] Test fix for input check bug --- subworkflows/local/input_check.nf | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index a098b405..448c7578 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -4,9 +4,8 @@ params.options = [:] -include { - SAMPLESHEET_CHECK; - get_samplesheet_paths } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) +include { SAMPLESHEET_CHECK } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) +include { get_samplesheet_paths } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) workflow INPUT_CHECK { take: From 05e328f69d95c4727e75da28e2bda6f6daa9fd72 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 09:32:19 +0000 Subject: [PATCH 668/675] test --- modules/local/python/samplesheet_check.nf | 24 ----------------------- subworkflows/local/input_check.nf | 4 ++-- subworkflows/local/test.nf | 23 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 26 deletions(-) create mode 100644 subworkflows/local/test.nf diff --git a/modules/local/python/samplesheet_check.nf b/modules/local/python/samplesheet_check.nf index 89547616..87ee722f 100644 --- a/modules/local/python/samplesheet_check.nf +++ b/modules/local/python/samplesheet_check.nf @@ -29,27 +29,3 @@ process SAMPLESHEET_CHECK { check_samplesheet.py $samplesheet samplesheet.valid.csv $params.igg_control """ } - -// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] -def get_samplesheet_paths(LinkedHashMap row) { - def meta = [:] - meta.id = row.id - meta.group = row.group - meta.replicate = row.replicate.toInteger() - meta.control_group = row.control_group.toInteger() - meta.single_end = row.single_end.toBoolean() - - def array = [] - if (!file(row.fastq_1).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" - } - if (meta.single_end) { - array = [ meta, [ file(row.fastq_1) ] ] - } else { - if (!file(row.fastq_2).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" - } - array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] - } - return array -} diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index 448c7578..fc4b96f2 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -4,8 +4,8 @@ params.options = [:] -include { SAMPLESHEET_CHECK } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) -include { get_samplesheet_paths } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) +include {get_samplesheet_paths } from "./test" +include {SAMPLESHEET_CHECK } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) workflow INPUT_CHECK { take: diff --git a/subworkflows/local/test.nf b/subworkflows/local/test.nf new file mode 100644 index 00000000..93b8aaad --- /dev/null +++ b/subworkflows/local/test.nf @@ -0,0 +1,23 @@ +// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] +def get_samplesheet_paths(LinkedHashMap row) { + def meta = [:] + meta.id = row.id + meta.group = row.group + meta.replicate = row.replicate.toInteger() + meta.control_group = row.control_group.toInteger() + meta.single_end = row.single_end.toBoolean() + + def array = [] + if (!file(row.fastq_1).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" + } + if (meta.single_end) { + array = [ meta, [ file(row.fastq_1) ] ] + } else { + if (!file(row.fastq_2).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" + } + array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] + } + return array +} \ No newline at end of file From 278d59f19c3bef2762cfaa8fc9239683fa2dafcb Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 10:16:06 +0000 Subject: [PATCH 669/675] Fixed sample sheet check error --- subworkflows/local/input_check.nf | 27 +++++++++++++++++++++++++-- subworkflows/local/test.nf | 23 ----------------------- 2 files changed, 25 insertions(+), 25 deletions(-) delete mode 100644 subworkflows/local/test.nf diff --git a/subworkflows/local/input_check.nf b/subworkflows/local/input_check.nf index fc4b96f2..1ee3ac36 100644 --- a/subworkflows/local/input_check.nf +++ b/subworkflows/local/input_check.nf @@ -4,8 +4,7 @@ params.options = [:] -include {get_samplesheet_paths } from "./test" -include {SAMPLESHEET_CHECK } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) +include { SAMPLESHEET_CHECK } from "../../modules/local/python/samplesheet_check" addParams( options: params.options ) workflow INPUT_CHECK { take: @@ -20,3 +19,27 @@ workflow INPUT_CHECK { emit: reads // channel: [ val(meta), [ reads ] ] } + +// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] +def get_samplesheet_paths(LinkedHashMap row) { + def meta = [:] + meta.id = row.id + meta.group = row.group + meta.replicate = row.replicate.toInteger() + meta.control_group = row.control_group.toInteger() + meta.single_end = row.single_end.toBoolean() + + def array = [] + if (!file(row.fastq_1).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" + } + if (meta.single_end) { + array = [ meta, [ file(row.fastq_1) ] ] + } else { + if (!file(row.fastq_2).exists()) { + exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" + } + array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] + } + return array +} diff --git a/subworkflows/local/test.nf b/subworkflows/local/test.nf deleted file mode 100644 index 93b8aaad..00000000 --- a/subworkflows/local/test.nf +++ /dev/null @@ -1,23 +0,0 @@ -// Function to get list of [ meta, [ fastq_1, fastq_2 ] ] -def get_samplesheet_paths(LinkedHashMap row) { - def meta = [:] - meta.id = row.id - meta.group = row.group - meta.replicate = row.replicate.toInteger() - meta.control_group = row.control_group.toInteger() - meta.single_end = row.single_end.toBoolean() - - def array = [] - if (!file(row.fastq_1).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 1 FastQ file does not exist!\n${row.fastq_1}" - } - if (meta.single_end) { - array = [ meta, [ file(row.fastq_1) ] ] - } else { - if (!file(row.fastq_2).exists()) { - exit 1, "ERROR: Please check input samplesheet -> Read 2 FastQ file does not exist!\n${row.fastq_2}" - } - array = [ meta, [ file(row.fastq_1), file(row.fastq_2) ] ] - } - return array -} \ No newline at end of file From c629e6f9ea2ecf290ad6e61ecf41004523f62080 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 11:25:49 +0000 Subject: [PATCH 670/675] Removed multiqc comments --- assets/multiqc_config.yaml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/assets/multiqc_config.yaml b/assets/multiqc_config.yaml index 3a4412fb..79e96ada 100644 --- a/assets/multiqc_config.yaml +++ b/assets/multiqc_config.yaml @@ -57,21 +57,7 @@ section_comments: - It can be due to the Tn5 preference. - What you might be detecting is the 10-bp periodicity that shows up as a sawtooth pattern in the length distribution. If so, this is normal and will not affect alignment or peak calling. In any case we do not recommend trimming as the bowtie2 parameters that we list will give accurate mapping information without trimming. -# fastqc_config: -# fastqc_theoretical_gc: "hg38_genome" - -# extra_fn_clean_exts: -# - ".spikein.bowtie2" -# - "_processedFile" -# extra_fn_clean_trim: -# - "#" -# - ".myext" - # Customise the module search patterns to speed up execution time -# - Skip module sub-tools that we are not interested in -# - Replace file-content searching with filename pattern searching -# - Don't add anything that is the same as the MultiQC default -# See https://multiqc.info/docs/#optimise-file-search-patterns for details sp: cutadapt: fn: '*trimming_report.txt' From 60b51f39fd2d042c394fbb6532ede5babfc40c76 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Thu, 4 Nov 2021 11:28:09 +0000 Subject: [PATCH 671/675] Cleaned up gitignore --- .gitignore | 7 ------- dev/docker/static_reports/test_output/_dummy.txt | 0 2 files changed, 7 deletions(-) delete mode 100644 dev/docker/static_reports/test_output/_dummy.txt diff --git a/.gitignore b/.gitignore index a5ed45b4..441060fb 100644 --- a/.gitignore +++ b/.gitignore @@ -13,12 +13,5 @@ testing* R_sessionInfo.log -dev/docker/static_reports/test_data/* -dev/docker/static_reports/test_output/* -!dev/docker/static_reports/test_data/_dummy.txt -!dev/docker/static_reports/test_output/_dummy.txt - -!tests/data/ - .vscode/ profile.svg diff --git a/dev/docker/static_reports/test_output/_dummy.txt b/dev/docker/static_reports/test_output/_dummy.txt deleted file mode 100644 index e69de29b..00000000 From e2186b0d711f6c705a7bdff66f38c41f106d5ebf Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 5 Nov 2021 13:56:13 +0000 Subject: [PATCH 672/675] Added initial change log --- CHANGELOG.md | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a5c32db..ed5a5fa2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,33 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0.0 - [date] +## [1.0.0] - 2021-11-05 Initial release of nf-core/cutandrun, created with the [nf-core](https://nf-co.re/) template. -### `Added` +This pipeline is a best-practice bioinformatic analysis pipeline for CUT&Run and CUT&Tag experimental protocols that where developed to study protein-DNA interactions and epigenomic profiling. -### `Fixed` +nf-core/cutandrun was originally written by Chris Cheshire ([@chris-cheshire](https://github.com/chris-cheshire)) and Charlotte West ([@charlotte-west](https://github.com/charlotte-west)) from [Luscombe Lab](https://www.crick.ac.uk/research/labs/nicholas-luscombe) at [The Francis Crick Institute](https://www.crick.ac.uk/), London, UK. -### `Dependencies` +The pipeline structure and parts of the downstream analysis were adapted from the original CUT&Tag analysis [protocol](https://yezhengstat.github.io/CUTTag_tutorial/) from the [Henikoff Lab](https://research.fredhutch.org/henikoff/en.html). -### `Deprecated` +We thank Harshil Patel ([@drpatelh](https://github.com/drpatelh)) and everyone in the Luscombe Lab ([@luslab](https://github.com/luslab)) for their extensive assistance in the development of this pipeline. + +### Pipeline summary + +1. Check input files +2. Merge re-sequenced FastQ files ([`cat`](http://www.linfo.org/cat.html)) +3. Read QC ([`FastQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) +4. Adapter and quality trimming ([`Trim Galore!`](https://www.bioinformatics.babraham.ac.uk/projects/trim_galore/)) +5. Alignment to both target and spike-in genomes ([`Bowtie 2`](http://bowtie-bio.sourceforge.net/bowtie2/index.shtml)) +6. Filter on quality, sort and index alignments ([`samtools`](https://sourceforge.net/projects/samtools/files/samtools/)) +7. Duplicate read marking ([`picard`](https://broadinstitute.github.io/picard/)) +8. Create bedGraph files ([`bedtools`](https://github.com/arq5x/bedtools2/) +9. Create bigWig coverage files ([`bedGraphToBigWig`](http://hgdownload.soe.ucsc.edu/admin/exe/)) +10. Peak calling specifically tailored for low background noise experiments ([`SEACR`](https://github.com/FredHutch/SEACR)) +11. Consensus peak merging and reporting ([`bedtools`](https://github.com/arq5x/bedtools2/)) +12. Quality control and analysis: + 1. Alignment, fragment length and peak analysis and replicate reproducibility ([`python`](https://www.python.org/)) + 2. Heatmap peak analysis ([`deepTools`](https://github.com/deeptools/deepTools/)) +13. Genome browser session ([`IGV`](https://software.broadinstitute.org/software/igv/)) +14. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/)) \ No newline at end of file From fd93161ec06304b67d74209ce9e9e3200f3fd0a9 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 5 Nov 2021 13:56:41 +0000 Subject: [PATCH 673/675] Bumped to release version --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 6bb5ee3a..d80b3bfa 100644 --- a/nextflow.config +++ b/nextflow.config @@ -226,7 +226,7 @@ manifest { description = "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis." mainScript = "main.nf" nextflowVersion = '!>=21.04.0' - version = '1.0.0dev' + version = '1.0.0 } // Function to ensure that resource requirements don't go beyond From 260a1bd4df3f57f610f0ba76c40b9b0d0d78df15 Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 5 Nov 2021 14:03:31 +0000 Subject: [PATCH 674/675] Whitespace fixes --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed5a5fa2..85e02ffa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,4 +32,4 @@ We thank Harshil Patel ([@drpatelh](https://github.com/drpatelh)) and everyone i 1. Alignment, fragment length and peak analysis and replicate reproducibility ([`python`](https://www.python.org/)) 2. Heatmap peak analysis ([`deepTools`](https://github.com/deeptools/deepTools/)) 13. Genome browser session ([`IGV`](https://software.broadinstitute.org/software/igv/)) -14. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/)) \ No newline at end of file +14. Present QC for raw read, alignment and duplicate reads ([`MultiQC`](http://multiqc.info/)) From 31a8c317324f20a4abb459fd55c3e67be6be8b8a Mon Sep 17 00:00:00 2001 From: Chris Cheshire Date: Fri, 5 Nov 2021 14:04:38 +0000 Subject: [PATCH 675/675] Syntax fix --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index d80b3bfa..2e50983c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -226,7 +226,7 @@ manifest { description = "Analysis pipeline for CUT&RUN and CUT&TAG experiments that includes sequencing QC, spike-in normalisation, IgG control normalisation, peak calling and downstream peak analysis." mainScript = "main.nf" nextflowVersion = '!>=21.04.0' - version = '1.0.0 + version = '1.0.0' } // Function to ensure that resource requirements don't go beyond
    \n" + for (param in group_params.keySet()) { + summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" + } + summary_section += "
    \n" - for (param in group_params.keySet()) { - summary_section += "
    $param
    ${group_params.get(param) ?: 'N/A'}
    \n" - } - summary_section += "