kkonganti@11: // Define any required imports for this specific workflow kkonganti@11: import java.nio.file.Paths kkonganti@11: import nextflow.file.FileHelper kkonganti@11: kkonganti@11: // Include any necessary methods kkonganti@11: include { \ kkonganti@11: summaryOfParams; stopNow; fastqEntryPointHelp; sendMail; conciseHelp; \ kkonganti@11: addPadding; wrapUpHelp } from "${params.routines}" kkonganti@11: include { dpubmlstpyHelp } from "${params.toolshelp}${params.fs}dpubmlstpy" kkonganti@11: include { fastpHelp } from "${params.toolshelp}${params.fs}fastp" kkonganti@11: include { mashscreenHelp } from "${params.toolshelp}${params.fs}mashscreen" kkonganti@11: include { tuspyHelp } from "${params.toolshelp}${params.fs}tuspy" kkonganti@11: include { spadesHelp } from "${params.toolshelp}${params.fs}spades" kkonganti@11: include { shovillHelp } from "${params.toolshelp}${params.fs}shovill" kkonganti@11: include { polypolishHelp } from "${params.toolshelp}${params.fs}polypolish" kkonganti@11: include { mashtreeHelp } from "${params.toolshelp}${params.fs}mashtree" kkonganti@11: include { quastHelp } from "${params.toolshelp}${params.fs}quast" kkonganti@11: include { prodigalHelp } from "${params.toolshelp}${params.fs}prodigal" kkonganti@11: include { prokkaHelp } from "${params.toolshelp}${params.fs}prokka" kkonganti@11: include { pirateHelp } from "${params.toolshelp}${params.fs}pirate" kkonganti@11: include { mlstHelp } from "${params.toolshelp}${params.fs}mlst" kkonganti@11: include { abricateHelp } from "${params.toolshelp}${params.fs}abricate" kkonganti@11: kkonganti@11: // Exit if help requested before any subworkflows kkonganti@11: if (params.help) { kkonganti@11: log.info help() kkonganti@11: exit 0 kkonganti@11: } kkonganti@11: kkonganti@11: // Include any necessary modules and subworkflows kkonganti@11: include { PROCESS_FASTQ } from "${params.subworkflows}${params.fs}process_fastq" kkonganti@11: include { PRODKA } from "${params.subworkflows}${params.fs}prodka" kkonganti@11: include { DOWNLOAD_PUBMLST_SCHEME } from "${params.modules}${params.fs}download_pubmlst_scheme${params.fs}main" kkonganti@11: include { DOWNLOAD_REF_GENOME } from "${params.modules}${params.fs}download_ref_genome${params.fs}main" kkonganti@11: include { FASTP } from "${params.modules}${params.fs}fastp${params.fs}main" kkonganti@11: include { MASH_SCREEN } from "${params.modules}${params.fs}mash${params.fs}screen${params.fs}main" kkonganti@11: include { TOP_UNIQUE_SEROVARS } from "${params.modules}${params.fs}top_unique_serovars${params.fs}main" kkonganti@11: include { CAT_UNIQUE } from "${params.modules}${params.fs}cat${params.fs}unique${params.fs}main" kkonganti@11: include { SPADES_ASSEMBLE } from "${params.modules}${params.fs}spades${params.fs}assemble${params.fs}main" kkonganti@11: include { SHOVILL } from "${params.modules}${params.fs}shovill${params.fs}main" kkonganti@11: include { BWA_IDX_MEM } from "${params.modules}${params.fs}custom${params.fs}bwa_idx_mem${params.fs}main" kkonganti@11: include { POLYPOLISH } from "${params.modules}${params.fs}polypolish${params.fs}main" kkonganti@11: include { QUAST } from "${params.modules}${params.fs}quast${params.fs}main" kkonganti@11: include { RMLST_POST } from "${params.modules}${params.fs}rmlst${params.fs}main" kkonganti@11: include { PIRATE } from "${params.modules}${params.fs}pirate${params.fs}main" kkonganti@11: include { MASHTREE } from "${params.modules}${params.fs}mashtree${params.fs}main" kkonganti@11: include { UPLOAD_MICROREACT } from "${params.modules}${params.fs}upload_microreact${params.fs}main" kkonganti@11: include { MLST } from "${params.modules}${params.fs}mlst${params.fs}main" kkonganti@11: include { ABRICATE_RUN } from "${params.modules}${params.fs}abricate${params.fs}run${params.fs}main" kkonganti@11: include { ABRICATE_SUMMARY } from "${params.modules}${params.fs}abricate${params.fs}summary${params.fs}main" kkonganti@11: include { TABLE_SUMMARY } from "${params.modules}${params.fs}cat${params.fs}tables${params.fs}main" kkonganti@11: include { DUMP_SOFTWARE_VERSIONS } from "${params.modules}${params.fs}custom${params.fs}dump_software_versions${params.fs}main" kkonganti@11: include { MULTIQC } from "${params.modules}${params.fs}multiqc${params.fs}main" kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: INPUTS AND ANY CHECKS FOR THE CRONOLOGY WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: def spades_custom_hmm = (params.spades_hmm ? file ( "${params.spades_hmm}" ) : false) kkonganti@11: def reads_platform = 0 kkonganti@11: def abricate_dbs = [ 'ncbiamrplus', 'resfinder', 'megares', 'argannot' ] kkonganti@11: kkonganti@11: reads_platform += (params.input ? 1 : 0) kkonganti@11: kkonganti@11: if (params.upload_microreact) { kkonganti@11: checkMetadataExists(params.microreact_api_key, 'Microreact API Key') kkonganti@11: } kkonganti@11: kkonganti@11: if (spades_custom_hmm && !spades_custom_hmm.exists()) { kkonganti@11: stopNow("Please check if the following SPAdes' custom HMM directory\n" + kkonganti@11: "path is valid:\n${params.spades_hmm}\nCannot proceed further!") kkonganti@11: } kkonganti@11: kkonganti@11: if (reads_platform < 1 || reads_platform == 0) { kkonganti@11: stopNow("Please mention at least one absolute path to input folder which contains\n" + kkonganti@11: "FASTQ files sequenced using the --input option.\n" + kkonganti@11: "Ex: --input (Illumina or Generic short reads in FASTQ format)") kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: RUN THE CRONOLOGY WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: workflow CRONOLOGY { kkonganti@11: main: kkonganti@11: ch_mqc_custom_tbl = Channel.empty() kkonganti@11: ch_dummy = Channel.fromPath("${params.dummyfile}") kkonganti@11: ch_dummy2 = Channel.fromPath("${params.dummyfile2}") kkonganti@11: kkonganti@11: log.info summaryOfParams() kkonganti@11: kkonganti@11: PROCESS_FASTQ() kkonganti@11: kkonganti@11: PROCESS_FASTQ.out.versions kkonganti@11: .set { software_versions } kkonganti@11: kkonganti@11: PROCESS_FASTQ.out.processed_reads kkonganti@11: .map { meta, fastq -> kkonganti@11: meta.sequence_sketch = (params.mash_sketch ?: null) kkonganti@11: [meta, fastq] kkonganti@11: } kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: DOWNLOAD_PUBMLST_SCHEME( params.dpubmlstpy_org ?: null ) kkonganti@11: kkonganti@11: DOWNLOAD_REF_GENOME( kkonganti@11: (params.ref_acc ? ['id': params.ref_acc] : null) kkonganti@11: ) kkonganti@11: kkonganti@11: FASTP( ch_processed_reads ) kkonganti@11: kkonganti@11: FASTP.out.passed_reads kkonganti@11: .set { ch_processed_reads } kkonganti@11: kkonganti@11: FASTP.out.json kkonganti@11: .map { meta, json -> [ json ] } kkonganti@11: .collect() kkonganti@11: .set { ch_multiqc } kkonganti@11: kkonganti@11: MASH_SCREEN( ch_processed_reads ) kkonganti@11: kkonganti@11: TOP_UNIQUE_SEROVARS( MASH_SCREEN.out.screened ) kkonganti@11: kkonganti@11: TOP_UNIQUE_SEROVARS.out.tsv kkonganti@11: .map { meta, tsv -> tsv } kkonganti@11: .collectFile( kkonganti@11: name: 'iTOL_metadata_w_dups.txt', kkonganti@11: keepHeader: true, kkonganti@11: skip: 4, kkonganti@11: sort: true kkonganti@11: ) kkonganti@11: .map { file -> kkonganti@11: def meta = [:] kkonganti@11: meta.id = 'Unique iTOL Metadata' kkonganti@11: meta.skip_header = 4 kkonganti@11: [meta, file] kkonganti@11: } kkonganti@11: .concat( kkonganti@11: TOP_UNIQUE_SEROVARS.out.popup kkonganti@11: .map { meta, popup -> popup } kkonganti@11: .collectFile( kkonganti@11: name: 'iTOL_2_NCBI_Pathogens_w_dups.txt', kkonganti@11: keepHeader: true, kkonganti@11: skip: 3, kkonganti@11: sort: true kkonganti@11: ) kkonganti@11: .map { file -> kkonganti@11: def meta = [:] kkonganti@11: meta.id = 'Unique iTOL Popup' kkonganti@11: meta.skip_header = 3 kkonganti@11: [meta, file] kkonganti@11: } kkonganti@11: ) kkonganti@11: .set { ch_uniq } kkonganti@11: kkonganti@11: TOP_UNIQUE_SEROVARS.out.accessions kkonganti@11: .map { meta, acc -> acc } kkonganti@11: .splitText() kkonganti@11: .collect() kkonganti@11: .flatten() kkonganti@11: .unique() kkonganti@11: .collectFile(name: 'tree_genomes.txt') kkonganti@11: .map { genomes -> [ [id: 'hitsTree'], genomes ]} kkonganti@11: .set { ch_genomes_fofn } kkonganti@11: kkonganti@11: CAT_UNIQUE( ch_uniq ) kkonganti@11: kkonganti@11: if (params.fq_single_end) { kkonganti@11: SPADES_ASSEMBLE( kkonganti@11: ch_processed_reads kkonganti@11: .combine(ch_dummy) kkonganti@11: .combine(ch_dummy2) kkonganti@11: ) kkonganti@11: kkonganti@11: SPADES_ASSEMBLE.out.assembly kkonganti@11: .set{ ch_assembly } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix( SPADES_ASSEMBLE.out.versions.ifEmpty(null) ) kkonganti@11: .set { software_versions } kkonganti@11: } else { kkonganti@11: SHOVILL( ch_processed_reads ) kkonganti@11: kkonganti@11: SHOVILL.out.contigs kkonganti@11: .set { ch_assembly } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix( SHOVILL.out.versions.ifEmpty(null) ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: if (params.polypolish_run) { kkonganti@11: BWA_IDX_MEM( kkonganti@11: ch_assembly kkonganti@11: .join( ch_processed_reads ) kkonganti@11: ) kkonganti@11: kkonganti@11: POLYPOLISH( kkonganti@11: ch_assembly kkonganti@11: .join( BWA_IDX_MEM.out.aligned_sam ) kkonganti@11: ) kkonganti@11: kkonganti@11: POLYPOLISH.out.polished kkonganti@11: .set { ch_assembly } kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix( kkonganti@11: BWA_IDX_MEM.out.versions, kkonganti@11: POLYPOLISH.out.versions kkonganti@11: ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: ch_assembly kkonganti@11: .combine( DOWNLOAD_REF_GENOME.out.fasta ) kkonganti@11: .combine( DOWNLOAD_REF_GENOME.out.gff ) kkonganti@11: .multiMap { meta, consensus, fasta, gff -> kkonganti@11: sample_fa: consensus kkonganti@11: polished: [meta, consensus] kkonganti@11: ref_fasta: [meta, fasta] kkonganti@11: ref_gff: [meta, gff] kkonganti@11: } kkonganti@11: .set { ch_quast } kkonganti@11: kkonganti@11: MASHTREE( kkonganti@11: ch_genomes_fofn, kkonganti@11: DOWNLOAD_REF_GENOME.out.fasta kkonganti@11: .concat( ch_quast.sample_fa ) kkonganti@11: .collect() kkonganti@11: ) kkonganti@11: kkonganti@11: if (params.upload_microreact) { kkonganti@11: UPLOAD_MICROREACT( kkonganti@11: MASHTREE.out.nwk kkonganti@11: .map { meta, nwk -> kkonganti@11: nwk kkonganti@11: }, kkonganti@11: CAT_UNIQUE.out.csv kkonganti@11: ) kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix( kkonganti@11: UPLOAD_MICROREACT.out.versions kkonganti@11: ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: PRODKA( kkonganti@11: ch_quast.ref_fasta, kkonganti@11: ch_quast.polished kkonganti@11: ) kkonganti@11: kkonganti@11: RMLST_POST( ch_assembly ) kkonganti@11: kkonganti@11: MLST ( kkonganti@11: ch_assembly kkonganti@11: .combine( DOWNLOAD_PUBMLST_SCHEME.out.pubmlst_dir ) kkonganti@11: ) kkonganti@11: kkonganti@11: QUAST( kkonganti@11: ch_quast.polished, kkonganti@11: ch_quast.ref_fasta, kkonganti@11: ch_quast.ref_gff kkonganti@11: ) kkonganti@11: kkonganti@11: if (params.pirate_run) { kkonganti@11: PIRATE( kkonganti@11: PRODKA.out.prokka_gff kkonganti@11: .map { meta, gff -> kkonganti@11: tuple( [id: 'Predicted Genes'], gff ) kkonganti@11: } kkonganti@11: .groupTuple(by: [0]) kkonganti@11: ) kkonganti@11: kkonganti@11: software_versions kkonganti@11: .mix( PIRATE.out.versions ) kkonganti@11: .set { software_versions } kkonganti@11: } kkonganti@11: kkonganti@11: RMLST_POST.out.tsv kkonganti@11: .map { meta, tsv -> [ 'rmlst', tsv] } kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> tuple ( it[0], it[1].flatten() ) } kkonganti@11: .set { ch_mqc_rmlst_tbl } kkonganti@11: kkonganti@11: MLST.out.tsv kkonganti@11: .map { meta, tsv -> [ 'mlst', tsv] } kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> tuple ( it[0], it[1].flatten() ) } kkonganti@11: .set { ch_mqc_custom_tbl } kkonganti@11: kkonganti@11: ABRICATE_RUN ( ch_assembly, abricate_dbs ) kkonganti@11: kkonganti@11: ABRICATE_RUN.out.abricated kkonganti@11: .map { meta, abres -> [ abricate_dbs, abres ] } kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> tuple ( it[0], it[1].flatten() ) } kkonganti@11: .set { ch_abricated } kkonganti@11: kkonganti@11: ABRICATE_SUMMARY ( ch_abricated ) kkonganti@11: kkonganti@11: ch_mqc_custom_tbl kkonganti@11: .concat ( kkonganti@11: ch_mqc_rmlst_tbl, kkonganti@11: ABRICATE_SUMMARY.out.ncbiamrplus.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ABRICATE_SUMMARY.out.resfinder.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ABRICATE_SUMMARY.out.megares.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ABRICATE_SUMMARY.out.argannot.map { it -> tuple ( it[0], it[1] )}, kkonganti@11: ) kkonganti@11: .groupTuple(by: [0]) kkonganti@11: .map { it -> [ it[0], it[1].flatten() ]} kkonganti@11: .set { ch_mqc_custom_tbl } kkonganti@11: kkonganti@11: TABLE_SUMMARY ( ch_mqc_custom_tbl ) kkonganti@11: kkonganti@11: DUMP_SOFTWARE_VERSIONS ( kkonganti@11: software_versions kkonganti@11: .mix( kkonganti@11: DOWNLOAD_PUBMLST_SCHEME.out.versions, kkonganti@11: DOWNLOAD_REF_GENOME.out.versions, kkonganti@11: FASTP.out.versions, kkonganti@11: MASH_SCREEN.out.versions, kkonganti@11: TOP_UNIQUE_SEROVARS.out.versions, kkonganti@11: CAT_UNIQUE.out.versions, kkonganti@11: MASHTREE.out.versions, kkonganti@11: POLYPOLISH.out.versions, kkonganti@11: QUAST.out.versions, kkonganti@11: PRODKA.out.versions, kkonganti@11: RMLST_POST.out.versions, kkonganti@11: MLST.out.versions, kkonganti@11: ABRICATE_RUN.out.versions, kkonganti@11: ABRICATE_SUMMARY.out.versions, kkonganti@11: TABLE_SUMMARY.out.versions kkonganti@11: ) kkonganti@11: .unique() kkonganti@11: .collectFile(name: 'collected_versions.yml') kkonganti@11: ) kkonganti@11: kkonganti@11: DUMP_SOFTWARE_VERSIONS.out.mqc_yml kkonganti@11: .concat ( kkonganti@11: ch_multiqc, kkonganti@11: TABLE_SUMMARY.out.mqc_yml, kkonganti@11: PRODKA.out.prokka_txt.map { meta, txt -> txt }, kkonganti@11: QUAST.out.results.map { meta, res -> res } kkonganti@11: ) kkonganti@11: .collect() kkonganti@11: .set { ch_multiqc } kkonganti@11: kkonganti@11: MULTIQC( ch_multiqc ) kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: ON COMPLETE, SHOW GORY DETAILS OF ALL PARAMS WHICH WILL BE HELPFUL TO DEBUG kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: workflow.onComplete { kkonganti@11: if (workflow.success) { kkonganti@11: sendMail() kkonganti@11: } kkonganti@11: } kkonganti@11: kkonganti@11: workflow.onError { kkonganti@11: sendMail() kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: METHOD TO CHECK FILE EXISTENCE kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: def checkMetadataExists(file_path, msg) { kkonganti@11: file_path_obj = file( file_path ) kkonganti@11: kkonganti@11: if (msg.toString().find(/(?i)KMA/)) { kkonganti@11: if (!file_path_obj.parent.exists() || file_path_obj.parent.size() == 0) { kkonganti@11: stopNow("Please check if your ${msg}\n" + kkonganti@11: "[ ${file_path} ]\nexists and that the files are not of size 0.") kkonganti@11: } kkonganti@11: } kkonganti@11: else if (!file_path_obj.exists() || file_path_obj.size() == 0) { kkonganti@11: stopNow("Please check if your ${msg} file\n" + kkonganti@11: "[ ${file_path} ]\nexists and is not of size 0.") kkonganti@11: } kkonganti@11: } kkonganti@11: kkonganti@11: /* kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: HELP TEXT METHODS FOR CRONOLOGY WORKFLOW kkonganti@11: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kkonganti@11: */ kkonganti@11: kkonganti@11: def help() { kkonganti@11: kkonganti@11: Map helptext = [:] kkonganti@11: Map nH = [:] kkonganti@11: Map fastpAdapterHelp = [:] kkonganti@11: def uHelp = (params.help.getClass().toString() =~ /String/ ? params.help.tokenize(',').join(' ') : '') kkonganti@11: kkonganti@11: Map defaultHelp = [ kkonganti@11: '--help dpubmlstpy' : 'Show dl_pubmlst_profiles_and_schemes.py CLI options', kkonganti@11: '--help fastp' : 'Show fastp CLI options', kkonganti@11: '--help spades' : 'Show spades CLI options', kkonganti@11: '--help shovill' : 'Show shovill CLI options', kkonganti@11: '--help polypolish' : 'Show polypolish CLI options', kkonganti@11: '--help quast' : 'Show quast.py CLI options', kkonganti@11: '--help prodigal' : 'Show prodigal CLI options', kkonganti@11: '--help prokka' : 'Show prokka CLI options', kkonganti@11: '--help pirate' : 'Show priate CLI options', kkonganti@11: '--help mlst' : 'Show mlst CLI options', kkonganti@11: '--help mash' : 'Show mash `screen` CLI options', kkonganti@11: '--help tree' : 'Show mashtree CLI options', kkonganti@11: '--help abricate' : 'Show abricate CLI options\n' kkonganti@11: ] kkonganti@11: kkonganti@11: fastpAdapterHelp['--fastp_use_custom_adapaters'] = "Use custom adapter FASTA with fastp on top of " + kkonganti@11: "built-in adapter sequence auto-detection. Enabling this option will attempt to find and remove " + kkonganti@11: "all possible Illumina adapter and primer sequences but will make the workflow run slow. " + kkonganti@11: "Default: ${params.fastp_use_custom_adapters}" kkonganti@11: kkonganti@11: if (params.help.getClass().toString() =~ /Boolean/ || uHelp.size() == 0) { kkonganti@11: println conciseHelp('fastp,polypolish') kkonganti@11: helptext.putAll(defaultHelp) kkonganti@11: } else { kkonganti@11: params.help.tokenize(',').each { h -> kkonganti@11: if (defaultHelp.keySet().findAll{ it =~ /(?i)\b${h}\b/ }.size() == 0) { kkonganti@11: println conciseHelp('fastp,polypolish') kkonganti@11: stopNow("Tool [ ${h} ] is not a part of ${params.pipeline} pipeline.") kkonganti@11: } kkonganti@11: } kkonganti@11: kkonganti@11: helptext.putAll( kkonganti@11: fastqEntryPointHelp() + kkonganti@11: (uHelp =~ /(?i)\bdpubmlstpy/ ? dpubmlstpyHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bfastp/ ? fastpHelp(params).text + fastpAdapterHelp : nH) + kkonganti@11: (uHelp =~ /(?i)\bmash/ ? mashscreenHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\btuspy/ ? tuspyHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bspades/ ? spadesHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bshovill/ ? shovillHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bpolypolish/ ? polypolishHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bquast/ ? quastHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bprodigal/ ? prodigalHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bprokka/ ? prokkaHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bpirate/ ? pirateHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\bmlst/ ? mlstHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\btree/ ? mashtreeHelp(params).text : nH) + kkonganti@11: (uHelp =~ /(?i)\babricate/ ? abricateHelp(params).text : nH) + kkonganti@11: wrapUpHelp() kkonganti@11: ) kkonganti@11: } kkonganti@11: kkonganti@11: return addPadding(helptext) kkonganti@11: }