From 0ceb18220021d666aab61def364add9621789cf5 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 6 Mar 2024 09:18:32 +0100 Subject: [PATCH 01/15] Install utils subworkflows --- modules.json | 15 + .../nf-core/utils_nextflow_pipeline/main.nf | 126 +++++ .../nf-core/utils_nextflow_pipeline/meta.yml | 38 ++ .../tests/main.function.nf.test | 54 +++ .../tests/main.function.nf.test.snap | 20 + .../tests/main.workflow.nf.test | 111 +++++ .../tests/nextflow.config | 9 + .../utils_nextflow_pipeline/tests/tags.yml | 2 + .../nf-core/utils_nfcore_pipeline/main.nf | 440 ++++++++++++++++++ .../nf-core/utils_nfcore_pipeline/meta.yml | 24 + .../tests/main.function.nf.test | 134 ++++++ .../tests/main.function.nf.test.snap | 166 +++++++ .../tests/main.workflow.nf.test | 29 ++ .../tests/main.workflow.nf.test.snap | 19 + .../tests/nextflow.config | 9 + .../utils_nfcore_pipeline/tests/tags.yml | 2 + .../nf-core/utils_nfvalidation_plugin/main.nf | 62 +++ .../utils_nfvalidation_plugin/meta.yml | 44 ++ .../tests/main.nf.test | 200 ++++++++ .../tests/nextflow_schema.json | 96 ++++ .../utils_nfvalidation_plugin/tests/tags.yml | 2 + 21 files changed, 1602 insertions(+) create mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/main.nf create mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/meta.yml create mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test create mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap create mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test create mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config create mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/main.nf create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/meta.yml create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml create mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/main.nf create mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml create mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test create mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json create mode 100644 subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml diff --git a/modules.json b/modules.json index 6f0143db..863e96a1 100644 --- a/modules.json +++ b/modules.json @@ -213,6 +213,21 @@ "branch": "master", "git_sha": "cfd937a668919d948f6fcbf4218e79de50c2f36f", "installed_by": ["subworkflows"] + }, + "utils_nextflow_pipeline": { + "branch": "master", + "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "installed_by": ["subworkflows"] + }, + "utils_nfcore_pipeline": { + "branch": "master", + "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "installed_by": ["subworkflows"] + }, + "utils_nfvalidation_plugin": { + "branch": "master", + "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", + "installed_by": ["subworkflows"] } } } diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf new file mode 100644 index 00000000..ac31f28f --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf @@ -0,0 +1,126 @@ +// +// Subworkflow with functionality that may be useful for any Nextflow pipeline +// + +import org.yaml.snakeyaml.Yaml +import groovy.json.JsonOutput +import nextflow.extension.FilesEx + +/* +======================================================================================== + SUBWORKFLOW DEFINITION +======================================================================================== +*/ + +workflow UTILS_NEXTFLOW_PIPELINE { + + take: + print_version // boolean: print version + dump_parameters // boolean: dump parameters + outdir // path: base directory used to publish pipeline results + check_conda_channels // boolean: check conda channels + + main: + + // + // Print workflow version and exit on --version + // + if (print_version) { + log.info "${workflow.manifest.name} ${getWorkflowVersion()}" + System.exit(0) + } + + // + // Dump pipeline parameters to a JSON file + // + if (dump_parameters && outdir) { + dumpParametersToJSON(outdir) + } + + // + // When running with Conda, warn if channels have not been set-up appropriately + // + if (check_conda_channels) { + checkCondaChannels() + } + + emit: + dummy_emit = true +} + +/* +======================================================================================== + FUNCTIONS +======================================================================================== +*/ + +// +// Generate version string +// +def getWorkflowVersion() { + String version_string = "" + if (workflow.manifest.version) { + def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' + version_string += "${prefix_v}${workflow.manifest.version}" + } + + if (workflow.commitId) { + def git_shortsha = workflow.commitId.substring(0, 7) + version_string += "-g${git_shortsha}" + } + + return version_string +} + +// +// Dump pipeline parameters to a JSON file +// +def dumpParametersToJSON(outdir) { + def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') + def filename = "params_${timestamp}.json" + def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") + def jsonStr = JsonOutput.toJson(params) + temp_pf.text = JsonOutput.prettyPrint(jsonStr) + + FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json") + temp_pf.delete() +} + +// +// When running with -profile conda, warn if channels have not been set-up appropriately +// +def checkCondaChannels() { + 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 + // This channel list is ordered by required channel priority. + def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] + def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean + + // Check that they are in the right order + def channel_priority_violation = false + def n = required_channels_in_order.size() + for (int i = 0; i < n - 1; i++) { + channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) + } + + if (channels_missing | channel_priority_violation) { + 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/\n" + + " The observed channel order is \n" + + " ${channels}\n" + + " but the following channel order is required:\n" + + " ${required_channels_in_order}\n" + + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + } +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/meta.yml b/subworkflows/nf-core/utils_nextflow_pipeline/meta.yml new file mode 100644 index 00000000..e5c3a0a8 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/meta.yml @@ -0,0 +1,38 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "UTILS_NEXTFLOW_PIPELINE" +description: Subworkflow with functionality that may be useful for any Nextflow pipeline +keywords: + - utility + - pipeline + - initialise + - version +components: [] +input: + - print_version: + type: boolean + description: | + Print the version of the pipeline and exit + - dump_parameters: + type: boolean + description: | + Dump the parameters of the pipeline to a JSON file + - output_directory: + type: directory + description: Path to output dir to write JSON file to. + pattern: "results/" + - check_conda_channel: + type: boolean + description: | + Check if the conda channel priority is correct. +output: + - dummy_emit: + type: boolean + description: | + Dummy emit to make nf-core subworkflows lint happy +authors: + - "@adamrtalbot" + - "@drpatelh" +maintainers: + - "@adamrtalbot" + - "@drpatelh" + - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test new file mode 100644 index 00000000..68718e4f --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test @@ -0,0 +1,54 @@ + +nextflow_function { + + name "Test Functions" + script "subworkflows/nf-core/utils_nextflow_pipeline/main.nf" + config "subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config" + tag 'subworkflows' + tag 'utils_nextflow_pipeline' + tag 'subworkflows/utils_nextflow_pipeline' + + test("Test Function getWorkflowVersion") { + + function "getWorkflowVersion" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function dumpParametersToJSON") { + + function "dumpParametersToJSON" + + when { + function { + """ + // define inputs of the function here. Example: + input[0] = "$outputDir" + """.stripIndent() + } + } + + then { + assertAll( + { assert function.success } + ) + } + } + + test("Test Function checkCondaChannels") { + + function "checkCondaChannels" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap new file mode 100644 index 00000000..e3f0baf4 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.function.nf.test.snap @@ -0,0 +1,20 @@ +{ + "Test Function getWorkflowVersion": { + "content": [ + "v9.9.9" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:02:05.308243" + }, + "Test Function checkCondaChannels": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:02:12.425833" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test new file mode 100644 index 00000000..ca964ce8 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/main.workflow.nf.test @@ -0,0 +1,111 @@ +nextflow_workflow { + + name "Test Workflow UTILS_NEXTFLOW_PIPELINE" + script "../main.nf" + config "subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config" + workflow "UTILS_NEXTFLOW_PIPELINE" + tag 'subworkflows' + tag 'utils_nextflow_pipeline' + tag 'subworkflows/utils_nextflow_pipeline' + + test("Should run no inputs") { + + when { + workflow { + """ + print_version = false + dump_parameters = false + outdir = null + check_conda_channels = false + + input[0] = print_version + input[1] = dump_parameters + input[2] = outdir + input[3] = check_conda_channels + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should print version") { + + when { + workflow { + """ + print_version = true + dump_parameters = false + outdir = null + check_conda_channels = false + + input[0] = print_version + input[1] = dump_parameters + input[2] = outdir + input[3] = check_conda_channels + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.stdout.contains("nextflow_workflow v9.9.9") } + ) + } + } + + test("Should dump params") { + + when { + workflow { + """ + print_version = false + dump_parameters = true + outdir = 'results' + check_conda_channels = false + + input[0] = false + input[1] = true + input[2] = outdir + input[3] = false + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should not create params JSON if no output directory") { + + when { + workflow { + """ + print_version = false + dump_parameters = true + outdir = null + check_conda_channels = false + + input[0] = false + input[1] = true + input[2] = outdir + input[3] = false + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config new file mode 100644 index 00000000..d0a926bf --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/nextflow.config @@ -0,0 +1,9 @@ +manifest { + name = 'nextflow_workflow' + author = """nf-core""" + homePage = 'https://127.0.0.1' + description = """Dummy pipeline""" + nextflowVersion = '!>=23.04.0' + version = '9.9.9' + doi = 'https://doi.org/10.5281/zenodo.5070524' +} diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml new file mode 100644 index 00000000..f8476112 --- /dev/null +++ b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml @@ -0,0 +1,2 @@ +subworkflows/utils_nextflow_pipeline: + - subworkflows/nf-core/utils_nextflow_pipeline/** diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf new file mode 100644 index 00000000..a8b55d6f --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -0,0 +1,440 @@ +// +// Subworkflow with utility functions specific to the nf-core pipeline template +// + +import org.yaml.snakeyaml.Yaml +import nextflow.extension.FilesEx + +/* +======================================================================================== + SUBWORKFLOW DEFINITION +======================================================================================== +*/ + +workflow UTILS_NFCORE_PIPELINE { + + take: + nextflow_cli_args + + main: + valid_config = checkConfigProvided() + checkProfileProvided(nextflow_cli_args) + + emit: + valid_config +} + +/* +======================================================================================== + FUNCTIONS +======================================================================================== +*/ + +// +// Warn if a -profile or Nextflow config has not been provided to run the pipeline +// +def checkConfigProvided() { + valid_config = true + if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { + log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + + "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + + " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + + " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + + " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + + "Please refer to the quick start section and usage docs for the pipeline.\n " + valid_config = false + } + return valid_config +} + +// +// Exit pipeline if --profile contains spaces +// +def checkProfileProvided(nextflow_cli_args) { + if (workflow.profile.endsWith(',')) { + error "The `-profile` option cannot end with a trailing comma, please remove it and re-run the pipeline!\n" + + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + } + if (nextflow_cli_args[0]) { + log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${nextflow_cli_args[0]}` has been detected.\n" + + "HINT: A common mistake is to provide multiple values separated by spaces e.g. `-profile test, docker`.\n" + } +} + +// +// Citation string for pipeline +// +def workflowCitation() { + return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" + + "* The pipeline\n" + + " ${workflow.manifest.doi}\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" +} + +// +// Generate workflow version string +// +def getWorkflowVersion() { + String version_string = "" + if (workflow.manifest.version) { + def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' + version_string += "${prefix_v}${workflow.manifest.version}" + } + + if (workflow.commitId) { + def git_shortsha = workflow.commitId.substring(0, 7) + version_string += "-g${git_shortsha}" + } + + return version_string +} + +// +// Get software versions for pipeline +// +def processVersionsFromYAML(yaml_file) { + Yaml yaml = new Yaml() + versions = yaml.load(yaml_file).collectEntries { k, v -> [ k.tokenize(':')[-1], v ] } + return yaml.dumpAsMap(versions).trim() +} + +// +// Get workflow version for pipeline +// +def workflowVersionToYAML() { + return """ + Workflow: + $workflow.manifest.name: ${getWorkflowVersion()} + Nextflow: $workflow.nextflow.version + """.stripIndent().trim() +} + +// +// Get channel of software versions used in pipeline in YAML format +// +def softwareVersionsToYAML(ch_versions) { + return ch_versions + .unique() + .map { processVersionsFromYAML(it) } + .unique() + .mix(Channel.of(workflowVersionToYAML())) +} + +// +// Get workflow summary for MultiQC +// +def paramsSummaryMultiqc(summary_params) { + def summary_section = '' + for (group in summary_params.keySet()) { + def group_params = summary_params.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 +} + +// +// nf-core logo +// +def nfCoreLogo(monochrome_logs=true) { + 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} ${getWorkflowVersion()}${colors.reset} + ${dashedLine(monochrome_logs)} + """.stripIndent() + ) +} + +// +// Return dashed line +// +def dashedLine(monochrome_logs=true) { + Map colors = logColours(monochrome_logs) + return "-${colors.dim}----------------------------------------------------${colors.reset}-" +} + +// +// ANSII colours used for terminal logging +// +def logColours(monochrome_logs=true) { + 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 +} + +// +// Attach the multiqc report to email +// +def attachMultiqcReport(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" + } + } + return mqc_report +} + +// +// Construct and send completion email +// +def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) { + + // 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'] = getWorkflowVersion() + 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 = attachMultiqcReport(multiqc_report) + + // Check if we are only sending emails on failure + def email_address = email + if (!email && email_on_fail && !workflow.success) { + email_address = email_on_fail + } + + // Render the TXT template + def engine = new groovy.text.GStringTemplateEngine() + def tf = new File("${workflow.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("${workflow.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.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit + def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] + def sf = new File("${workflow.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(monochrome_logs) + if (email_address) { + try { + if (plaintext_email) { throw GroovyException('Send plaintext e-mail, not HTML') } + // Try to send HTML e-mail using sendmail + def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") + sendmail_tf.withWriter { w -> w << sendmail_html } + [ '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 ] + 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_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") + output_hf.withWriter { w -> w << email_html } + FilesEx.copyTo(output_hf.toPath(), "${outdir}/pipeline_info/pipeline_report.html"); + output_hf.delete() + + // Write summary e-mail TXT to a file + def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") + output_tf.withWriter { w -> w << email_txt } + FilesEx.copyTo(output_tf.toPath(), "${outdir}/pipeline_info/pipeline_report.txt"); + output_tf.delete() +} + +// +// Print pipeline summary on completion +// +def completionSummary(monochrome_logs=true) { + Map colors = logColours(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.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" + } + } else { + log.info "-${colors.purple}[$workflow.manifest.name]${colors.red} Pipeline completed with errors${colors.reset}-" + } +} + +// +// Construct and send a notification to a web server as JSON e.g. Microsoft Teams and Slack +// +def imNotification(summary_params, hook_url) { + def summary = [:] + for (group in summary_params.keySet()) { + summary << summary_params[group] + } + + def misc_fields = [:] + misc_fields['start'] = workflow.start + misc_fields['complete'] = workflow.complete + misc_fields['scriptfile'] = workflow.scriptFile + misc_fields['scriptid'] = workflow.scriptId + if (workflow.repository) misc_fields['repository'] = workflow.repository + if (workflow.commitId) misc_fields['commitid'] = workflow.commitId + if (workflow.revision) misc_fields['revision'] = workflow.revision + misc_fields['nxf_version'] = workflow.nextflow.version + misc_fields['nxf_build'] = workflow.nextflow.build + misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp + + def msg_fields = [:] + msg_fields['version'] = getWorkflowVersion() + msg_fields['runName'] = workflow.runName + msg_fields['success'] = workflow.success + msg_fields['dateComplete'] = workflow.complete + msg_fields['duration'] = workflow.duration + msg_fields['exitStatus'] = workflow.exitStatus + msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') + msg_fields['errorReport'] = (workflow.errorReport ?: 'None') + msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") + msg_fields['projectDir'] = workflow.projectDir + msg_fields['summary'] = summary << misc_fields + + // Render the JSON template + def engine = new groovy.text.GStringTemplateEngine() + // Different JSON depending on the service provider + // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format + def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" + def hf = new File("${workflow.projectDir}/assets/${json_path}") + def json_template = engine.createTemplate(hf).make(msg_fields) + def json_message = json_template.toString() + + // POST + def post = new URL(hook_url).openConnection(); + post.setRequestMethod("POST") + post.setDoOutput(true) + post.setRequestProperty("Content-Type", "application/json") + post.getOutputStream().write(json_message.getBytes("UTF-8")); + def postRC = post.getResponseCode(); + if (! postRC.equals(200)) { + log.warn(post.getErrorStream().getText()); + } +} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/meta.yml b/subworkflows/nf-core/utils_nfcore_pipeline/meta.yml new file mode 100644 index 00000000..d08d2434 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/meta.yml @@ -0,0 +1,24 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "UTILS_NFCORE_PIPELINE" +description: Subworkflow with utility functions specific to the nf-core pipeline template +keywords: + - utility + - pipeline + - initialise + - version +components: [] +input: + - nextflow_cli_args: + type: list + description: | + Nextflow CLI positional arguments +output: + - success: + type: boolean + description: | + Dummy output to indicate success +authors: + - "@adamrtalbot" +maintainers: + - "@adamrtalbot" + - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test new file mode 100644 index 00000000..1dc317f8 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test @@ -0,0 +1,134 @@ + +nextflow_function { + + name "Test Functions" + script "../main.nf" + config "subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "utils_nfcore_pipeline" + tag "subworkflows/utils_nfcore_pipeline" + + test("Test Function checkConfigProvided") { + + function "checkConfigProvided" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function checkProfileProvided") { + + function "checkProfileProvided" + + when { + function { + """ + input[0] = [] + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function workflowCitation") { + + function "workflowCitation" + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function nfCoreLogo") { + + function "nfCoreLogo" + + when { + function { + """ + input[0] = false + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function dashedLine") { + + function "dashedLine" + + when { + function { + """ + input[0] = false + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function without logColours") { + + function "logColours" + + when { + function { + """ + input[0] = true + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } + + test("Test Function with logColours") { + function "logColours" + + when { + function { + """ + input[0] = false + """ + } + } + + then { + assertAll( + { assert function.success }, + { assert snapshot(function.result).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap new file mode 100644 index 00000000..1037232c --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap @@ -0,0 +1,166 @@ +{ + "Test Function checkProfileProvided": { + "content": null, + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:03.360873" + }, + "Test Function checkConfigProvided": { + "content": [ + true + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:02:59.729647" + }, + "Test Function nfCoreLogo": { + "content": [ + "\n\n-\u001b[2m----------------------------------------------------\u001b[0m-\n \u001b[0;32m,--.\u001b[0;30m/\u001b[0;32m,-.\u001b[0m\n\u001b[0;34m ___ __ __ __ ___ \u001b[0;32m/,-._.--~'\u001b[0m\n\u001b[0;34m |\\ | |__ __ / ` / \\ |__) |__ \u001b[0;33m} {\u001b[0m\n\u001b[0;34m | \\| | \\__, \\__/ | \\ |___ \u001b[0;32m\\`-._,-`-,\u001b[0m\n \u001b[0;32m`._,._,'\u001b[0m\n\u001b[0;35m nextflow_workflow v9.9.9\u001b[0m\n-\u001b[2m----------------------------------------------------\u001b[0m-\n" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:10.562934" + }, + "Test Function workflowCitation": { + "content": [ + "If you use nextflow_workflow for your analysis please cite:\n\n* The pipeline\n https://doi.org/10.5281/zenodo.5070524\n\n* The nf-core framework\n https://doi.org/10.1038/s41587-020-0439-x\n\n* Software dependencies\n https://github.com/nextflow_workflow/blob/master/CITATIONS.md" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:07.019761" + }, + "Test Function without logColours": { + "content": [ + { + "reset": "", + "bold": "", + "dim": "", + "underlined": "", + "blink": "", + "reverse": "", + "hidden": "", + "black": "", + "red": "", + "green": "", + "yellow": "", + "blue": "", + "purple": "", + "cyan": "", + "white": "", + "bblack": "", + "bred": "", + "bgreen": "", + "byellow": "", + "bblue": "", + "bpurple": "", + "bcyan": "", + "bwhite": "", + "ublack": "", + "ured": "", + "ugreen": "", + "uyellow": "", + "ublue": "", + "upurple": "", + "ucyan": "", + "uwhite": "", + "iblack": "", + "ired": "", + "igreen": "", + "iyellow": "", + "iblue": "", + "ipurple": "", + "icyan": "", + "iwhite": "", + "biblack": "", + "bired": "", + "bigreen": "", + "biyellow": "", + "biblue": "", + "bipurple": "", + "bicyan": "", + "biwhite": "" + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:17.969323" + }, + "Test Function dashedLine": { + "content": [ + "-\u001b[2m----------------------------------------------------\u001b[0m-" + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:14.366181" + }, + "Test Function with logColours": { + "content": [ + { + "reset": "\u001b[0m", + "bold": "\u001b[1m", + "dim": "\u001b[2m", + "underlined": "\u001b[4m", + "blink": "\u001b[5m", + "reverse": "\u001b[7m", + "hidden": "\u001b[8m", + "black": "\u001b[0;30m", + "red": "\u001b[0;31m", + "green": "\u001b[0;32m", + "yellow": "\u001b[0;33m", + "blue": "\u001b[0;34m", + "purple": "\u001b[0;35m", + "cyan": "\u001b[0;36m", + "white": "\u001b[0;37m", + "bblack": "\u001b[1;30m", + "bred": "\u001b[1;31m", + "bgreen": "\u001b[1;32m", + "byellow": "\u001b[1;33m", + "bblue": "\u001b[1;34m", + "bpurple": "\u001b[1;35m", + "bcyan": "\u001b[1;36m", + "bwhite": "\u001b[1;37m", + "ublack": "\u001b[4;30m", + "ured": "\u001b[4;31m", + "ugreen": "\u001b[4;32m", + "uyellow": "\u001b[4;33m", + "ublue": "\u001b[4;34m", + "upurple": "\u001b[4;35m", + "ucyan": "\u001b[4;36m", + "uwhite": "\u001b[4;37m", + "iblack": "\u001b[0;90m", + "ired": "\u001b[0;91m", + "igreen": "\u001b[0;92m", + "iyellow": "\u001b[0;93m", + "iblue": "\u001b[0;94m", + "ipurple": "\u001b[0;95m", + "icyan": "\u001b[0;96m", + "iwhite": "\u001b[0;97m", + "biblack": "\u001b[1;90m", + "bired": "\u001b[1;91m", + "bigreen": "\u001b[1;92m", + "biyellow": "\u001b[1;93m", + "biblue": "\u001b[1;94m", + "bipurple": "\u001b[1;95m", + "bicyan": "\u001b[1;96m", + "biwhite": "\u001b[1;97m" + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:21.714424" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test new file mode 100644 index 00000000..8940d32d --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test @@ -0,0 +1,29 @@ +nextflow_workflow { + + name "Test Workflow UTILS_NFCORE_PIPELINE" + script "../main.nf" + config "subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config" + workflow "UTILS_NFCORE_PIPELINE" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "utils_nfcore_pipeline" + tag "subworkflows/utils_nfcore_pipeline" + + test("Should run without failures") { + + when { + workflow { + """ + input[0] = [] + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap new file mode 100644 index 00000000..859d1030 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap @@ -0,0 +1,19 @@ +{ + "Should run without failures": { + "content": [ + { + "0": [ + true + ], + "valid_config": [ + true + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-02-28T12:03:25.726491" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config new file mode 100644 index 00000000..d0a926bf --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config @@ -0,0 +1,9 @@ +manifest { + name = 'nextflow_workflow' + author = """nf-core""" + homePage = 'https://127.0.0.1' + description = """Dummy pipeline""" + nextflowVersion = '!>=23.04.0' + version = '9.9.9' + doi = 'https://doi.org/10.5281/zenodo.5070524' +} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml new file mode 100644 index 00000000..ac8523c9 --- /dev/null +++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml @@ -0,0 +1,2 @@ +subworkflows/utils_nfcore_pipeline: + - subworkflows/nf-core/utils_nfcore_pipeline/** diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf new file mode 100644 index 00000000..2585b65d --- /dev/null +++ b/subworkflows/nf-core/utils_nfvalidation_plugin/main.nf @@ -0,0 +1,62 @@ +// +// Subworkflow that uses the nf-validation plugin to render help text and parameter summary +// + +/* +======================================================================================== + IMPORT NF-VALIDATION PLUGIN +======================================================================================== +*/ + +include { paramsHelp } from 'plugin/nf-validation' +include { paramsSummaryLog } from 'plugin/nf-validation' +include { validateParameters } from 'plugin/nf-validation' + +/* +======================================================================================== + SUBWORKFLOW DEFINITION +======================================================================================== +*/ + +workflow UTILS_NFVALIDATION_PLUGIN { + + take: + print_help // boolean: print help + workflow_command // string: default commmand used to run pipeline + pre_help_text // string: string to be printed before help text and summary log + post_help_text // string: string to be printed after help text and summary log + validate_params // boolean: validate parameters + schema_filename // path: JSON schema file, null to use default value + + main: + + log.debug "Using schema file: ${schema_filename}" + + // Default values for strings + pre_help_text = pre_help_text ?: '' + post_help_text = post_help_text ?: '' + workflow_command = workflow_command ?: '' + + // + // Print help message if needed + // + if (print_help) { + log.info pre_help_text + paramsHelp(workflow_command, parameters_schema: schema_filename) + post_help_text + System.exit(0) + } + + // + // Print parameter summary to stdout + // + log.info pre_help_text + paramsSummaryLog(workflow, parameters_schema: schema_filename) + post_help_text + + // + // Validate parameters relative to the parameter JSON schema + // + if (validate_params){ + validateParameters(parameters_schema: schema_filename) + } + + emit: + dummy_emit = true +} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml new file mode 100644 index 00000000..3d4a6b04 --- /dev/null +++ b/subworkflows/nf-core/utils_nfvalidation_plugin/meta.yml @@ -0,0 +1,44 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "UTILS_NFVALIDATION_PLUGIN" +description: Use nf-validation to initiate and validate a pipeline +keywords: + - utility + - pipeline + - initialise + - validation +components: [] +input: + - print_help: + type: boolean + description: | + Print help message and exit + - workflow_command: + type: string + description: | + The command to run the workflow e.g. "nextflow run main.nf" + - pre_help_text: + type: string + description: | + Text to print before the help message + - post_help_text: + type: string + description: | + Text to print after the help message + - validate_params: + type: boolean + description: | + Validate the parameters and error if invalid. + - schema_filename: + type: string + description: | + The filename of the schema to validate against. +output: + - dummy_emit: + type: boolean + description: | + Dummy emit to make nf-core subworkflows lint happy +authors: + - "@adamrtalbot" +maintainers: + - "@adamrtalbot" + - "@maxulysse" diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test new file mode 100644 index 00000000..5784a33f --- /dev/null +++ b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/main.nf.test @@ -0,0 +1,200 @@ +nextflow_workflow { + + name "Test Workflow UTILS_NFVALIDATION_PLUGIN" + script "../main.nf" + workflow "UTILS_NFVALIDATION_PLUGIN" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "plugin/nf-validation" + tag "'plugin/nf-validation'" + tag "utils_nfvalidation_plugin" + tag "subworkflows/utils_nfvalidation_plugin" + + test("Should run nothing") { + + when { + + params { + monochrome_logs = true + test_data = '' + } + + workflow { + """ + help = false + workflow_command = null + pre_help_text = null + post_help_text = null + validate_params = false + schema_filename = "$moduleTestDir/nextflow_schema.json" + + input[0] = help + input[1] = workflow_command + input[2] = pre_help_text + input[3] = post_help_text + input[4] = validate_params + input[5] = schema_filename + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } + + test("Should run help") { + + + when { + + params { + monochrome_logs = true + test_data = '' + } + workflow { + """ + help = true + workflow_command = null + pre_help_text = null + post_help_text = null + validate_params = false + schema_filename = "$moduleTestDir/nextflow_schema.json" + + input[0] = help + input[1] = workflow_command + input[2] = pre_help_text + input[3] = post_help_text + input[4] = validate_params + input[5] = schema_filename + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.exitStatus == 0 }, + { assert workflow.stdout.any { it.contains('Input/output options') } }, + { assert workflow.stdout.any { it.contains('--outdir') } } + ) + } + } + + test("Should run help with command") { + + when { + + params { + monochrome_logs = true + test_data = '' + } + workflow { + """ + help = true + workflow_command = "nextflow run noorg/doesntexist" + pre_help_text = null + post_help_text = null + validate_params = false + schema_filename = "$moduleTestDir/nextflow_schema.json" + + input[0] = help + input[1] = workflow_command + input[2] = pre_help_text + input[3] = post_help_text + input[4] = validate_params + input[5] = schema_filename + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.exitStatus == 0 }, + { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, + { assert workflow.stdout.any { it.contains('Input/output options') } }, + { assert workflow.stdout.any { it.contains('--outdir') } } + ) + } + } + + test("Should run help with extra text") { + + + when { + + params { + monochrome_logs = true + test_data = '' + } + workflow { + """ + help = true + workflow_command = "nextflow run noorg/doesntexist" + pre_help_text = "pre-help-text" + post_help_text = "post-help-text" + validate_params = false + schema_filename = "$moduleTestDir/nextflow_schema.json" + + input[0] = help + input[1] = workflow_command + input[2] = pre_help_text + input[3] = post_help_text + input[4] = validate_params + input[5] = schema_filename + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert workflow.exitStatus == 0 }, + { assert workflow.stdout.any { it.contains('pre-help-text') } }, + { assert workflow.stdout.any { it.contains('nextflow run noorg/doesntexist') } }, + { assert workflow.stdout.any { it.contains('Input/output options') } }, + { assert workflow.stdout.any { it.contains('--outdir') } }, + { assert workflow.stdout.any { it.contains('post-help-text') } } + ) + } + } + + test("Should validate params") { + + when { + + params { + monochrome_logs = true + test_data = '' + outdir = 1 + } + workflow { + """ + help = false + workflow_command = null + pre_help_text = null + post_help_text = null + validate_params = true + schema_filename = "$moduleTestDir/nextflow_schema.json" + + input[0] = help + input[1] = workflow_command + input[2] = pre_help_text + input[3] = post_help_text + input[4] = validate_params + input[5] = schema_filename + """ + } + } + + then { + assertAll( + { assert workflow.failed }, + { assert workflow.stdout.any { it.contains('ERROR ~ ERROR: Validation of pipeline parameters failed!') } } + ) + } + } +} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json new file mode 100644 index 00000000..7626c1c9 --- /dev/null +++ b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/nextflow_schema.json @@ -0,0 +1,96 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://raw.githubusercontent.com/./master/nextflow_schema.json", + "title": ". pipeline parameters", + "description": "", + "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": ["outdir"], + "properties": { + "validate_params": { + "type": "boolean", + "description": "Validate parameters?", + "default": true, + "hidden": true + }, + "outdir": { + "type": "string", + "format": "directory-path", + "description": "The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure.", + "fa_icon": "fas fa-folder-open" + }, + "test_data_base": { + "type": "string", + "default": "https://raw.githubusercontent.com/nf-core/test-datasets/modules", + "description": "Base for test data directory", + "hidden": true + }, + "test_data": { + "type": "string", + "description": "Fake test data param", + "hidden": true + } + } + }, + "generic_options": { + "title": "Generic 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`.", + "properties": { + "help": { + "type": "boolean", + "description": "Display help text.", + "fa_icon": "fas fa-question-circle", + "hidden": true + }, + "version": { + "type": "boolean", + "description": "Display version and exit.", + "fa_icon": "fas fa-question-circle", + "hidden": true + }, + "logo": { + "type": "boolean", + "default": true, + "description": "Display nf-core logo in console output.", + "fa_icon": "fas fa-image", + "hidden": true + }, + "singularity_pull_docker_container": { + "type": "boolean", + "description": "Pull Singularity container from Docker?", + "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 + }, + "monochrome_logs": { + "type": "boolean", + "description": "Use monochrome_logs", + "hidden": true + } + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/input_output_options" + }, + { + "$ref": "#/definitions/generic_options" + } + ] +} diff --git a/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml new file mode 100644 index 00000000..60b1cfff --- /dev/null +++ b/subworkflows/nf-core/utils_nfvalidation_plugin/tests/tags.yml @@ -0,0 +1,2 @@ +subworkflows/utils_nfvalidation_plugin: + - subworkflows/nf-core/utils_nfvalidation_plugin/** From 8508612944c44e8836f79c84f1c0bac37a464314 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 6 Mar 2024 12:36:08 +0100 Subject: [PATCH 02/15] Add local utils subworkflow --- .../utils_nfcore_atacseq_pipeline/main.nf | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf diff --git a/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf new file mode 100644 index 00000000..cfb413c8 --- /dev/null +++ b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf @@ -0,0 +1,262 @@ +// +// Subworkflow with functionality specific to the nf-core/atacseq pipeline +// + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +include { UTILS_NFVALIDATION_PLUGIN } from '../../nf-core/utils_nfvalidation_plugin' +include { paramsSummaryMap } from 'plugin/nf-validation' +include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' +include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' +include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' +include { dashedLine } from '../../nf-core/utils_nfcore_pipeline' +include { nfCoreLogo } from '../../nf-core/utils_nfcore_pipeline' +include { imNotification } from '../../nf-core/utils_nfcore_pipeline' +include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' +include { workflowCitation } from '../../nf-core/utils_nfcore_pipeline' + +/* +======================================================================================== + SUBWORKFLOW TO INITIALISE PIPELINE +======================================================================================== +*/ + +workflow PIPELINE_INITIALISATION { + + take: + version // boolean: Display version and exit + help // boolean: Display help text + validate_params // boolean: Boolean whether to validate parameters against the schema at runtime + monochrome_logs // boolean: Do not use coloured log outputs + nextflow_cli_args // array: List of positional nextflow CLI args + outdir // string: The output directory where the results will be saved + + main: + + // + // Print version and exit if required and dump pipeline parameters to JSON file + // + UTILS_NEXTFLOW_PIPELINE ( + version, + true, + outdir, + workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1 + ) + + // + // Validate parameters and generate parameter summary to stdout + // + pre_help_text = nfCoreLogo(monochrome_logs) + post_help_text = '\n' + workflowCitation() + '\n' + dashedLine(monochrome_logs) + def String workflow_command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --genome GRCh37 --outdir " + UTILS_NFVALIDATION_PLUGIN ( + help, + workflow_command, + pre_help_text, + post_help_text, + validate_params, + "nextflow_schema.json" + ) + + // + // Check config provided to the pipeline + // + UTILS_NFCORE_PIPELINE ( + nextflow_cli_args + ) + + // + // Custom validation for pipeline parameters + // + validateInputParameters() + +} + +/* +======================================================================================== + SUBWORKFLOW FOR PIPELINE COMPLETION +======================================================================================== +*/ + +workflow PIPELINE_COMPLETION { + + take: + email // string: email address + email_on_fail // string: email address sent on pipeline failure + plaintext_email // boolean: Send plain-text email instead of HTML + outdir // path: Path to output directory where results will be published + monochrome_logs // boolean: Disable ANSI colour codes in log output + hook_url // string: hook URL for notifications + multiqc_report // string: Path to MultiQC report + + main: + + summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + + // + // Completion email and summary + // + workflow.onComplete { + if (email || email_on_fail) { + completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs, multiqc_report.toList()) + } + + completionSummary(monochrome_logs) + + if (hook_url) { + imNotification(summary_params, hook_url) + } + } +} + +/* +======================================================================================== + FUNCTIONS +======================================================================================== +*/ + +// +// Function to validate channels from input samplesheet +// +def validateInputSamplesheet(input) { + def (metas, fastqs) = input[1..2] + + // Check that multiple runs of the same sample are of the same strandedness + def strandedness_ok = metas.collect{ it.strandedness }.unique().size == 1 + if (!strandedness_ok) { + error("Please check input samplesheet -> Multiple runs of a sample must have the same strandedness!: ${metas[0].id}") + } + + // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end + def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 + if (!endedness_ok) { + error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") + } + + return [ metas[0], fastqs ] +} + +// +// Check and validate pipeline parameters +// +def validateInputParameters() { + + genomeExistsError() + + if (!params.fasta) { + error("Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file.") + } + + if (!params.gtf && !params.gff) { + error("No GTF or GFF3 annotation specified! The pipeline requires at least one of these files.") + } + + if (params.gtf && params.gff) { + gtfGffWarn(log) + } +} + +// +// Get attribute from genome config file e.g. fasta +// +def getGenomeAttribute(attribute) { + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey(attribute)) { + return params.genomes[ params.genome ][ attribute ] + } + } + return null +} + +// +// Exit pipeline if incorrect --genome key provided +// +def genomeExistsError() { + if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { + def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\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" + + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + error(error_string) + } +} + +// +// Generate methods description for MultiQC +// +def toolCitationText() { + // TODO nf-core: Optionally add in-text citation tools to this list. + // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", + // Uncomment function in methodsDescriptionText to render in MultiQC report + def citation_text = [ + "Tools used in the workflow included:", + "FastQC (Andrews 2010),", + "MultiQC (Ewels et al. 2016)", + "." + ].join(' ').trim() + + return citation_text +} + +def toolBibliographyText() { + // TODO nf-core: Optionally add bibliographic entries to this list. + // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", + // Uncomment function in methodsDescriptionText to render in MultiQC report + def reference_text = [ + "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", + "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " + ].join(' ').trim() + + return reference_text +} + +def methodsDescriptionText(mqc_methods_yaml) { + // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file + def meta = [:] + meta.workflow = workflow.toMap() + meta["manifest_map"] = workflow.manifest.toMap() + + // Pipeline DOI + meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : "" + meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " + + // Tool references + meta["tool_citations"] = "" + meta["tool_bibliography"] = "" + + // TODO nf-core: Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! + // meta["tool_citations"] = toolCitationText().replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + // meta["tool_bibliography"] = toolBibliographyText() + def methods_text = mqc_methods_yaml.text + + def engine = new groovy.text.SimpleTemplateEngine() + def description_html = engine.createTemplate(methods_text).make(meta) + + return description_html.toString() +} + +// +// Print a warning if both GTF and GFF have been provided +// +def gtfGffWarn(log) { + log.warn "=============================================================================\n" + + " Both '--gtf' and '--gff' parameters have been provided.\n" + + " Using GTF file as priority.\n" + + "===================================================================================" +} + +// +// Print a warning if macs_gsize parameter has not been provided +// +def macsGsizeWarn(log) { + log.warn "=============================================================================\n" + + " --macs_gsize parameter has not been provided.\n" + + " It will be auto-calculated by 'khmer unique-kmers.py' using the '--read_length' parameter.\n" + + " Explicitly provide '--macs_gsize macs2_genome_size' to change this behaviour.\n" + + "===================================================================================" +} From fb5540bb4525c46238a81d7e7bc69179826e4b3e Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 12:46:37 +0100 Subject: [PATCH 03/15] Remove lib --- lib/NfcoreTemplate.groovy | 356 ------------------------------------- lib/Utils.groovy | 47 ----- lib/WorkflowAtacseq.groovy | 160 ----------------- lib/WorkflowMain.groovy | 85 --------- 4 files changed, 648 deletions(-) delete mode 100755 lib/NfcoreTemplate.groovy delete mode 100644 lib/Utils.groovy delete mode 100755 lib/WorkflowAtacseq.groovy delete mode 100755 lib/WorkflowMain.groovy diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy deleted file mode 100755 index e248e4c3..00000000 --- a/lib/NfcoreTemplate.groovy +++ /dev/null @@ -1,356 +0,0 @@ -// -// This file holds several functions used within the nf-core pipeline template. -// - -import org.yaml.snakeyaml.Yaml -import groovy.json.JsonOutput -import nextflow.extension.FilesEx - -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!" - } - } - - // - // Warn if a -profile or Nextflow config has not been provided to run the pipeline - // - public static void checkConfigProvided(workflow, log) { - if (workflow.profile == 'standard' && workflow.configFiles.size() <= 1) { - log.warn "[$workflow.manifest.name] You are attempting to run the pipeline without any custom configuration!\n\n" + - "This will be dependent on your local compute environment but can be achieved via one or more of the following:\n" + - " (1) Using an existing pipeline profile e.g. `-profile docker` or `-profile singularity`\n" + - " (2) Using an existing nf-core/configs for your Institution e.g. `-profile crick` or `-profile uppmax`\n" + - " (3) Using your own local custom config e.g. `-c /path/to/your/custom.config`\n\n" + - "Please refer to the quick start section and usage docs for the pipeline.\n " - } - } - - // - // Generate version string - // - public static String version(workflow) { - String version_string = "" - - if (workflow.manifest.version) { - def prefix_v = workflow.manifest.version[0] != 'v' ? 'v' : '' - version_string += "${prefix_v}${workflow.manifest.version}" - } - - if (workflow.commitId) { - def git_shortsha = workflow.commitId.substring(0, 7) - version_string += "-g${git_shortsha}" - } - - return version_string - } - - // - // 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'] = NfcoreTemplate.version(workflow) - 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.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) 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 - def sendmail_tf = new File(workflow.launchDir.toString(), ".sendmail_tmp.html") - sendmail_tf.withWriter { w -> w << sendmail_html } - [ '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 != null && 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_hf = new File(workflow.launchDir.toString(), ".pipeline_report.html") - output_hf.withWriter { w -> w << email_html } - FilesEx.copyTo(output_hf.toPath(), "${params.outdir}/pipeline_info/pipeline_report.html"); - output_hf.delete() - - // Write summary e-mail TXT to a file - def output_tf = new File(workflow.launchDir.toString(), ".pipeline_report.txt") - output_tf.withWriter { w -> w << email_txt } - FilesEx.copyTo(output_tf.toPath(), "${params.outdir}/pipeline_info/pipeline_report.txt"); - output_tf.delete() - } - - // - // Construct and send a notification to a web server as JSON - // e.g. Microsoft Teams and Slack - // - public static void IM_notification(workflow, params, summary_params, projectDir, log) { - def hook_url = params.hook_url - - def summary = [:] - for (group in summary_params.keySet()) { - summary << summary_params[group] - } - - def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) misc_fields['repository'] = workflow.repository - if (workflow.commitId) misc_fields['commitid'] = workflow.commitId - if (workflow.revision) misc_fields['revision'] = workflow.revision - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp - - def msg_fields = [:] - msg_fields['version'] = NfcoreTemplate.version(workflow) - msg_fields['runName'] = workflow.runName - msg_fields['success'] = workflow.success - msg_fields['dateComplete'] = workflow.complete - msg_fields['duration'] = workflow.duration - msg_fields['exitStatus'] = workflow.exitStatus - msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - msg_fields['errorReport'] = (workflow.errorReport ?: 'None') - msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") - msg_fields['projectDir'] = workflow.projectDir - msg_fields['summary'] = summary << misc_fields - - // Render the JSON template - def engine = new groovy.text.GStringTemplateEngine() - // Different JSON depending on the service provider - // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format - def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" - def hf = new File("$projectDir/assets/${json_path}") - def json_template = engine.createTemplate(hf).make(msg_fields) - def json_message = json_template.toString() - - // POST - def post = new URL(hook_url).openConnection(); - post.setRequestMethod("POST") - post.setDoOutput(true) - post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")); - def postRC = post.getResponseCode(); - if (! postRC.equals(200)) { - log.warn(post.getErrorStream().getText()); - } - } - - // - // Dump pipeline parameters in a json file - // - public static void dump_parameters(workflow, params) { - def timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') - def filename = "params_${timestamp}.json" - def temp_pf = new File(workflow.launchDir.toString(), ".${filename}") - def jsonStr = JsonOutput.toJson(params) - temp_pf.text = JsonOutput.prettyPrint(jsonStr) - - FilesEx.copyTo(temp_pf.toPath(), "${params.outdir}/pipeline_info/params_${timestamp}.json") - temp_pf.delete() - } - - // - // 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.yellow} Pipeline completed successfully, but with errored process(es) ${colors.reset}-" - } - } else { - 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 workflow_version = NfcoreTemplate.version(workflow) - 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} ${workflow_version}${colors.reset} - ${dashedLine(monochrome_logs)} - """.stripIndent() - ) - } -} diff --git a/lib/Utils.groovy b/lib/Utils.groovy deleted file mode 100644 index 8d030f4e..00000000 --- a/lib/Utils.groovy +++ /dev/null @@ -1,47 +0,0 @@ -// -// 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 - // This channel list is ordered by required channel priority. - def required_channels_in_order = ['conda-forge', 'bioconda', 'defaults'] - def channels_missing = ((required_channels_in_order as Set) - (channels as Set)) as Boolean - - // Check that they are in the right order - def channel_priority_violation = false - def n = required_channels_in_order.size() - for (int i = 0; i < n - 1; i++) { - channel_priority_violation |= !(channels.indexOf(required_channels_in_order[i]) < channels.indexOf(required_channels_in_order[i+1])) - } - - if (channels_missing | channel_priority_violation) { - 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/\n" + - " The observed channel order is \n" + - " ${channels}\n" + - " but the following channel order is required:\n" + - " ${required_channels_in_order}\n" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - } - } -} diff --git a/lib/WorkflowAtacseq.groovy b/lib/WorkflowAtacseq.groovy deleted file mode 100755 index b45a0d32..00000000 --- a/lib/WorkflowAtacseq.groovy +++ /dev/null @@ -1,160 +0,0 @@ -// -// This file holds several functions specific to the workflow/atacseq.nf in the nf-core/atacseq pipeline -// - -import nextflow.Nextflow -import groovy.text.SimpleTemplateEngine - -class WorkflowAtacseq { - - // - // Check and validate parameters - // - public static void initialise(params, log) { - genomeExistsError(params, log) - - if (!params.fasta) { - Nextflow.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." - } - - if (!params.gtf && !params.gff) { - log.error "No GTF or GFF3 annotation specified! The pipeline requires at least one of these files." - System.exit(1) - } - - if (params.gtf && params.gff) { - gtfGffWarn(log) - } - - if (!params.macs_gsize) { - macsGsizeWarn(log) - } - - if (!params.read_length && !params.macs_gsize) { - log.error "Both '--read_length' and '--macs_gsize' not specified! Please specify either to infer MACS2 genome size for peak calling." - 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" - 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 - } - - // - // Generate methods description for MultiQC - // - - public static String toolCitationText(params) { - - // TODO nf-core: Optionally add in-text citation tools to this list. - // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", - // Uncomment function in methodsDescriptionText to render in MultiQC report - def citation_text = [ - "Tools used in the workflow included:", - "FastQC (Andrews 2010),", - "MultiQC (Ewels et al. 2016)", - "." - ].join(' ').trim() - - return citation_text - } - - public static String toolBibliographyText(params) { - - // TODO Optionally add bibliographic entries to this list. - // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "
  • Author (2023) Pub name, Journal, DOI
  • " : "", - // Uncomment function in methodsDescriptionText to render in MultiQC report - def reference_text = [ - "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", - "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " - ].join(' ').trim() - - return reference_text - } - - public static String methodsDescriptionText(run_workflow, mqc_methods_yaml, params) { - // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file - def meta = [:] - meta.workflow = run_workflow.toMap() - meta["manifest_map"] = run_workflow.manifest.toMap() - - // Pipeline DOI - meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : "" - meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " - - // Tool references - meta["tool_citations"] = "" - meta["tool_bibliography"] = "" - - // TODO Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! - //meta["tool_citations"] = toolCitationText(params).replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") - //meta["tool_bibliography"] = toolBibliographyText(params) - - - def methods_text = mqc_methods_yaml.text - - def engine = new SimpleTemplateEngine() - def description_html = engine.createTemplate(methods_text).make(meta) - - return description_html - } - - // - // Exit pipeline if incorrect --genome key provided - // - private static void genomeExistsError(params, log) { - if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) { - def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\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" + - "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - Nextflow.error(error_string) - } - } - - // - // Print a warning if both GTF and GFF have been provided - // - private static void gtfGffWarn(log) { - log.warn "=============================================================================\n" + - " Both '--gtf' and '--gff' parameters have been provided.\n" + - " Using GTF file as priority.\n" + - "===================================================================================" - } - - // - // Print a warning if macs_gsize parameter has not been provided - // - private static void macsGsizeWarn(log) { - log.warn "=============================================================================\n" + - " --macs_gsize parameter has not been provided.\n" + - " It will be auto-calculated by 'khmer unique-kmers.py' using the '--read_length' parameter.\n" + - " Explicitly provide '--macs_gsize macs2_genome_size' to change this behaviour.\n" + - "===================================================================================" - } - -} diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy deleted file mode 100755 index d0a554fe..00000000 --- a/lib/WorkflowMain.groovy +++ /dev/null @@ -1,85 +0,0 @@ -// -// This file holds several functions specific to the main.nf workflow in the nf-core/atacseq pipeline -// - -import nextflow.Nextflow - -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.2634132\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" - } - - // - // Validate parameters and print summary to screen - // - public static void initialise(workflow, params, log, args) { - - // Print workflow version and exit on --version - if (params.version) { - String workflow_version = NfcoreTemplate.version(workflow) - log.info "${workflow.manifest.name} ${workflow_version}" - System.exit(0) - } - - // Check that a -profile or Nextflow config has been provided to run the pipeline - NfcoreTemplate.checkConfigProvided(workflow, log) - // Check that the profile doesn't contain spaces and doesn't end with a trailing comma - checkProfile(workflow.profile, args, log) - - // Check that conda channels are set-up correctly - if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { - Utils.checkCondaChannels(log) - } - - // Check AWS batch settings - NfcoreTemplate.awsBatch(workflow, params) - } - - // - // Get attribute from genome config file e.g. fasta - // - public static Object getGenomeAttribute(params, attribute) { - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey(attribute)) { - return params.genomes[ params.genome ][ attribute ] - } - } - return null - } - - // - // Get macs genome size (macs_gsize) - // - public static Long getMacsGsize(params) { - def val = null - if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { - if (params.genomes[ params.genome ].containsKey('macs_gsize')) { - if (params.genomes[ params.genome ][ 'macs_gsize' ].containsKey(params.read_length.toString())) { - val = params.genomes[ params.genome ][ 'macs_gsize' ][ params.read_length.toString() ] - } - } - } - return val - } - - // Exit pipeline if --profile contains spaces - // - private static void checkProfile(profile, args, log) { - if (profile.endsWith(',')) { - Nextflow.error "Profile cannot end with a trailing comma. Please remove the comma from the end of the profile string.\nHint: A common mistake is to provide multiple values to `-profile` separated by spaces. Please use commas to separate profiles instead,e.g., `-profile docker,test`." - } - if (args[0]) { - log.warn "nf-core pipelines do not accept positional arguments. The positional argument `${args[0]}` has been detected.\n Hint: A common mistake is to provide multiple values to `-profile` separated by spaces. Please use commas to separate profiles instead,e.g., `-profile docker,test`." - } - } -} From 260ffc453e889882706fe7aed969e628b7594a09 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 12:46:58 +0100 Subject: [PATCH 04/15] Update prepare_genome subworkflow --- subworkflows/local/prepare_genome.nf | 125 ++++++++++++++------------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index d6dbffcf..011ee7aa 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -31,8 +31,22 @@ include { TSS_EXTRACT } from '../../modules/local/tss_extract' workflow PREPARE_GENOME { take: - prepare_tool_index // string : tool to prepare index for - + prepare_tool_index // string: tool to prepare index for + fasta // path: path to genome fasta file + gtf // file: /path/to/genome.gtf + gff // file: /path/to/genome.gff + blacklist // file: /path/to/blacklist.bed + gene_bed // file: /path/to/gene.bed + tss_bed // file: /path/to/tss.bed + mito_name // string: name of mitochondrial chromosome + keep_mito // boolean: keep mitochondrial chromosome + bwa_index // file: /path/to/bwa/index/ + bowtie2_index // file: /path/to/bowtie2/index/ + chromap_index // file: /path/to/chromap/index/ + star_index // file: /path/to/star/index/ + macs_gsize // integer: MACS2 genome size + read_length // integer: read length + main: ch_versions = Channel.empty() @@ -40,29 +54,29 @@ workflow PREPARE_GENOME { // Uncompress genome fasta file if required // ch_fasta = Channel.empty() - if (params.fasta.endsWith('.gz')) { - ch_fasta = GUNZIP_FASTA ( [ [:], params.fasta ] ).gunzip.map{ it[1] } + if (fasta.endsWith('.gz')) { + ch_fasta = GUNZIP_FASTA ( [ [:], fasta ] ).gunzip.map{ it[1] } ch_versions = ch_versions.mix(GUNZIP_FASTA.out.versions) } else { - ch_fasta = Channel.value(file(params.fasta)) + ch_fasta = Channel.value(file(fasta)) } // // Uncompress GTF annotation file or create from GFF3 if required // - if (params.gtf) { - if (params.gtf.endsWith('.gz')) { - ch_gtf = GUNZIP_GTF ( [ [:], params.gtf ] ).gunzip.map{ it[1] } + if (gtf) { + if (gtf.endsWith('.gz')) { + ch_gtf = GUNZIP_GTF ( [ [:], gtf ] ).gunzip.map{ it[1] } ch_versions = ch_versions.mix(GUNZIP_GTF.out.versions) } else { - ch_gtf = Channel.value(file(params.gtf)) + ch_gtf = Channel.value(file(gtf)) } - } else if (params.gff) { - if (params.gff.endsWith('.gz')) { - ch_gff = GUNZIP_GFF ( [ [:], params.gff ] ).gunzip.map{ it[1] } + } else if (gff) { + if (gff.endsWith('.gz')) { + ch_gff = GUNZIP_GFF ( [ [:], gff ] ).gunzip.map{ it[1] } ch_versions = ch_versions.mix(GUNZIP_GFF.out.versions) } else { - ch_gff = Channel.value(file(params.gff)) + ch_gff = Channel.value(file(gff)) } ch_gtf = GFFREAD ( ch_gff ).gtf ch_versions = ch_versions.mix(GFFREAD.out.versions) @@ -72,51 +86,39 @@ workflow PREPARE_GENOME { // Uncompress blacklist file if required // ch_blacklist = Channel.empty() - if (params.blacklist) { - if (params.blacklist.endsWith('.gz')) { - ch_blacklist = GUNZIP_BLACKLIST ( [ [:], params.blacklist ] ).gunzip.map{ it[1] } + if (blacklist) { + if (blacklist.endsWith('.gz')) { + ch_blacklist = GUNZIP_BLACKLIST ( [ [:], blacklist ] ).gunzip.map{ it[1] } ch_versions = ch_versions.mix(GUNZIP_BLACKLIST.out.versions) } else { - ch_blacklist = Channel.value(file(params.blacklist)) + ch_blacklist = Channel.value(file(blacklist)) } } // // Uncompress gene BED annotation file or create from GTF if required // - - // If --gtf is supplied along with --genome - // Make gene bed from supplied --gtf instead of using iGenomes one automatically - def make_bed = false - if (!params.gene_bed) { - make_bed = true - } else if (params.genome && params.gtf) { - if (params.genomes[ params.genome ].gtf != params.gtf) { - make_bed = true - } - } - - if (make_bed) { - ch_gene_bed = GTF2BED ( ch_gtf ).bed - ch_versions = ch_versions.mix(GTF2BED.out.versions) - } else { - if (params.gene_bed.endsWith('.gz')) { - ch_gene_bed = GUNZIP_GENE_BED ( [ [:], params.gene_bed ] ).gunzip.map{ it[1] } + if (gene_bed) { + if (gene_bed.endsWith('.gz')) { + ch_gene_bed = GUNZIP_GENE_BED ( [ [:], gene_bed ] ).gunzip.map { it[1] } ch_versions = ch_versions.mix(GUNZIP_GENE_BED.out.versions) } else { - ch_gene_bed = Channel.value(file(params.gene_bed)) + ch_gene_bed = Channel.value(file(gene_bed)) } + } else { + ch_gene_bed = GTF2BED ( ch_gtf ).bed + ch_versions = ch_versions.mix(GTF2BED.out.versions) } - if (!params.tss_bed) { + if (!tss_bed) { ch_tss_bed = TSS_EXTRACT ( ch_gene_bed ).tss ch_versions = ch_versions.mix(TSS_EXTRACT.out.versions) } else { - if (params.tss_bed.endsWith('.gz')) { - ch_tss_bed = GUNZIP_TSS_BED ( [ [:], params.tss_bed ] ).gunzip.map{ it[1] } + if (tss_bed.endsWith('.gz')) { + ch_tss_bed = GUNZIP_TSS_BED ( [ [:], tss_bed ] ).gunzip.map{ it[1] } ch_versions = ch_versions.mix(GUNZIP_TSS_BED.out.versions) } else { - ch_tss_bed = Channel.value(file(params.tss_bed)) + ch_tss_bed = Channel.value(file(tss_bed)) } } @@ -146,8 +148,8 @@ workflow PREPARE_GENOME { GENOME_BLACKLIST_REGIONS ( ch_chrom_sizes, ch_blacklist.ifEmpty([]), - params.mito_name ?: '', - params.keep_mito + mito_name ?: '', + keep_mito ) ch_genome_filtered_bed = GENOME_BLACKLIST_REGIONS.out.bed ch_versions = ch_versions.mix(GENOME_BLACKLIST_REGIONS.out.versions) @@ -157,12 +159,12 @@ workflow PREPARE_GENOME { // ch_bwa_index = Channel.empty() if (prepare_tool_index == 'bwa') { - if (params.bwa_index) { - if (params.bwa_index.endsWith('.tar.gz')) { - ch_bwa_index = UNTAR_BWA_INDEX ( [ [:], params.bwa_index ] ).untar + if (bwa_index) { + if (bwa_index.endsWith('.tar.gz')) { + ch_bwa_index = UNTAR_BWA_INDEX ( [ [:], bwa_index ] ).untar ch_versions = ch_versions.mix(UNTAR_BWA_INDEX.out.versions) } else { - ch_bwa_index = [ [:], file(params.bwa_index) ] + ch_bwa_index = [ [:], file(bwa_index) ] } } else { ch_bwa_index = BWA_INDEX ( ch_fasta.map { [ [:], it ] } ).index @@ -175,12 +177,12 @@ workflow PREPARE_GENOME { // ch_bowtie2_index = Channel.empty() if (prepare_tool_index == 'bowtie2') { - if (params.bowtie2_index) { - if (params.bowtie2_index.endsWith('.tar.gz')) { - ch_bowtie2_index = UNTAR_BOWTIE2_INDEX ( [ [:], params.bowtie2_index ] ).untar + if (bowtie2_index) { + if (bowtie2_index.endsWith('.tar.gz')) { + ch_bowtie2_index = UNTAR_BOWTIE2_INDEX ( [ [:], bowtie2_index ] ).untar ch_versions = ch_versions.mix(UNTAR_BOWTIE2_INDEX.out.versions) } else { - ch_bowtie2_index = [ [:], file(params.bowtie2_index) ] + ch_bowtie2_index = [ [:], file(bowtie2_index) ] } } else { ch_bowtie2_index = BOWTIE2_BUILD ( ch_fasta.map { [ [:], it ] } ).index @@ -193,12 +195,12 @@ workflow PREPARE_GENOME { // ch_chromap_index = Channel.empty() if (prepare_tool_index == 'chromap') { - if (params.chromap_index) { - if (params.chromap_index.endsWith('.tar.gz')) { - ch_chromap_index = UNTAR_CHROMAP_INDEX ( [ [:], params.chromap_index ] ).untar + if (chromap_index) { + if (chromap_index.endsWith('.tar.gz')) { + ch_chromap_index = UNTAR_CHROMAP_INDEX ( [ [:], chromap_index ] ).untar ch_versions = ch_versions.mix(UNTAR.out.versions) } else { - ch_chromap_index = [ [:], file(params.chromap_index) ] + ch_chromap_index = [ [:], file(chromap_index) ] } } else { ch_chromap_index = CHROMAP_INDEX ( ch_fasta.map { [ [:], it ] } ).index @@ -211,12 +213,12 @@ workflow PREPARE_GENOME { // ch_star_index = Channel.empty() if (prepare_tool_index == 'star') { - if (params.star_index) { - if (params.star_index.endsWith('.tar.gz')) { - ch_star_index = UNTAR_STAR_INDEX ( [ [:], params.star_index ] ).untar.map{ it[1] } + if (star_index) { + if (star_index.endsWith('.tar.gz')) { + ch_star_index = UNTAR_STAR_INDEX ( [ [:], star_index ] ).untar.map{ it[1] } ch_versions = ch_versions.mix(UNTAR_STAR_INDEX.out.versions) } else { - ch_star_index = Channel.value(file(params.star_index)) + ch_star_index = Channel.value(file(star_index)) } } else { ch_star_index = STAR_GENOMEGENERATE ( ch_fasta, ch_gtf ).index @@ -227,11 +229,11 @@ workflow PREPARE_GENOME { // // Estimate MACS2 genome size // - ch_macs_gsize = params.macs_gsize - if (!params.macs_gsize) { + ch_macs_gsize = macs_gsize + if (!macs_gsize) { KHMER_UNIQUEKMERS ( ch_fasta, - params.read_length + read_length ) ch_macs_gsize = KHMER_UNIQUEKMERS.out.kmers.map { it.text.trim() } ch_versions = ch_versions.mix(KHMER_UNIQUEKMERS.out.versions) @@ -251,6 +253,5 @@ workflow PREPARE_GENOME { star_index = ch_star_index // path: star/index/ autosomes = ch_genome_autosomes // path: *.autosomes.txt macs_gsize = ch_macs_gsize // integer: MACS2 genome size - versions = ch_versions.ifEmpty(null) // channel: [ versions.yml ] } From 3677eb800e9c6ea1866f99220d2e1c77a5fb4403 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 13:21:38 +0100 Subject: [PATCH 05/15] Add getMacsGsize function --- .../local/utils_nfcore_atacseq_pipeline/main.nf | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf index cfb413c8..e0f08166 100644 --- a/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf @@ -186,6 +186,21 @@ def genomeExistsError() { } } +// +// Get macs genome size (macs_gsize) +// +def getMacsGsize(params) { + def val = null + if (params.genomes && params.genome && params.genomes.containsKey(params.genome)) { + if (params.genomes[ params.genome ].containsKey('macs_gsize')) { + if (params.genomes[ params.genome ][ 'macs_gsize' ].containsKey(params.read_length.toString())) { + val = params.genomes[ params.genome ][ 'macs_gsize' ][ params.read_length.toString() ] + } + } + } + return val +} + // // Generate methods description for MultiQC // From 78109ab2c13198377b08e79c0bc9559050c8f20d Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 13:21:47 +0100 Subject: [PATCH 06/15] Update main --- main.nf | 145 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 104 insertions(+), 41 deletions(-) diff --git a/main.nf b/main.nf index 6a200495..a1e8bb95 100644 --- a/main.nf +++ b/main.nf @@ -13,74 +13,137 @@ nextflow.enable.dsl = 2 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - GENOME PARAMETER VALUES + IMPORT FUNCTIONS / MODULES / SUBWORKFLOWS / WORKFLOWS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') -params.bwa_index = WorkflowMain.getGenomeAttribute(params, 'bwa') -params.bowtie2_index = WorkflowMain.getGenomeAttribute(params, 'bowtie2') -params.chromap_index = WorkflowMain.getGenomeAttribute(params, 'chromap') -params.star_index = WorkflowMain.getGenomeAttribute(params, 'star') -params.gtf = WorkflowMain.getGenomeAttribute(params, 'gtf') -params.gff = WorkflowMain.getGenomeAttribute(params, 'gff') -params.gene_bed = WorkflowMain.getGenomeAttribute(params, 'gene_bed') -params.tss_bed = WorkflowMain.getGenomeAttribute(params, 'tss_bed') -params.blacklist = WorkflowMain.getGenomeAttribute(params, 'blacklist') -params.mito_name = WorkflowMain.getGenomeAttribute(params, 'mito_name') -params.macs_gsize = WorkflowMain.getMacsGsize(params) +include { ATACSEQ } from './workflows/atacseq' +include { PREPARE_GENOME } from './subworkflows/local/prepare_genome' +include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_atacseq_pipeline' +include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_atacseq_pipeline' +include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_atacseq_pipeline' +include { getMacsGsize } from './subworkflows/local/utils_nfcore_atacseq_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - VALIDATE & PRINT PARAMETER SUMMARY + GENOME PARAMETER VALUES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { validateParameters; paramsHelp } from 'plugin/nf-validation' - -// Print help message if needed -if (params.help) { - def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) - def citation = '\n' + WorkflowMain.citation(workflow) + '\n' - def String command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" - log.info logo + paramsHelp(command) + citation + NfcoreTemplate.dashedLine(params.monochrome_logs) - System.exit(0) -} - -// Validate input parameters -if (params.validate_params) { - validateParameters() -} - -WorkflowMain.initialise(workflow, params, log, args) +params.fasta = getGenomeAttribute('fasta') +params.bwa_index = getGenomeAttribute('bwa') +params.bowtie2_index = getGenomeAttribute('bowtie2') +params.chromap_index = getGenomeAttribute('chromap') +params.star_index = getGenomeAttribute('star') +params.gtf = getGenomeAttribute('gtf') +params.gff = getGenomeAttribute('gff') +params.gene_bed = getGenomeAttribute('gene_bed') +params.tss_bed = getGenomeAttribute('tss_bed') +params.blacklist = getGenomeAttribute('blacklist') +params.mito_name = getGenomeAttribute('mito_name') +params.macs_gsize = getMacsGsize(params) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - NAMED WORKFLOW FOR PIPELINE + NAMED WORKFLOWS FOR PIPELINE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { ATACSEQ } from './workflows/atacseq' - // -// WORKFLOW: Run main nf-core/atacseq analysis pipeline +// WORKFLOW: Run main analysis pipeline // workflow NFCORE_ATACSEQ { - ATACSEQ () + + main: + ch_versions = Channel.empty() + + // SUBWORKFLOW: Prepare genome files + PREPARE_GENOME ( + params.aligner, + params.fasta, + params.gtf, + params.gff, + params.blacklist, + params.gene_bed, + params.tss_bed, + params.mito_name, + params.keep_mito, + params.bwa_index, + params.bowtie2_index, + params.chromap_index, + params.star_index, + params.macs_gsize, + params.read_length + ) + ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) + + // + // WORKFLOW: Run nf-core/rnaseq workflow + // + ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) + + ATACSEQ ( + params.input, + ch_versions, + PREPARE_GENOME.out.fasta, + PREPARE_GENOME.out.fai, + PREPARE_GENOME.out.gtf, + PREPARE_GENOME.out.gene_bed, + PREPARE_GENOME.out.tss_bed, + PREPARE_GENOME.out.chrom_sizes, + PREPARE_GENOME.out.filtered_bed, + PREPARE_GENOME.out.bwa_index, + PREPARE_GENOME.out.bowtie2_index, + PREPARE_GENOME.out.chromap_index, + PREPARE_GENOME.out.star_index, + PREPARE_GENOME.out.autosomes, + PREPARE_GENOME.out.macs_gsize + ) + + emit: + multiqc_report = ATACSEQ.out.multiqc_report // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [version1, version2, ...] } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - RUN ALL WORKFLOWS + RUN MAIN WORKFLOW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// -// WORKFLOW: Execute a single named workflow for the pipeline -// See: https://github.com/nf-core/rnaseq/issues/619 -// workflow { + + main: + + // + // SUBWORKFLOW: Run initialisation tasks + // + PIPELINE_INITIALISATION ( + params.version, + params.help, + params.validate_params, + params.monochrome_logs, + args, + params.outdir + ) + + // + // WORKFLOW: Run main workflow + // NFCORE_ATACSEQ () + + // + // SUBWORKFLOW: Run completion tasks + // + PIPELINE_COMPLETION ( + params.email, + params.email_on_fail, + params.plaintext_email, + params.outdir, + params.monochrome_logs, + params.hook_url, + NFCORE_ATACSEQ.out.multiqc_report + ) } /* From 17380f6d74749608ef5ee89349d5308f2b980390 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 13:24:23 +0100 Subject: [PATCH 07/15] Update atacseq --- workflows/atacseq.nf | 256 +++++++++++++++++-------------------------- 1 file changed, 103 insertions(+), 153 deletions(-) diff --git a/workflows/atacseq.nf b/workflows/atacseq.nf index 6eeaa50c..f0b0fd08 100644 --- a/workflows/atacseq.nf +++ b/workflows/atacseq.nf @@ -1,74 +1,23 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PRINT PARAMS SUMMARY -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-validation' - -def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) -def citation = '\n' + WorkflowMain.citation(workflow) + '\n' -def summary_params = paramsSummaryMap(workflow) - -// Print parameter summary log to screen -log.info logo + paramsSummaryLog(workflow) + citation - -// Validate input parameters -WorkflowAtacseq.initialise(params, log) - -// Check mandatory parameters -ch_input = file(params.input) - -// Check ataqv_mito_reference parameter -ataqv_mito_reference = params.ataqv_mito_reference -if (!params.ataqv_mito_reference && params.mito_name) { - ataqv_mito_reference = params.mito_name -} - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - CONFIG FILES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) -ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() -ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo) : Channel.empty() -ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - - -// JSON files required by BAMTools for alignment filtering -ch_bamtools_filter_se_config = file(params.bamtools_filter_se_config) -ch_bamtools_filter_pe_config = file(params.bamtools_filter_pe_config) - -// Header files for MultiQC -ch_multiqc_merged_library_peak_count_header = file("$projectDir/assets/multiqc/merged_library_peak_count_header.txt", checkIfExists: true) -ch_multiqc_merged_library_frip_score_header = file("$projectDir/assets/multiqc/merged_library_frip_score_header.txt", checkIfExists: true) -ch_multiqc_merged_library_peak_annotation_header = file("$projectDir/assets/multiqc/merged_library_peak_annotation_header.txt", checkIfExists: true) -ch_multiqc_merged_library_deseq2_pca_header = file("$projectDir/assets/multiqc/merged_library_deseq2_pca_header.txt", checkIfExists: true) -ch_multiqc_merged_library_deseq2_clustering_header = file("$projectDir/assets/multiqc/merged_library_deseq2_clustering_header.txt", checkIfExists: true) - -ch_multiqc_merged_replicate_peak_count_header = file("$projectDir/assets/multiqc/merged_replicate_peak_count_header.txt", checkIfExists: true) -ch_multiqc_merged_replicate_frip_score_header = file("$projectDir/assets/multiqc/merged_replicate_frip_score_header.txt", checkIfExists: true) -ch_multiqc_merged_replicate_peak_annotation_header = file("$projectDir/assets/multiqc/merged_replicate_peak_annotation_header.txt", checkIfExists: true) -ch_multiqc_merged_replicate_deseq2_pca_header = file("$projectDir/assets/multiqc/merged_replicate_deseq2_pca_header.txt", checkIfExists: true) -ch_multiqc_merged_replicate_deseq2_clustering_header = file("$projectDir/assets/multiqc/merged_replicate_deseq2_clustering_header.txt", checkIfExists: true) - /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IMPORT LOCAL MODULES/SUBWORKFLOWS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +// +// MODULE: Loaded from modules/local/ +// include { IGV } from '../modules/local/igv' include { MULTIQC } from '../modules/local/multiqc' // // SUBWORKFLOW: Consisting of a mix of local and nf-core/modules // -include { INPUT_CHECK } from '../subworkflows/local/input_check' -include { PREPARE_GENOME } from '../subworkflows/local/prepare_genome' -include { ALIGN_STAR } from '../subworkflows/local/align_star' +include { paramsSummaryMap } from 'plugin/nf-validation' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { INPUT_CHECK } from '../subworkflows/local/input_check' +include { ALIGN_STAR } from '../subworkflows/local/align_star' include { BIGWIG_PLOT_DEEPTOOLS as MERGED_LIBRARY_BIGWIG_PLOT_DEEPTOOLS } from '../subworkflows/local/bigwig_plot_deeptools' include { BAM_FILTER_BAMTOOLS as MERGED_LIBRARY_FILTER_BAM } from '../subworkflows/local/bam_filter_bamtools' include { BAM_BEDGRAPH_BIGWIG_BEDTOOLS_UCSC as MERGED_LIBRARY_BAM_TO_BIGWIG } from '../subworkflows/local/bam_bedgraph_bigwig_bedtools_ucsc' @@ -115,24 +64,55 @@ include { BAM_MARKDUPLICATES_PICARD as MERGED_REPLICATE_MARKDUPLICATES_PICARD } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -// Info required for completion email and summary -def multiqc_report = [] +// JSON files required by BAMTools for alignment filtering +ch_bamtools_filter_se_config = file(params.bamtools_filter_se_config) +ch_bamtools_filter_pe_config = file(params.bamtools_filter_pe_config) -workflow ATACSEQ { +// Header files for MultiQC +ch_multiqc_merged_library_peak_count_header = file("$projectDir/assets/multiqc/merged_library_peak_count_header.txt", checkIfExists: true) +ch_multiqc_merged_library_frip_score_header = file("$projectDir/assets/multiqc/merged_library_frip_score_header.txt", checkIfExists: true) +ch_multiqc_merged_library_peak_annotation_header = file("$projectDir/assets/multiqc/merged_library_peak_annotation_header.txt", checkIfExists: true) +ch_multiqc_merged_library_deseq2_pca_header = file("$projectDir/assets/multiqc/merged_library_deseq2_pca_header.txt", checkIfExists: true) +ch_multiqc_merged_library_deseq2_clustering_header = file("$projectDir/assets/multiqc/merged_library_deseq2_clustering_header.txt", checkIfExists: true) - ch_versions = Channel.empty() +ch_multiqc_merged_replicate_peak_count_header = file("$projectDir/assets/multiqc/merged_replicate_peak_count_header.txt", checkIfExists: true) +ch_multiqc_merged_replicate_frip_score_header = file("$projectDir/assets/multiqc/merged_replicate_frip_score_header.txt", checkIfExists: true) +ch_multiqc_merged_replicate_peak_annotation_header = file("$projectDir/assets/multiqc/merged_replicate_peak_annotation_header.txt", checkIfExists: true) +ch_multiqc_merged_replicate_deseq2_pca_header = file("$projectDir/assets/multiqc/merged_replicate_deseq2_pca_header.txt", checkIfExists: true) +ch_multiqc_merged_replicate_deseq2_clustering_header = file("$projectDir/assets/multiqc/merged_replicate_deseq2_clustering_header.txt", checkIfExists: true) - // - // SUBWORKFLOW: Uncompress and prepare reference genome files - // - PREPARE_GENOME ( - params.aligner - ) - ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) +// Check ataqv_mito_reference parameter +ataqv_mito_reference = params.ataqv_mito_reference +if (!params.ataqv_mito_reference && params.mito_name) { + ataqv_mito_reference = params.mito_name +} + +workflow ATACSEQ { + + take: + ch_samplesheet // channel: path(sample_sheet.csv) + ch_versions // channel: [ path(versions.yml) ] + ch_fasta // channel: path(genome.fa) + ch_fai // channel: path(genome.fai) + ch_gtf // channel: path(genome.gtf) + ch_gene_bed // channel: path(gene.beds) + ch_tss_bed // channel: path(genome.tss.bed) + ch_chrom_sizes // channel: path(chrom.sizes) + ch_filtered_bed // channel: path(filtered.bed) + ch_bwa_index // channel: path(bwa/index/) + ch_bowtie2_index // channel: path(bowtie2/index) + ch_chromap_index // channel: path(chromap.index) + ch_star_index // channel: path(star/index/) + ch_autosomes // channel: path(autosomes.txt) + ch_macs_gsize // channel: integer + + main: + ch_multiqc_files = Channel.empty() // // SUBWORKFLOW: Read in samplesheet, validate and stage input files // + ch_input = file(ch_samplesheet) INPUT_CHECK ( ch_input, params.seq_center, @@ -167,9 +147,9 @@ workflow ATACSEQ { if (params.aligner == 'bwa') { FASTQ_ALIGN_BWA ( FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads, - PREPARE_GENOME.out.bwa_index, + ch_bwa_index, false, - PREPARE_GENOME.out.fasta + ch_fasta .map { [ [:], it ] } @@ -187,10 +167,10 @@ workflow ATACSEQ { if (params.aligner == 'bowtie2') { FASTQ_ALIGN_BOWTIE2 ( FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads, - PREPARE_GENOME.out.bowtie2_index, + ch_bowtie2_index, params.save_unaligned, false, - PREPARE_GENOME.out.fasta + ch_fasta .map { [ [:], it ] } @@ -208,8 +188,8 @@ workflow ATACSEQ { if (params.aligner == 'chromap') { FASTQ_ALIGN_CHROMAP ( FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads, - PREPARE_GENOME.out.chromap_index, - PREPARE_GENOME.out.fasta + ch_chromap_index, + ch_fasta .map { [ [:], it ] }, @@ -232,8 +212,8 @@ workflow ATACSEQ { if (params.aligner == 'star') { ALIGN_STAR ( FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.reads, - PREPARE_GENOME.out.star_index, - PREPARE_GENOME.out.fasta + ch_star_index, + ch_fasta .map { [ [:], it ] }, @@ -276,13 +256,11 @@ workflow ATACSEQ { // MERGED_LIBRARY_MARKDUPLICATES_PICARD ( PICARD_MERGESAMFILES_LIBRARY.out.bam, - PREPARE_GENOME - .out - .fasta + ch_fasta .map { [ [:], it ] }, - PREPARE_GENOME.out.fai + ch_fai .map { [ [:], it ] } @@ -304,10 +282,8 @@ workflow ATACSEQ { [ meta, bam, csi ] } }, - PREPARE_GENOME.out.filtered_bed.first(), - PREPARE_GENOME - .out - .fasta + ch_filtered_bed.first(), + ch_fasta .map { [ [:], it ] }, @@ -340,15 +316,11 @@ workflow ATACSEQ { .map { [ it[0], it[1], [] ] }, - PREPARE_GENOME - .out - .fasta + ch_fasta .map { [ [:], it ] }, - PREPARE_GENOME - .out - .fai + ch_fai .map { [ [:], it ] } @@ -362,7 +334,7 @@ workflow ATACSEQ { // MERGED_LIBRARY_BAM_TO_BIGWIG ( MERGED_LIBRARY_FILTER_BAM.out.bam.join(MERGED_LIBRARY_FILTER_BAM.out.flagstat, by: [0]), - PREPARE_GENOME.out.chrom_sizes + ch_chrom_sizes ) ch_versions = ch_versions.mix(MERGED_LIBRARY_BAM_TO_BIGWIG.out.versions) @@ -373,8 +345,8 @@ workflow ATACSEQ { if (!params.skip_plot_profile) { MERGED_LIBRARY_BIGWIG_PLOT_DEEPTOOLS ( MERGED_LIBRARY_BAM_TO_BIGWIG.out.bigwig, - PREPARE_GENOME.out.gene_bed, - PREPARE_GENOME.out.tss_bed + ch_gene_bed, + ch_tss_bed ) ch_deeptoolsplotprofile_multiqc = MERGED_LIBRARY_BIGWIG_PLOT_DEEPTOOLS.out.plotprofile_table ch_versions = ch_versions.mix(MERGED_LIBRARY_BIGWIG_PLOT_DEEPTOOLS.out.versions) @@ -448,9 +420,9 @@ workflow ATACSEQ { // MERGED_LIBRARY_CALL_ANNOTATE_PEAKS ( ch_bam_library, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.gtf, - PREPARE_GENOME.out.macs_gsize, + ch_fasta, + ch_gtf, + ch_macs_gsize, ".mLb.clN_peaks.annotatePeaks.txt", ch_multiqc_merged_library_peak_count_header, ch_multiqc_merged_library_frip_score_header, @@ -472,8 +444,8 @@ workflow ATACSEQ { MERGED_LIBRARY_CONSENSUS_PEAKS ( MERGED_LIBRARY_CALL_ANNOTATE_PEAKS.out.peaks, ch_bam_library, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.gtf, + ch_fasta, + ch_gtf, ch_multiqc_merged_library_deseq2_pca_header, ch_multiqc_merged_library_deseq2_clustering_header, params.narrow_peak, @@ -512,9 +484,9 @@ workflow ATACSEQ { ch_bam_peaks, 'NA', ataqv_mito_reference ?: '', - PREPARE_GENOME.out.tss_bed, + ch_tss_bed, [], - PREPARE_GENOME.out.autosomes + ch_autosomes ) ch_versions = ch_versions.mix(MERGED_LIBRARY_ATAQV_ATAQV.out.versions.first()) @@ -575,13 +547,11 @@ workflow ATACSEQ { // MERGED_REPLICATE_MARKDUPLICATES_PICARD ( PICARD_MERGESAMFILES_REPLICATE.out.bam, - PREPARE_GENOME - .out - .fasta + ch_fasta .map { [ [:], it ] }, - PREPARE_GENOME.out.fai + ch_fai .map { [ [:], it ] } @@ -596,7 +566,7 @@ workflow ATACSEQ { // MERGED_REPLICATE_BAM_TO_BIGWIG ( MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.bam.join(MERGED_REPLICATE_MARKDUPLICATES_PICARD.out.flagstat, by: [0]), - PREPARE_GENOME.out.chrom_sizes + ch_chrom_sizes ) ch_ucsc_bedgraphtobigwig_replicate_bigwig = MERGED_REPLICATE_BAM_TO_BIGWIG.out.bigwig ch_versions = ch_versions.mix(MERGED_REPLICATE_BAM_TO_BIGWIG.out.versions) @@ -637,9 +607,9 @@ workflow ATACSEQ { // MERGED_REPLICATE_CALL_ANNOTATE_PEAKS ( ch_bam_replicate, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.gtf, - PREPARE_GENOME.out.macs_gsize, + ch_fasta, + ch_gtf, + ch_macs_gsize, ".mRp.clN_peaks.annotatePeaks.txt", ch_multiqc_merged_replicate_peak_count_header, ch_multiqc_merged_replicate_frip_score_header, @@ -661,8 +631,8 @@ workflow ATACSEQ { MERGED_REPLICATE_CONSENSUS_PEAKS ( MERGED_REPLICATE_CALL_ANNOTATE_PEAKS.out.peaks, ch_merged_library_replicate_bam, - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.gtf, + ch_fasta, + ch_gtf, ch_multiqc_merged_replicate_deseq2_pca_header, ch_multiqc_merged_replicate_deseq2_clustering_header, params.narrow_peak, @@ -682,8 +652,8 @@ workflow ATACSEQ { // if (!params.skip_igv) { IGV ( - PREPARE_GENOME.out.fasta, - PREPARE_GENOME.out.fai, + ch_fasta, + ch_fai, MERGED_LIBRARY_BAM_TO_BIGWIG.out.bigwig.collect{it[1]}.ifEmpty([]), MERGED_LIBRARY_CALL_ANNOTATE_PEAKS.out.peaks.collect{it[1]}.ifEmpty([]), ch_macs2_consensus_library_bed.collect{it[1]}.ifEmpty([]), @@ -711,27 +681,29 @@ workflow ATACSEQ { } // - // MODULE: Pipeline reporting + // Collate and save software versions // - CUSTOM_DUMPSOFTWAREVERSIONS ( - ch_versions.unique().collectFile(name: 'collated_versions.yml') - ) + softwareVersionsToYAML(ch_versions) + .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_rnaseq_software_mqc_versions.yml', sort: true, newLine: true) + .set { ch_collated_versions } // // MODULE: MultiQC // if (!params.skip_multiqc) { - workflow_summary = WorkflowAtacseq.paramsSummaryMultiqc(workflow, summary_params) - ch_workflow_summary = Channel.value(workflow_summary) - - methods_description = WorkflowAtacseq.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description, params) - ch_methods_description = Channel.value(methods_description) + ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true) + ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config) : Channel.empty() + ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo) : Channel.empty() + summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) MULTIQC ( - ch_multiqc_config, - ch_multiqc_custom_config.collect().ifEmpty([]), - CUSTOM_DUMPSOFTWAREVERSIONS.out.mqc_yml.collect(), - ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'), + ch_multiqc_files.collect(), + ch_multiqc_config.toList(), + ch_multiqc_custom_config.toList(), + ch_multiqc_logo.toList(), FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.fastqc_zip.collect{it[1]}.ifEmpty([]), FASTQ_FASTQC_UMITOOLS_TRIMGALORE.out.trim_zip.collect{it[1]}.ifEmpty([]), @@ -776,34 +748,12 @@ workflow ATACSEQ { ch_deseq2_pca_replicate_multiqc.collect().ifEmpty([]), ch_deseq2_clustering_replicate_multiqc.collect().ifEmpty([]) ) - multiqc_report = MULTIQC.out.report.toList() + ch_multiqc_report = MULTIQC.out.report } -} -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - COMPLETION EMAIL AND SUMMARY -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -workflow.onComplete { - if (params.email || params.email_on_fail) { - NfcoreTemplate.email(workflow, params, summary_params, projectDir, log, multiqc_report) - } - NfcoreTemplate.dump_parameters(workflow, params) - NfcoreTemplate.summary(workflow, params, log) - if (params.hook_url) { - NfcoreTemplate.IM_notification(workflow, params, summary_params, projectDir, log) - } - - NfcoreTemplate.summary(workflow, params, log) -} - -workflow.onError { - if (workflow.errorReport.contains("Process requirement exceeds available memory")) { - println("🛑 Default resources exceed availability 🛑 ") - println("💡 See here on how to configure pipeline: https://nf-co.re/docs/usage/configuration#tuning-workflow-resources 💡") - } + emit: + multiqc_report = ch_multiqc_report // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] } /* From 0a9134d1aece3b6d142266888495f07f4a2ff7c9 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 13:29:43 +0100 Subject: [PATCH 08/15] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54efa23f..b6a3e312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements & fixes -- [[#327](https://github.com/nf-core/atacseq/issues/327)]Consistently support `.csi` indices as alternative to `.bai` to allow SAMTOOLS_INDEX to be used with the `-c` flag. +- [[#327](https://github.com/nf-core/atacseq/issues/327)] - Consistently support `.csi` indices as alternative to `.bai` to allow SAMTOOLS_INDEX to be used with the `-c` flag. - Updated pipeline template to [nf-core/tools 2.10](https://github.com/nf-core/tools/releases/tag/2.10) +- [[#356](https://github.com/nf-core/atacseq/issues/356)] - Get rid of the `lib` folder and rearrange the pipeline accordingly. ## [[2.1.2](https://github.com/nf-core/atacseq/releases/tag/2.1.2)] - 2022-08-07 From e84c1fb9a4249d853975bd7bde832a646a90178d Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 13:36:31 +0100 Subject: [PATCH 09/15] Make lint happy --- main.nf | 2 +- .../params_2024-03-19_16-59-36.json | 765 ++++++++++++++++++ subworkflows/local/prepare_genome.nf | 2 +- .../utils_nfcore_atacseq_pipeline/main.nf | 2 +- 4 files changed, 768 insertions(+), 3 deletions(-) create mode 100644 result/pipeline_info/params_2024-03-19_16-59-36.json diff --git a/main.nf b/main.nf index a1e8bb95..aacf8d34 100644 --- a/main.nf +++ b/main.nf @@ -81,7 +81,7 @@ workflow NFCORE_ATACSEQ { // WORKFLOW: Run nf-core/rnaseq workflow // ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) - + ATACSEQ ( params.input, ch_versions, diff --git a/result/pipeline_info/params_2024-03-19_16-59-36.json b/result/pipeline_info/params_2024-03-19_16-59-36.json new file mode 100644 index 00000000..fafd1790 --- /dev/null +++ b/result/pipeline_info/params_2024-03-19_16-59-36.json @@ -0,0 +1,765 @@ +{ + "input": "https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/samplesheet/v2.0/samplesheet_test.csv", + "seq_center": null, + "fragment_size": 200, + "fingerprint_bins": 100, + "read_length": 50, + "with_control": false, + "genome": null, + "igenomes_base": "s3://ngi-igenomes/igenomes/", + "igenomes_ignore": false, + "save_reference": false, + "ataqv_mito_reference": null, + "clip_r1": null, + "clip_r2": null, + "three_prime_clip_r1": null, + "three_prime_clip_r2": null, + "trim_nextseq": null, + "skip_trimming": false, + "save_trimmed": false, + "min_trimmed_reads": 10000, + "aligner": "bwa", + "bwa_min_score": null, + "keep_mito": false, + "keep_dups": false, + "keep_multi_map": false, + "skip_merge_replicates": false, + "save_align_intermeds": false, + "save_unaligned": false, + "narrow_peak": false, + "broad_cutoff": 0.1, + "macs_fdr": null, + "macs_pvalue": null, + "min_reps_consensus": 1, + "save_macs_pileup": false, + "skip_peak_qc": false, + "skip_peak_annotation": false, + "skip_consensus_peaks": false, + "deseq2_vst": true, + "skip_deseq2_qc": false, + "skip_qc": false, + "skip_fastqc": false, + "skip_picard_metrics": false, + "skip_preseq": true, + "skip_plot_profile": false, + "skip_plot_fingerprint": false, + "skip_ataqv": false, + "skip_igv": false, + "skip_multiqc": false, + "bamtools_filter_pe_config": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/bamtools_filter_pe.json", + "bamtools_filter_se_config": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/bamtools_filter_se.json", + "multiqc_config": null, + "multiqc_title": null, + "multiqc_logo": null, + "max_multiqc_email_size": "25.MB", + "multiqc_methods_description": null, + "outdir": "./result", + "publish_dir_mode": "copy", + "email": null, + "email_on_fail": null, + "plaintext_email": false, + "monochrome_logs": false, + "hook_url": null, + "help": false, + "version": false, + "config_profile_name": "Test profile", + "config_profile_description": "Minimal test dataset to check pipeline function", + "custom_config_version": "master", + "custom_config_base": "https://raw.githubusercontent.com/nf-core/configs/master", + "config_profile_contact": null, + "config_profile_url": null, + "max_memory": "6.GB", + "max_cpus": 2, + "max_time": "6.h", + "validationFailUnrecognisedParams": false, + "validation-fail-unrecognised-params": false, + "validationLenientMode": false, + "validation-lenient-mode": false, + "validationSchemaIgnoreParams": "genomes,igenomes_base", + "validation-schema-ignore-params": "genomes,igenomes_base", + "validationShowHiddenParams": false, + "validation-show-hidden-params": false, + "validate_params": true, + "mito_name": "MT", + "fasta": "https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/reference/genome.fa", + "gtf": "https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/reference/genes.gtf", + "genomes": { + "GRCh37": { + "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt", + "mito_name": "MT", + "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v1.0/GRCh37-blacklist.v1.bed", + "macs_gsize": { + "50": 2684219875, + "75": 2733035409, + "100": 2774803719, + "150": 2824648687, + "200": 2848794782 + } + }, + "GRCh38": { + "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed", + "mito_name": "chrM", + "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v3.0/hg38-blacklist.v3.bed", + "macs_gsize": { + "50": 2701262066, + "75": 2749859687, + "100": 2805665311, + "150": 2862089864, + "200": 2892537351 + } + }, + "CHM13": { + "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/", + "bwamem2": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/", + "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf", + "gff": "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz", + "mito_name": "chrM" + }, + "GRCm38": { + "fasta": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Annotation/README.txt", + "mito_name": "MT", + "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v2.0/GRCm38-blacklist.v2.bed", + "macs_gsize": { + "50": 2307679482, + "75": 2406655830, + "100": 2466184610, + "150": 2492306232, + "200": 2519386924 + } + }, + "TAIR10": { + "fasta": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt", + "mito_name": "Mt", + "macs_gsize": { + "50": 114339094, + "75": 115317469, + "100": 118459858, + "150": 118504138, + "200": 117723393 + } + }, + "EB2": { + "fasta": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt", + "macs_gsize": { + "50": 4150072, + "75": 4191132, + "100": 4198752, + "150": 4176800, + "200": 4197072 + } + }, + "UMD3.1": { + "fasta": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt", + "mito_name": "MT", + "macs_gsize": { + "50": 2370644326, + "75": 2480511357, + "100": 2567220492, + "150": 2594494201, + "200": 2648740387 + } + }, + "WBcel235": { + "fasta": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed", + "mito_name": "MtDNA", + "macs_gsize": { + "50": 95159402, + "75": 96945370, + "100": 98259898, + "150": 98721103, + "200": 98672558 + } + }, + "CanFam3.1": { + "fasta": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt", + "mito_name": "MT", + "macs_gsize": { + "50": 2237684358, + "75": 2279860111, + "100": 2293979635, + "150": 2300527794, + "200": 2313332891 + } + }, + "GRCz10": { + "fasta": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed", + "mito_name": "MT", + "macs_gsize": { + "50": 1172895610, + "75": 1229400206, + "100": 1253908756, + "150": 1285330773, + "200": 1292538906 + } + }, + "BDGP6": { + "fasta": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed", + "mito_name": "M", + "macs_gsize": { + "50": 123519388, + "75": 124886264, + "100": 126807034, + "150": 126903604, + "200": 128575605 + } + }, + "EquCab2": { + "fasta": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Annotation/README.txt", + "mito_name": "MT", + "macs_gsize": { + "50": 2294980416, + "75": 2289244826, + "100": 2334155865, + "150": 2343297042, + "200": 2350515523 + } + }, + "EB1": { + "fasta": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt", + "macs_gsize": { + "50": 4481912, + "75": 4485018, + "100": 4468952, + "150": 4489684, + "200": 4527891 + } + }, + "Galgal4": { + "fasta": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed", + "mito_name": "MT", + "macs_gsize": { + "50": 974987959, + "75": 978772437, + "100": 984935167, + "150": 979442039, + "200": 991678648 + } + }, + "Gm01": { + "fasta": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Annotation/README.txt", + "macs_gsize": { + "50": 748112428, + "75": 826455017, + "100": 857283568, + "150": 895077451, + "200": 911783687 + } + }, + "Mmul_1": { + "fasta": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt", + "mito_name": "MT", + "macs_gsize": { + "50": 2498932238, + "75": 2598624693, + "100": 2642166663, + "150": 2661433343, + "200": 2674888870 + } + }, + "IRGSP-1.0": { + "fasta": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed", + "mito_name": "Mt", + "macs_gsize": { + "50": 322594956, + "75": 337043804, + "100": 345775274, + "150": 355020671, + "200": 363478234 + } + }, + "CHIMP2.1.4": { + "fasta": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt", + "mito_name": "MT", + "macs_gsize": { + "50": 2576111695, + "75": 2702821987, + "100": 2733435831, + "150": 2735167196, + "200": 2738912507 + } + }, + "Rnor_5.0": { + "fasta": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed", + "mito_name": "MT", + "macs_gsize": { + "50": 2303951475, + "75": 2367071843, + "100": 2402745922, + "150": 2405692811, + "200": 2407324495 + } + }, + "Rnor_6.0": { + "fasta": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed", + "mito_name": "MT", + "macs_gsize": { + "50": 2375372135, + "75": 2440746491, + "100": 2480029900, + "150": 2477334634, + "200": 2478552171 + } + }, + "R64-1-1": { + "fasta": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed", + "mito_name": "MT", + "macs_gsize": { + "50": 11624332, + "75": 11693438, + "100": 11777680, + "150": 11783749, + "200": 11825681 + } + }, + "EF2": { + "fasta": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt", + "mito_name": "MT", + "macs_gsize": { + "50": 12190646, + "75": 12291456, + "100": 12346649, + "150": 12403911, + "200": 12442064 + } + }, + "Sbi1": { + "fasta": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt", + "macs_gsize": { + "50": 444102512, + "75": 506986021, + "100": 540037446, + "150": 575130820, + "200": 595857042 + } + }, + "Sscrofa10.2": { + "fasta": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt", + "mito_name": "MT", + "macs_gsize": { + "50": 2105185708, + "75": 2131615607, + "100": 2149244400, + "150": 2189757848, + "200": 2203893315 + } + }, + "AGPv3": { + "fasta": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed", + "mito_name": "Mt", + "macs_gsize": { + "50": 1113453752, + "75": 1392458449, + "100": 1579923466, + "150": 1729475311, + "200": 1841419596 + } + }, + "hg38": { + "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed", + "mito_name": "chrM", + "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v3.0/hg38-blacklist.v3.bed", + "macs_gsize": { + "50": 2701262066, + "75": 2749859687, + "100": 2805665311, + "150": 2862089864, + "200": 2892537351 + } + }, + "hg19": { + "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Annotation/README.txt", + "mito_name": "chrM", + "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v1.0/hg19-blacklist.v1.bed", + "macs_gsize": { + "50": 2684219875, + "75": 2733035409, + "100": 2774803719, + "150": 2824648687, + "200": 2848794782 + } + }, + "mm10": { + "fasta": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Annotation/README.txt", + "mito_name": "chrM", + "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v2.0/mm10-blacklist.v2.bed", + "macs_gsize": { + "50": 2307679482, + "75": 2406655830, + "100": 2466184610, + "150": 2492306232, + "200": 2519386924 + } + }, + "bosTau8": { + "fasta": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed", + "mito_name": "chrM", + "macs_gsize": { + "50": 2370644326, + "75": 2480511357, + "100": 2567220492, + "150": 2594494201, + "200": 2648740387 + } + }, + "ce10": { + "fasta": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt", + "mito_name": "chrM", + "macs_gsize": { + "50": 95156190, + "75": 96995949, + "100": 98287299, + "150": 98879728, + "200": 98769409 + } + }, + "canFam3": { + "fasta": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Annotation/README.txt", + "mito_name": "chrM", + "macs_gsize": { + "50": 2237684358, + "75": 2279860111, + "100": 2293979635, + "150": 2300527794, + "200": 2313332891 + } + }, + "danRer10": { + "fasta": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed", + "mito_name": "chrM", + "macs_gsize": { + "50": 1172895610, + "75": 1229400206, + "100": 1253908756, + "150": 1285330773, + "200": 1292538906 + } + }, + "dm6": { + "fasta": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed", + "mito_name": "chrM", + "macs_gsize": { + "50": 123548253, + "75": 124886264, + "100": 126807034, + "150": 126908682, + "200": 128599061 + } + }, + "equCab2": { + "fasta": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Annotation/README.txt", + "mito_name": "chrM", + "macs_gsize": { + "50": 2294980416, + "75": 2289244826, + "100": 2334155865, + "150": 2343297042, + "200": 2350515523 + } + }, + "galGal4": { + "fasta": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Annotation/README.txt", + "mito_name": "chrM", + "macs_gsize": { + "50": 974987959, + "75": 978772437, + "100": 984935167, + "150": 979442039, + "200": 991678648 + } + }, + "panTro4": { + "fasta": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Annotation/README.txt", + "mito_name": "chrM", + "macs_gsize": { + "50": 2576111695, + "75": 2702821987, + "100": 2733435831, + "150": 2735167196, + "200": 2738912507 + } + }, + "rn6": { + "fasta": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed", + "mito_name": "chrM", + "macs_gsize": { + "50": 2375372135, + "75": 2440746491, + "100": 2480029900, + "150": 2477334634, + "200": 2478552171 + } + }, + "sacCer3": { + "fasta": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/", + "readme": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt", + "mito_name": "chrM", + "macs_gsize": { + "50": 11624332, + "75": 11693438, + "100": 11777680, + "150": 11783749, + "200": 11825681 + } + }, + "susScr3": { + "fasta": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa", + "bwa": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/", + "bowtie2": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/", + "star": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/", + "bismark": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/", + "gtf": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf", + "bed12": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed", + "readme": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Annotation/README.txt", + "mito_name": "chrM", + "macs_gsize": { + "50": 2105185708, + "75": 2131615607, + "100": 2149244400, + "150": 2189757848, + "200": 2203893315 + } + } + } +} \ No newline at end of file diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 011ee7aa..ffbdba03 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -46,7 +46,7 @@ workflow PREPARE_GENOME { star_index // file: /path/to/star/index/ macs_gsize // integer: MACS2 genome size read_length // integer: read length - + main: ch_versions = Channel.empty() diff --git a/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf index e0f08166..10828862 100644 --- a/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf @@ -154,7 +154,7 @@ def validateInputParameters() { if (!params.gtf && !params.gff) { error("No GTF or GFF3 annotation specified! The pipeline requires at least one of these files.") } - + if (params.gtf && params.gff) { gtfGffWarn(log) } From b9fcab24e141f700e8eaf7a806e6d20482724aac Mon Sep 17 00:00:00 2001 From: Jose Espinosa-Carrasco Date: Wed, 20 Mar 2024 14:33:27 +0000 Subject: [PATCH 10/15] Make lint happy --- workflows/atacseq.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/atacseq.nf b/workflows/atacseq.nf index f0b0fd08..c6c2b69b 100644 --- a/workflows/atacseq.nf +++ b/workflows/atacseq.nf @@ -101,11 +101,11 @@ workflow ATACSEQ { ch_filtered_bed // channel: path(filtered.bed) ch_bwa_index // channel: path(bwa/index/) ch_bowtie2_index // channel: path(bowtie2/index) - ch_chromap_index // channel: path(chromap.index) + ch_chromap_index // channel: path(chromap.index) ch_star_index // channel: path(star/index/) ch_autosomes // channel: path(autosomes.txt) ch_macs_gsize // channel: integer - + main: ch_multiqc_files = Channel.empty() From 5932ff21784648b1687017f36698a62b3ed3e1ac Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 16:29:10 +0100 Subject: [PATCH 11/15] Remove local leak --- .../params_2024-03-19_16-59-36.json | 765 ------------------ 1 file changed, 765 deletions(-) delete mode 100644 result/pipeline_info/params_2024-03-19_16-59-36.json diff --git a/result/pipeline_info/params_2024-03-19_16-59-36.json b/result/pipeline_info/params_2024-03-19_16-59-36.json deleted file mode 100644 index fafd1790..00000000 --- a/result/pipeline_info/params_2024-03-19_16-59-36.json +++ /dev/null @@ -1,765 +0,0 @@ -{ - "input": "https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/samplesheet/v2.0/samplesheet_test.csv", - "seq_center": null, - "fragment_size": 200, - "fingerprint_bins": 100, - "read_length": 50, - "with_control": false, - "genome": null, - "igenomes_base": "s3://ngi-igenomes/igenomes/", - "igenomes_ignore": false, - "save_reference": false, - "ataqv_mito_reference": null, - "clip_r1": null, - "clip_r2": null, - "three_prime_clip_r1": null, - "three_prime_clip_r2": null, - "trim_nextseq": null, - "skip_trimming": false, - "save_trimmed": false, - "min_trimmed_reads": 10000, - "aligner": "bwa", - "bwa_min_score": null, - "keep_mito": false, - "keep_dups": false, - "keep_multi_map": false, - "skip_merge_replicates": false, - "save_align_intermeds": false, - "save_unaligned": false, - "narrow_peak": false, - "broad_cutoff": 0.1, - "macs_fdr": null, - "macs_pvalue": null, - "min_reps_consensus": 1, - "save_macs_pileup": false, - "skip_peak_qc": false, - "skip_peak_annotation": false, - "skip_consensus_peaks": false, - "deseq2_vst": true, - "skip_deseq2_qc": false, - "skip_qc": false, - "skip_fastqc": false, - "skip_picard_metrics": false, - "skip_preseq": true, - "skip_plot_profile": false, - "skip_plot_fingerprint": false, - "skip_ataqv": false, - "skip_igv": false, - "skip_multiqc": false, - "bamtools_filter_pe_config": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/bamtools_filter_pe.json", - "bamtools_filter_se_config": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/bamtools_filter_se.json", - "multiqc_config": null, - "multiqc_title": null, - "multiqc_logo": null, - "max_multiqc_email_size": "25.MB", - "multiqc_methods_description": null, - "outdir": "./result", - "publish_dir_mode": "copy", - "email": null, - "email_on_fail": null, - "plaintext_email": false, - "monochrome_logs": false, - "hook_url": null, - "help": false, - "version": false, - "config_profile_name": "Test profile", - "config_profile_description": "Minimal test dataset to check pipeline function", - "custom_config_version": "master", - "custom_config_base": "https://raw.githubusercontent.com/nf-core/configs/master", - "config_profile_contact": null, - "config_profile_url": null, - "max_memory": "6.GB", - "max_cpus": 2, - "max_time": "6.h", - "validationFailUnrecognisedParams": false, - "validation-fail-unrecognised-params": false, - "validationLenientMode": false, - "validation-lenient-mode": false, - "validationSchemaIgnoreParams": "genomes,igenomes_base", - "validation-schema-ignore-params": "genomes,igenomes_base", - "validationShowHiddenParams": false, - "validation-show-hidden-params": false, - "validate_params": true, - "mito_name": "MT", - "fasta": "https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/reference/genome.fa", - "gtf": "https://raw.githubusercontent.com/nf-core/test-datasets/atacseq/reference/genes.gtf", - "genomes": { - "GRCh37": { - "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Homo_sapiens/Ensembl/GRCh37/Annotation/README.txt", - "mito_name": "MT", - "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v1.0/GRCh37-blacklist.v1.bed", - "macs_gsize": { - "50": 2684219875, - "75": 2733035409, - "100": 2774803719, - "150": 2824648687, - "200": 2848794782 - } - }, - "GRCh38": { - "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/GRCh38/Annotation/Genes/genes.bed", - "mito_name": "chrM", - "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v3.0/hg38-blacklist.v3.bed", - "macs_gsize": { - "50": 2701262066, - "75": 2749859687, - "100": 2805665311, - "150": 2862089864, - "200": 2892537351 - } - }, - "CHM13": { - "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/CHM13/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/CHM13/Sequence/BWAIndex/", - "bwamem2": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/CHM13/Sequence/BWAmem2Index/", - "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/NCBI/CHM13/Annotation/Genes/genes.gtf", - "gff": "ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/009/914/755/GCF_009914755.1_T2T-CHM13v2.0/GCF_009914755.1_T2T-CHM13v2.0_genomic.gff.gz", - "mito_name": "chrM" - }, - "GRCm38": { - "fasta": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Mus_musculus/Ensembl/GRCm38/Annotation/README.txt", - "mito_name": "MT", - "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v2.0/GRCm38-blacklist.v2.bed", - "macs_gsize": { - "50": 2307679482, - "75": 2406655830, - "100": 2466184610, - "150": 2492306232, - "200": 2519386924 - } - }, - "TAIR10": { - "fasta": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Arabidopsis_thaliana/Ensembl/TAIR10/Annotation/README.txt", - "mito_name": "Mt", - "macs_gsize": { - "50": 114339094, - "75": 115317469, - "100": 118459858, - "150": 118504138, - "200": 117723393 - } - }, - "EB2": { - "fasta": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Bacillus_subtilis_168/Ensembl/EB2/Annotation/README.txt", - "macs_gsize": { - "50": 4150072, - "75": 4191132, - "100": 4198752, - "150": 4176800, - "200": 4197072 - } - }, - "UMD3.1": { - "fasta": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Bos_taurus/Ensembl/UMD3.1/Annotation/README.txt", - "mito_name": "MT", - "macs_gsize": { - "50": 2370644326, - "75": 2480511357, - "100": 2567220492, - "150": 2594494201, - "200": 2648740387 - } - }, - "WBcel235": { - "fasta": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/Ensembl/WBcel235/Annotation/Genes/genes.bed", - "mito_name": "MtDNA", - "macs_gsize": { - "50": 95159402, - "75": 96945370, - "100": 98259898, - "150": 98721103, - "200": 98672558 - } - }, - "CanFam3.1": { - "fasta": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Canis_familiaris/Ensembl/CanFam3.1/Annotation/README.txt", - "mito_name": "MT", - "macs_gsize": { - "50": 2237684358, - "75": 2279860111, - "100": 2293979635, - "150": 2300527794, - "200": 2313332891 - } - }, - "GRCz10": { - "fasta": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Danio_rerio/Ensembl/GRCz10/Annotation/Genes/genes.bed", - "mito_name": "MT", - "macs_gsize": { - "50": 1172895610, - "75": 1229400206, - "100": 1253908756, - "150": 1285330773, - "200": 1292538906 - } - }, - "BDGP6": { - "fasta": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/Ensembl/BDGP6/Annotation/Genes/genes.bed", - "mito_name": "M", - "macs_gsize": { - "50": 123519388, - "75": 124886264, - "100": 126807034, - "150": 126903604, - "200": 128575605 - } - }, - "EquCab2": { - "fasta": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Equus_caballus/Ensembl/EquCab2/Annotation/README.txt", - "mito_name": "MT", - "macs_gsize": { - "50": 2294980416, - "75": 2289244826, - "100": 2334155865, - "150": 2343297042, - "200": 2350515523 - } - }, - "EB1": { - "fasta": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Escherichia_coli_K_12_DH10B/Ensembl/EB1/Annotation/README.txt", - "macs_gsize": { - "50": 4481912, - "75": 4485018, - "100": 4468952, - "150": 4489684, - "200": 4527891 - } - }, - "Galgal4": { - "fasta": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Gallus_gallus/Ensembl/Galgal4/Annotation/Genes/genes.bed", - "mito_name": "MT", - "macs_gsize": { - "50": 974987959, - "75": 978772437, - "100": 984935167, - "150": 979442039, - "200": 991678648 - } - }, - "Gm01": { - "fasta": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Glycine_max/Ensembl/Gm01/Annotation/README.txt", - "macs_gsize": { - "50": 748112428, - "75": 826455017, - "100": 857283568, - "150": 895077451, - "200": 911783687 - } - }, - "Mmul_1": { - "fasta": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Macaca_mulatta/Ensembl/Mmul_1/Annotation/README.txt", - "mito_name": "MT", - "macs_gsize": { - "50": 2498932238, - "75": 2598624693, - "100": 2642166663, - "150": 2661433343, - "200": 2674888870 - } - }, - "IRGSP-1.0": { - "fasta": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Oryza_sativa_japonica/Ensembl/IRGSP-1.0/Annotation/Genes/genes.bed", - "mito_name": "Mt", - "macs_gsize": { - "50": 322594956, - "75": 337043804, - "100": 345775274, - "150": 355020671, - "200": 363478234 - } - }, - "CHIMP2.1.4": { - "fasta": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Pan_troglodytes/Ensembl/CHIMP2.1.4/Annotation/README.txt", - "mito_name": "MT", - "macs_gsize": { - "50": 2576111695, - "75": 2702821987, - "100": 2733435831, - "150": 2735167196, - "200": 2738912507 - } - }, - "Rnor_5.0": { - "fasta": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_5.0/Annotation/Genes/genes.bed", - "mito_name": "MT", - "macs_gsize": { - "50": 2303951475, - "75": 2367071843, - "100": 2402745922, - "150": 2405692811, - "200": 2407324495 - } - }, - "Rnor_6.0": { - "fasta": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/Ensembl/Rnor_6.0/Annotation/Genes/genes.bed", - "mito_name": "MT", - "macs_gsize": { - "50": 2375372135, - "75": 2440746491, - "100": 2480029900, - "150": 2477334634, - "200": 2478552171 - } - }, - "R64-1-1": { - "fasta": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/Ensembl/R64-1-1/Annotation/Genes/genes.bed", - "mito_name": "MT", - "macs_gsize": { - "50": 11624332, - "75": 11693438, - "100": 11777680, - "150": 11783749, - "200": 11825681 - } - }, - "EF2": { - "fasta": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Schizosaccharomyces_pombe/Ensembl/EF2/Annotation/README.txt", - "mito_name": "MT", - "macs_gsize": { - "50": 12190646, - "75": 12291456, - "100": 12346649, - "150": 12403911, - "200": 12442064 - } - }, - "Sbi1": { - "fasta": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Sorghum_bicolor/Ensembl/Sbi1/Annotation/README.txt", - "macs_gsize": { - "50": 444102512, - "75": 506986021, - "100": 540037446, - "150": 575130820, - "200": 595857042 - } - }, - "Sscrofa10.2": { - "fasta": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Sus_scrofa/Ensembl/Sscrofa10.2/Annotation/README.txt", - "mito_name": "MT", - "macs_gsize": { - "50": 2105185708, - "75": 2131615607, - "100": 2149244400, - "150": 2189757848, - "200": 2203893315 - } - }, - "AGPv3": { - "fasta": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Zea_mays/Ensembl/AGPv3/Annotation/Genes/genes.bed", - "mito_name": "Mt", - "macs_gsize": { - "50": 1113453752, - "75": 1392458449, - "100": 1579923466, - "150": 1729475311, - "200": 1841419596 - } - }, - "hg38": { - "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg38/Annotation/Genes/genes.bed", - "mito_name": "chrM", - "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v3.0/hg38-blacklist.v3.bed", - "macs_gsize": { - "50": 2701262066, - "75": 2749859687, - "100": 2805665311, - "150": 2862089864, - "200": 2892537351 - } - }, - "hg19": { - "fasta": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Homo_sapiens/UCSC/hg19/Annotation/README.txt", - "mito_name": "chrM", - "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v1.0/hg19-blacklist.v1.bed", - "macs_gsize": { - "50": 2684219875, - "75": 2733035409, - "100": 2774803719, - "150": 2824648687, - "200": 2848794782 - } - }, - "mm10": { - "fasta": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Mus_musculus/UCSC/mm10/Annotation/README.txt", - "mito_name": "chrM", - "blacklist": "/Users/jaespinosa/git/nf-core-stuff/nf-core-atacseq/assets/blacklists/v2.0/mm10-blacklist.v2.bed", - "macs_gsize": { - "50": 2307679482, - "75": 2406655830, - "100": 2466184610, - "150": 2492306232, - "200": 2519386924 - } - }, - "bosTau8": { - "fasta": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Bos_taurus/UCSC/bosTau8/Annotation/Genes/genes.bed", - "mito_name": "chrM", - "macs_gsize": { - "50": 2370644326, - "75": 2480511357, - "100": 2567220492, - "150": 2594494201, - "200": 2648740387 - } - }, - "ce10": { - "fasta": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Caenorhabditis_elegans/UCSC/ce10/Annotation/README.txt", - "mito_name": "chrM", - "macs_gsize": { - "50": 95156190, - "75": 96995949, - "100": 98287299, - "150": 98879728, - "200": 98769409 - } - }, - "canFam3": { - "fasta": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Canis_familiaris/UCSC/canFam3/Annotation/README.txt", - "mito_name": "chrM", - "macs_gsize": { - "50": 2237684358, - "75": 2279860111, - "100": 2293979635, - "150": 2300527794, - "200": 2313332891 - } - }, - "danRer10": { - "fasta": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Danio_rerio/UCSC/danRer10/Annotation/Genes/genes.bed", - "mito_name": "chrM", - "macs_gsize": { - "50": 1172895610, - "75": 1229400206, - "100": 1253908756, - "150": 1285330773, - "200": 1292538906 - } - }, - "dm6": { - "fasta": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Drosophila_melanogaster/UCSC/dm6/Annotation/Genes/genes.bed", - "mito_name": "chrM", - "macs_gsize": { - "50": 123548253, - "75": 124886264, - "100": 126807034, - "150": 126908682, - "200": 128599061 - } - }, - "equCab2": { - "fasta": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Equus_caballus/UCSC/equCab2/Annotation/README.txt", - "mito_name": "chrM", - "macs_gsize": { - "50": 2294980416, - "75": 2289244826, - "100": 2334155865, - "150": 2343297042, - "200": 2350515523 - } - }, - "galGal4": { - "fasta": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Gallus_gallus/UCSC/galGal4/Annotation/README.txt", - "mito_name": "chrM", - "macs_gsize": { - "50": 974987959, - "75": 978772437, - "100": 984935167, - "150": 979442039, - "200": 991678648 - } - }, - "panTro4": { - "fasta": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Pan_troglodytes/UCSC/panTro4/Annotation/README.txt", - "mito_name": "chrM", - "macs_gsize": { - "50": 2576111695, - "75": 2702821987, - "100": 2733435831, - "150": 2735167196, - "200": 2738912507 - } - }, - "rn6": { - "fasta": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Rattus_norvegicus/UCSC/rn6/Annotation/Genes/genes.bed", - "mito_name": "chrM", - "macs_gsize": { - "50": 2375372135, - "75": 2440746491, - "100": 2480029900, - "150": 2477334634, - "200": 2478552171 - } - }, - "sacCer3": { - "fasta": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Sequence/BismarkIndex/", - "readme": "s3://ngi-igenomes/igenomes//Saccharomyces_cerevisiae/UCSC/sacCer3/Annotation/README.txt", - "mito_name": "chrM", - "macs_gsize": { - "50": 11624332, - "75": 11693438, - "100": 11777680, - "150": 11783749, - "200": 11825681 - } - }, - "susScr3": { - "fasta": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/WholeGenomeFasta/genome.fa", - "bwa": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/BWAIndex/version0.6.0/", - "bowtie2": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/Bowtie2Index/", - "star": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/STARIndex/", - "bismark": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Sequence/BismarkIndex/", - "gtf": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.gtf", - "bed12": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Annotation/Genes/genes.bed", - "readme": "s3://ngi-igenomes/igenomes//Sus_scrofa/UCSC/susScr3/Annotation/README.txt", - "mito_name": "chrM", - "macs_gsize": { - "50": 2105185708, - "75": 2131615607, - "100": 2149244400, - "150": 2189757848, - "200": 2203893315 - } - } - } -} \ No newline at end of file From 1a5f178fe9db93ff64942d1da7d16d270ac78dde Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Wed, 20 Mar 2024 22:32:19 +0100 Subject: [PATCH 12/15] Bring back logic for making gene bed from supplied --gtf --- main.nf | 2 ++ subworkflows/local/prepare_genome.nf | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/main.nf b/main.nf index aacf8d34..ea664214 100644 --- a/main.nf +++ b/main.nf @@ -59,6 +59,8 @@ workflow NFCORE_ATACSEQ { // SUBWORKFLOW: Prepare genome files PREPARE_GENOME ( + params.genome, + params.genomes, params.aligner, params.fasta, params.gtf, diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index ffbdba03..dfb0807b 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -31,6 +31,8 @@ include { TSS_EXTRACT } from '../../modules/local/tss_extract' workflow PREPARE_GENOME { take: + genome // string: genome name + genomes // map: genome attributes prepare_tool_index // string: tool to prepare index for fasta // path: path to genome fasta file gtf // file: /path/to/genome.gtf @@ -95,19 +97,29 @@ workflow PREPARE_GENOME { } } - // // Uncompress gene BED annotation file or create from GTF if required // - if (gene_bed) { + // If --gtf is supplied along with --genome + // Make gene bed from supplied --gtf instead of using iGenomes one automatically + def make_bed = false + if (!gene_bed) { + make_bed = true + } else if (genome && gtf) { + if (genomes[ genome ].gtf != gtf) { + make_bed = true + } + } + + if (make_bed) { + ch_gene_bed = GTF2BED ( ch_gtf ).bed + ch_versions = ch_versions.mix(GTF2BED.out.versions) + } else { if (gene_bed.endsWith('.gz')) { - ch_gene_bed = GUNZIP_GENE_BED ( [ [:], gene_bed ] ).gunzip.map { it[1] } + ch_gene_bed = GUNZIP_GENE_BED ( [ [:], params.gene_bed ] ).gunzip.map{ it[1] } ch_versions = ch_versions.mix(GUNZIP_GENE_BED.out.versions) } else { ch_gene_bed = Channel.value(file(gene_bed)) } - } else { - ch_gene_bed = GTF2BED ( ch_gtf ).bed - ch_versions = ch_versions.mix(GTF2BED.out.versions) } if (!tss_bed) { From 39cfeb628e0204239be8598ed8a9462bbf25d6ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Langer?= <61791748+bjlang@users.noreply.github.com> Date: Thu, 21 Mar 2024 17:49:27 +0100 Subject: [PATCH 13/15] fix spaces --- subworkflows/local/prepare_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index dfb0807b..2199956a 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -32,7 +32,7 @@ include { TSS_EXTRACT } from '../../modules/local/tss_extract' workflow PREPARE_GENOME { take: genome // string: genome name - genomes // map: genome attributes + genomes // map: genome attributes prepare_tool_index // string: tool to prepare index for fasta // path: path to genome fasta file gtf // file: /path/to/genome.gtf From 367a550b3e6dbb959e8c35e7bb150d10ce22e750 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Fri, 22 Mar 2024 10:55:47 +0100 Subject: [PATCH 14/15] Make lint happy --- subworkflows/local/prepare_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/prepare_genome.nf b/subworkflows/local/prepare_genome.nf index 2199956a..36eb08cf 100644 --- a/subworkflows/local/prepare_genome.nf +++ b/subworkflows/local/prepare_genome.nf @@ -109,7 +109,7 @@ workflow PREPARE_GENOME { make_bed = true } } - + if (make_bed) { ch_gene_bed = GTF2BED ( ch_gtf ).bed ch_versions = ch_versions.mix(GTF2BED.out.versions) From eb1285ae0a78b67912f96f5fed3a7ff5ac2a8e31 Mon Sep 17 00:00:00 2001 From: JoseEspinosa Date: Tue, 2 Apr 2024 11:05:53 +0200 Subject: [PATCH 15/15] Address review comments --- main.nf | 2 +- .../utils_nfcore_atacseq_pipeline/main.nf | 33 +++++++------------ workflows/atacseq.nf | 2 +- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/main.nf b/main.nf index ea664214..051c726c 100644 --- a/main.nf +++ b/main.nf @@ -80,7 +80,7 @@ workflow NFCORE_ATACSEQ { ch_versions = ch_versions.mix(PREPARE_GENOME.out.versions) // - // WORKFLOW: Run nf-core/rnaseq workflow + // WORKFLOW: Run nf-core/atacseq workflow // ch_samplesheet = Channel.value(file(params.input, checkIfExists: true)) diff --git a/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf index 10828862..df81fad0 100644 --- a/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_atacseq_pipeline/main.nf @@ -111,6 +111,10 @@ workflow PIPELINE_COMPLETION { imNotification(summary_params, hook_url) } } + + workflow.onError { + log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting" + } } /* @@ -119,27 +123,6 @@ workflow PIPELINE_COMPLETION { ======================================================================================== */ -// -// Function to validate channels from input samplesheet -// -def validateInputSamplesheet(input) { - def (metas, fastqs) = input[1..2] - - // Check that multiple runs of the same sample are of the same strandedness - def strandedness_ok = metas.collect{ it.strandedness }.unique().size == 1 - if (!strandedness_ok) { - error("Please check input samplesheet -> Multiple runs of a sample must have the same strandedness!: ${metas[0].id}") - } - - // Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end - def endedness_ok = metas.collect{ it.single_end }.unique().size == 1 - if (!endedness_ok) { - error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}") - } - - return [ metas[0], fastqs ] -} - // // Check and validate pipeline parameters // @@ -158,6 +141,14 @@ def validateInputParameters() { if (params.gtf && params.gff) { gtfGffWarn(log) } + + if (!params.macs_gsize) { + macsGsizeWarn(log) + } + + if (!params.read_length && !params.macs_gsize) { + error ("Both '--read_length' and '--macs_gsize' not specified! Please specify either to infer MACS2 genome size for peak calling.") + } } // diff --git a/workflows/atacseq.nf b/workflows/atacseq.nf index c6c2b69b..08d102d5 100644 --- a/workflows/atacseq.nf +++ b/workflows/atacseq.nf @@ -684,7 +684,7 @@ workflow ATACSEQ { // Collate and save software versions // softwareVersionsToYAML(ch_versions) - .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_rnaseq_software_mqc_versions.yml', sort: true, newLine: true) + .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_atacseq_software_mqc_versions.yml', sort: true, newLine: true) .set { ch_collated_versions } //