mirror of
https://github.com/MillironX/nf-core_modules.git
synced 2024-11-13 05:13:09 +00:00
add Kronatools KTImportTaxonomy (#928)
* created and initialised krona module * Added kronatools/ktimporttaxonomy module * removing previous redundant work * added contains info for html * edited contains in test.yml * Update get versions Co-authored-by: Daniel Straub <42973691+d4straub@users.noreply.github.com> * remove old syntax Co-authored-by: Daniel Straub <42973691+d4straub@users.noreply.github.com> * rewording module description Co-authored-by: Daniel Straub <42973691+d4straub@users.noreply.github.com> * added detailed keywords Co-authored-by: Daniel Straub <42973691+d4straub@users.noreply.github.com> * update syntax and tool version * fixed meta.yml issues * remove contains line from test.yml * re-wrote module after nf-core/tools update - should work now * removed md5 * Update modules/kronatools/ktimporttaxonomy/main.nf Co-authored-by: Daniel Straub <42973691+d4straub@users.noreply.github.com> * update meta save * removed typo * double quotes to single quotes around html * re-ran test, which updated md5 * removed md5 * 'classifier' removed to fix linting * update version * removed erroneous ktimporttaxonomy2 * Updated input to include meta and database * fixed tab issues in yaml * added `contains` to test.yml * edited `contains` in test.yml * trying another `contains` * retrying `contains` * contains with extra line * removed classifier from tag * Apply suggestions from code review * Update meta.yml Co-authored-by: Daniel Straub <42973691+d4straub@users.noreply.github.com> Co-authored-by: Sébastien Guizard <sguizard@ed.ac.uk> Co-authored-by: Harshil Patel <drpatelh@users.noreply.github.com>
This commit is contained in:
parent
8d9e8ae839
commit
466b964b37
6 changed files with 189 additions and 0 deletions
78
modules/kronatools/ktimporttaxonomy/functions.nf
Normal file
78
modules/kronatools/ktimporttaxonomy/functions.nf
Normal file
|
@ -0,0 +1,78 @@
|
|||
//
|
||||
// Utility functions used in nf-core DSL2 module files
|
||||
//
|
||||
|
||||
//
|
||||
// Extract name of software tool from process name using $task.process
|
||||
//
|
||||
def getSoftwareName(task_process) {
|
||||
return task_process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()
|
||||
}
|
||||
|
||||
//
|
||||
// Extract name of module from process name using $task.process
|
||||
//
|
||||
def getProcessName(task_process) {
|
||||
return task_process.tokenize(':')[-1]
|
||||
}
|
||||
|
||||
//
|
||||
// Function to initialise default values and to generate a Groovy Map of available options for nf-core modules
|
||||
//
|
||||
def initOptions(Map args) {
|
||||
def Map options = [:]
|
||||
options.args = args.args ?: ''
|
||||
options.args2 = args.args2 ?: ''
|
||||
options.args3 = args.args3 ?: ''
|
||||
options.publish_by_meta = args.publish_by_meta ?: []
|
||||
options.publish_dir = args.publish_dir ?: ''
|
||||
options.publish_files = args.publish_files
|
||||
options.suffix = args.suffix ?: ''
|
||||
return options
|
||||
}
|
||||
|
||||
//
|
||||
// Tidy up and join elements of a list to return a path string
|
||||
//
|
||||
def getPathFromList(path_list) {
|
||||
def paths = path_list.findAll { item -> !item?.trim().isEmpty() } // Remove empty entries
|
||||
paths = paths.collect { it.trim().replaceAll("^[/]+|[/]+\$", "") } // Trim whitespace and trailing slashes
|
||||
return paths.join('/')
|
||||
}
|
||||
|
||||
//
|
||||
// Function to save/publish module results
|
||||
//
|
||||
def saveFiles(Map args) {
|
||||
def ioptions = initOptions(args.options)
|
||||
def path_list = [ ioptions.publish_dir ?: args.publish_dir ]
|
||||
|
||||
// Do not publish versions.yml unless running from pytest workflow
|
||||
if (args.filename.equals('versions.yml') && !System.getenv("NF_CORE_MODULES_TEST")) {
|
||||
return null
|
||||
}
|
||||
if (ioptions.publish_by_meta) {
|
||||
def key_list = ioptions.publish_by_meta instanceof List ? ioptions.publish_by_meta : args.publish_by_meta
|
||||
for (key in key_list) {
|
||||
if (args.meta && key instanceof String) {
|
||||
def path = key
|
||||
if (args.meta.containsKey(key)) {
|
||||
path = args.meta[key] instanceof Boolean ? "${key}_${args.meta[key]}".toString() : args.meta[key]
|
||||
}
|
||||
path = path instanceof String ? path : ''
|
||||
path_list.add(path)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ioptions.publish_files instanceof Map) {
|
||||
for (ext in ioptions.publish_files) {
|
||||
if (args.filename.endsWith(ext.key)) {
|
||||
def ext_list = path_list.collect()
|
||||
ext_list.add(ext.value)
|
||||
return "${getPathFromList(ext_list)}/$args.filename"
|
||||
}
|
||||
}
|
||||
} else if (ioptions.publish_files == null) {
|
||||
return "${getPathFromList(path_list)}/$args.filename"
|
||||
}
|
||||
}
|
39
modules/kronatools/ktimporttaxonomy/main.nf
Normal file
39
modules/kronatools/ktimporttaxonomy/main.nf
Normal file
|
@ -0,0 +1,39 @@
|
|||
// Import generic module functions
|
||||
include { initOptions; saveFiles; getSoftwareName; getProcessName } from './functions'
|
||||
|
||||
params.options = [:]
|
||||
options = initOptions(params.options)
|
||||
|
||||
process KRONATOOLS_KTIMPORTTAXONOMY {
|
||||
tag "${meta.id}"
|
||||
label 'process_high'
|
||||
publishDir "${params.outdir}",
|
||||
mode: params.publish_dir_mode,
|
||||
saveAs: { filename -> saveFiles(filename:filename, options:params.options, publish_dir:getSoftwareName(task.process), meta:meta, publish_by_meta:['id']) }
|
||||
|
||||
conda (params.enable_conda ? "bioconda::krona=2.8" : null)
|
||||
if (workflow.containerEngine == 'singularity' && !params.singularity_pull_docker_container) {
|
||||
container "https://depot.galaxyproject.org/singularity/krona:2.8--pl5262hdfd78af_2"
|
||||
} else {
|
||||
container "quay.io/biocontainers/krona:2.8--pl5262hdfd78af_2"
|
||||
}
|
||||
|
||||
input:
|
||||
tuple val(meta), path(report)
|
||||
path "taxonomy/taxonomy.tab"
|
||||
|
||||
output:
|
||||
tuple val(meta), path ('*.html'), emit: html
|
||||
path "versions.yml" , emit: versions
|
||||
|
||||
script:
|
||||
def VERSION='2.8'
|
||||
"""
|
||||
ktImportTaxonomy "$report" -tax taxonomy
|
||||
|
||||
cat <<-END_VERSIONS > versions.yml
|
||||
${getProcessName(task.process)}:
|
||||
${getSoftwareName(task.process)}: $VERSION
|
||||
END_VERSIONS
|
||||
"""
|
||||
}
|
44
modules/kronatools/ktimporttaxonomy/meta.yml
Normal file
44
modules/kronatools/ktimporttaxonomy/meta.yml
Normal file
|
@ -0,0 +1,44 @@
|
|||
name: kronatools_ktimporttaxonomy
|
||||
description: KronaTools Import Taxonomy imports taxonomy classifications and produces an interactive Krona plot.
|
||||
keywords:
|
||||
- plot
|
||||
- taxonomy
|
||||
- interactive
|
||||
- html
|
||||
- visualisation
|
||||
- krona chart
|
||||
tools:
|
||||
- kronatools:
|
||||
description: Krona Tools is a set of scripts to create Krona charts from several Bioinformatics tools as well as from text and XML files.
|
||||
homepage: https://github.com/marbl/Krona/wiki/KronaTools
|
||||
documentation: http://manpages.ubuntu.com/manpages/impish/man1/ktImportTaxonomy.1.html
|
||||
tool_dev_url:
|
||||
doi: https://doi.org/10.1186/1471-2105-12-385
|
||||
licence:
|
||||
|
||||
input:
|
||||
- meta:
|
||||
type: map
|
||||
description: |
|
||||
Groovy Map containing sample information
|
||||
e.g. [ id:'test']
|
||||
- database:
|
||||
type: path
|
||||
description: "Path to the taxonomy database downloaded by kronatools/kronadb"
|
||||
- report:
|
||||
type: file
|
||||
description: "A tab-delimited file with taxonomy IDs and (optionally) query IDs, magnitudes, and scores. Query IDs are taken from column 1, taxonomy IDs from column 2, and scores from column 3. Lines beginning with # will be ignored."
|
||||
pattern: "*.{tsv}"
|
||||
|
||||
output:
|
||||
- versions:
|
||||
type: file
|
||||
description: File containing software versions
|
||||
pattern: "versions.yml"
|
||||
- html:
|
||||
type: file
|
||||
description: A html file containing an interactive krona plot.
|
||||
pattern: "*.{html}"
|
||||
|
||||
authors:
|
||||
- "@mjakobs"
|
|
@ -718,6 +718,10 @@ kronatools/kronadb:
|
|||
- modules/kronatools/kronadb/**
|
||||
- tests/modules/kronatools/kronadb/**
|
||||
|
||||
kronatools/ktimporttaxonomy:
|
||||
- modules/kronatools/ktimporttaxonomy/**
|
||||
- tests/modules/kronatools/ktimporttaxonomy/**
|
||||
|
||||
last/dotplot:
|
||||
- modules/last/dotplot/**
|
||||
- tests/modules/last/dotplot/**
|
||||
|
|
15
tests/modules/kronatools/ktimporttaxonomy/main.nf
Normal file
15
tests/modules/kronatools/ktimporttaxonomy/main.nf
Normal file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env nextflow
|
||||
|
||||
nextflow.enable.dsl = 2
|
||||
|
||||
include { KRONATOOLS_KTIMPORTTAXONOMY } from '../../../../modules/kronatools/ktimporttaxonomy/main.nf' addParams( options: [:] )
|
||||
|
||||
workflow test_kronatools_ktimporttaxonomy {
|
||||
|
||||
input = [ [ id:'test', single_end:false ], // meta map
|
||||
file(params.test_data['generic']['txt']['hello'], checkIfExists: true) ]
|
||||
|
||||
taxonomy = [ file(params.test_data['generic']['txt']['hello'] , checkIfExists: true) ]
|
||||
|
||||
KRONATOOLS_KTIMPORTTAXONOMY ( input, taxonomy )
|
||||
}
|
9
tests/modules/kronatools/ktimporttaxonomy/test.yml
Normal file
9
tests/modules/kronatools/ktimporttaxonomy/test.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
- name: kronatools ktimporttaxonomy test_kronatools_ktimporttaxonomy
|
||||
command: nextflow run tests/modules/kronatools/ktimporttaxonomy -entry test_kronatools_ktimporttaxonomy -c tests/config/nextflow.config
|
||||
tags:
|
||||
- kronatools/ktimporttaxonomy
|
||||
- kronatools
|
||||
files:
|
||||
- path: output/kronatools/taxonomy.krona.html
|
||||
contains:
|
||||
- "DOCTYPE html PUBLIC"
|
Loading…
Reference in a new issue